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

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

API alignment between Relation/RelationData and RelationMember/RelationMemberData: update of IRelation/IRelationMember interfaces

  • Property svn:eol-style set to native
File size: 3.6 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<OsmPrimitive> {
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 @Override
42 public boolean isNode() {
43 return member instanceof Node;
44 }
45
46 /**
47 * Returns the relation member as a relation.
48 * @return Member as relation
49 * @since 1937
50 */
51 public Relation getRelation() {
52 return (Relation) member;
53 }
54
55 /**
56 * Returns the relation member as a way.
57 * @return Member as way
58 * @since 1937
59 */
60 public Way getWay() {
61 return (Way) member;
62 }
63
64 /**
65 * Returns the relation member as a node.
66 * @return Member as node
67 * @since 1937
68 */
69 public Node getNode() {
70 return (Node) member;
71 }
72
73 @Override
74 public OsmPrimitive getMember() {
75 return member;
76 }
77
78 /**
79 * Constructs a new {@code RelationMember}.
80 * @param role Can be null, in this case it's save as ""
81 * @param member Cannot be null
82 * @throws IllegalArgumentException if member is <code>null</code>
83 */
84 public RelationMember(String role, OsmPrimitive member) {
85 CheckParameterUtil.ensureParameterNotNull(member, "member");
86 this.role = Optional.ofNullable(role).orElse("");
87 this.member = member;
88 }
89
90 /**
91 * Copy constructor.
92 * This constructor is left only for backwards compatibility. Copying RelationMember doesn't make sense
93 * because it's immutable
94 * @param other relation member to be copied.
95 */
96 public RelationMember(RelationMember other) {
97 this(other.role, other.member);
98 }
99
100 @Override
101 public String toString() {
102 return '"' + role + "\"=" + member;
103 }
104
105 /**
106 * Replies true, if this relation member refers to the primitive
107 *
108 * @param primitive the primitive to check
109 * @return true, if this relation member refers to the primitive
110 */
111 public boolean refersTo(OsmPrimitive primitive) {
112 return member == primitive;
113 }
114
115 @Override
116 public int hashCode() {
117 return Objects.hash(role, member);
118 }
119
120 @Override
121 public boolean equals(Object obj) {
122 if (this == obj) return true;
123 if (obj == null || getClass() != obj.getClass()) return false;
124 RelationMember that = (RelationMember) obj;
125 return Objects.equals(role, that.role) &&
126 Objects.equals(member, that.member);
127 }
128
129 /**
130 * PrimitiveId implementation. Returns the same value as getMember().getType()
131 */
132 @Override
133 public OsmPrimitiveType getType() {
134 return member.getType();
135 }
136
137 /**
138 * PrimitiveId implementation. Returns the same value as getMember().getUniqueId()
139 */
140 @Override
141 public long getUniqueId() {
142 return member.getUniqueId();
143 }
144
145 /**
146 * PrimitiveId implementation. Returns the same value as getMember().isNew()
147 */
148 @Override
149 public boolean isNew() {
150 return member.isNew();
151 }
152}
Note: See TracBrowser for help on using the repository browser.