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

Last change on this file since 9827 was 9371, checked in by simon04, 8 years ago

Java 7: use Objects.equals and Objects.hash

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