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 }