001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.data.osm;
003
004public class RelationMemberData implements PrimitiveId {
005
006    private final String role;
007    private final long memberId;
008    private final OsmPrimitiveType memberType;
009
010    public RelationMemberData(String role, OsmPrimitiveType type, long id) {
011        this.role = role == null?"":role;
012        this.memberType = type;
013        this.memberId = id;
014    }
015
016    public RelationMemberData(String role, PrimitiveId primitive) {
017        this(role, primitive.getType(), primitive.getUniqueId());
018    }
019
020    public long getMemberId() {
021        return memberId;
022    }
023
024    public String getRole() {
025        return role;
026    }
027
028    public OsmPrimitiveType getMemberType() {
029        return memberType;
030    }
031
032    public boolean hasRole() {
033        return !"".equals(role);
034    }
035
036    @Override
037    public String toString() {
038        return (memberType != null ? memberType.getAPIName() : "undefined") + " " + memberId;
039    }
040
041    /**
042     * PrimitiveId implementation. Returns the same value as {@link #getMemberType()}
043     */
044    @Override
045    public OsmPrimitiveType getType() {
046        return memberType;
047    }
048
049    /**
050     * PrimitiveId implementation. Returns the same value as {@link #getMemberId()()}
051     */
052    @Override
053    public long getUniqueId() {
054        return memberId;
055    }
056
057    @Override
058    public boolean isNew() {
059        return memberId <= 0;
060    }
061
062    @Override
063    public int hashCode() {
064        final int prime = 31;
065        int result = 1;
066        result = prime * result + (int) (memberId ^ (memberId >>> 32));
067        result = prime * result
068                + ((memberType == null) ? 0 : memberType.hashCode());
069        result = prime * result + ((role == null) ? 0 : role.hashCode());
070        return result;
071    }
072
073    @Override
074    public boolean equals(Object obj) {
075        if (this == obj)
076            return true;
077        if (obj == null)
078            return false;
079        if (getClass() != obj.getClass())
080            return false;
081        RelationMemberData other = (RelationMemberData) obj;
082        if (memberId != other.memberId)
083            return false;
084        if (memberType != other.memberType)
085            return false;
086        if (role == null) {
087            if (other.role != null)
088                return false;
089        } else if (!role.equals(other.role))
090            return false;
091        return true;
092    }
093}