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