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

Last change on this file since 17862 was 17862, checked in by simon04, 3 years ago

fix #17177 - Add support for Mapbox Vector Tile (patch by taylor.smock)

Signed-off-by: Taylor Smock <tsmock@…>

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