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

Last change on this file since 7864 was 7864, checked in by Don-vip, 9 years ago

global cleanup of IllegalArgumentExceptions thrown by JOSM

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