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 }