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

Revision 3844, 4.1 KB checked in by stoecker, 16 months ago (diff)

see #5899 - support different display of closed ways and areas

  • Property svn:eol-style set to native
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     * @throw IllegalArgumentException thrown if member is null
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    public OsmPrimitiveType getType() {
174        return member.getType();
175    }
176
177    /**
178     * PrimitiveId implementation. Returns the same value as getMemberType().getUniqueId()
179     */
180    public long getUniqueId() {
181        return member.getUniqueId();
182    }
183
184    public boolean isNew() {
185        return member.isNew();
186    }
187}
Note: See TracBrowser for help on using the repository browser.