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

Last change on this file since 2399 was 2399, checked in by jttt, 14 years ago

Added map of primitives to dataset to make search by id faster
check if primitive already exist in addPrimitive and removePrimitive
use PrimitiveId instead of id + primitive type

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