source: josm/trunk/src/org/openstreetmap/josm/data/osm/RelationMember.java@ 11587

Last change on this file since 11587 was 11553, checked in by Don-vip, 7 years ago

refactor handling of null values - use Java 8 Optional where possible

  • Property svn:eol-style set to native
File size: 4.8 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.data.osm;
3
4import java.util.Arrays;
5import java.util.Objects;
6import java.util.Optional;
7
8import org.openstreetmap.josm.tools.CheckParameterUtil;
9
10/**
11 * A linkage class that can be used by an relation to keep a list of
12 * members. Since membership may be qualified by a "role", a simple
13 * list is not sufficient.
14 *
15 */
16public class RelationMember implements PrimitiveId {
17
18 /**
19 *
20 */
21 private final String role;
22
23 /**
24 *
25 */
26 private final OsmPrimitive member;
27
28 /**
29 * Returns the role of this relation member.
30 * @return Role name or "". Never returns null
31 * @since 1930
32 */
33 public String getRole() {
34 return role;
35 }
36
37 /**
38 * Determines if this relation member has a role.
39 * @return True if role is set
40 * @since 1930
41 */
42 public boolean hasRole() {
43 return !"".equals(role);
44 }
45
46 /**
47 * Determines if this relation member's role is in the given list.
48 * @param roles The roles to look after
49 * @return True if role is in the given list
50 * @since 6305
51 */
52 public boolean hasRole(String ... roles) {
53 return Arrays.asList(roles).contains(role);
54 }
55
56 /**
57 * Determines if this relation member is a relation.
58 * @return True if member is relation
59 * @since 1937
60 */
61 public boolean isRelation() {
62 return member instanceof Relation;
63 }
64
65 /**
66 * Determines if this relation member is a way.
67 * @return True if member is way
68 * @since 1937
69 */
70 public boolean isWay() {
71 return member instanceof Way;
72 }
73
74 /**
75 *
76 * @return type of member for icon display
77 * @since 3844
78 */
79 public OsmPrimitiveType getDisplayType() {
80 return member.getDisplayType();
81 }
82
83 /**
84 * Determines if this relation member is a node.
85 * @return True if member is node
86 * @since 1937
87 */
88 public boolean isNode() {
89 return member instanceof Node;
90 }
91
92 /**
93 * Returns the relation member as a relation.
94 * @return Member as relation
95 * @since 1937
96 */
97 public Relation getRelation() {
98 return (Relation) member;
99 }
100
101 /**
102 * Returns the relation member as a way.
103 * @return Member as way
104 * @since 1937
105 */
106 public Way getWay() {
107 return (Way) member;
108 }
109
110 /**
111 * Returns the relation member as a node.
112 * @return Member as node
113 * @since 1937
114 */
115 public Node getNode() {
116 return (Node) member;
117 }
118
119 /**
120 * Returns the relation member.
121 * @return Member. Returned value is never null.
122 * @since 1937
123 */
124 public OsmPrimitive getMember() {
125 return member;
126 }
127
128 /**
129 * Constructs a new {@code RelationMember}.
130 * @param role Can be null, in this case it's save as ""
131 * @param member Cannot be null
132 * @throws IllegalArgumentException if member is <code>null</code>
133 */
134 public RelationMember(String role, OsmPrimitive member) {
135 CheckParameterUtil.ensureParameterNotNull(member, "member");
136 this.role = Optional.ofNullable(role).orElse("");
137 this.member = member;
138 }
139
140 /**
141 * Copy constructor.
142 * This constructor is left only for backwards compatibility. Copying RelationMember doesn't make sense
143 * because it's immutable
144 * @param other relation member to be copied.
145 */
146 public RelationMember(RelationMember other) {
147 this(other.role, other.member);
148 }
149
150 @Override
151 public String toString() {
152 return '"' + role + "\"=" + member;
153 }
154
155 /**
156 * Replies true, if this relation member refers to the primitive
157 *
158 * @param primitive the primitive to check
159 * @return true, if this relation member refers to the primitive
160 */
161 public boolean refersTo(OsmPrimitive primitive) {
162 return member == primitive;
163 }
164
165 @Override
166 public int hashCode() {
167 return Objects.hash(role, member);
168 }
169
170 @Override
171 public boolean equals(Object obj) {
172 if (this == obj) return true;
173 if (obj == null || getClass() != obj.getClass()) return false;
174 RelationMember that = (RelationMember) obj;
175 return Objects.equals(role, that.role) &&
176 Objects.equals(member, that.member);
177 }
178
179 /**
180 * PrimitiveId implementation. Returns the same value as getMember().getType()
181 */
182 @Override
183 public OsmPrimitiveType getType() {
184 return member.getType();
185 }
186
187 /**
188 * PrimitiveId implementation. Returns the same value as getMemberType().getUniqueId()
189 */
190 @Override
191 public long getUniqueId() {
192 return member.getUniqueId();
193 }
194
195 @Override
196 public boolean isNew() {
197 return member.isNew();
198 }
199}
Note: See TracBrowser for help on using the repository browser.