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

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

introduce IRelationMember

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