001    // License: GPL. For details, see LICENSE file.
002    package org.openstreetmap.josm.data.osm;
003    
004    public 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    }