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

Last change on this file since 6248 was 6084, checked in by bastiK, 11 years ago

see #8902 - add missing @Override annotations (patch by shinigami)

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