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

Last change on this file since 7392 was 6305, checked in by Don-vip, 11 years ago

fix #9093 - teach validator about "subarea" and "land_area" roles of administrative boundary relations

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