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}