// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.data.osm;
import java.io.Serializable;
import java.util.Objects;
import org.openstreetmap.josm.tools.CheckParameterUtil;
public class RelationMemberData implements PrimitiveId, Serializable {
private static final long serialVersionUID = 381392198209333319L;
private final String role;
private final long memberId;
private final OsmPrimitiveType memberType;
/**
* Constructs a new {@code RelationMemberData}.
* @param role member role - can be null
* @param type member type - cannot be null
* @param id member id - cannot be null
* @throws IllegalArgumentException is type or id is null
*/
public RelationMemberData(String role, OsmPrimitiveType type, long id) {
CheckParameterUtil.ensureParameterNotNull(type, "type");
this.role = role == null ? "" : role;
this.memberType = type;
this.memberId = id;
}
/**
* Constructs a new {@code RelationMemberData}.
* @param role member role - can be null
* @param primitive member type and id - cannot be null
* @throws NullPointerException if primitive is null
*/
public RelationMemberData(String role, PrimitiveId primitive) {
this(role, primitive.getType(), primitive.getUniqueId());
}
/**
* Get member id.
* @return member id
*/
public long getMemberId() {
return memberId;
}
/**
* Get member role.
* @return member role
*/
public String getRole() {
return role;
}
/**
* Get member type.
* @return member type
*/
public OsmPrimitiveType getMemberType() {
return memberType;
}
/**
* Determines if this member has a role.
* @return {@code true} if this member has a role
*/
public boolean hasRole() {
return !"".equals(role);
}
@Override
public String toString() {
return (memberType != null ? memberType.getAPIName() : "undefined") + ' ' + memberId;
}
/**
* PrimitiveId implementation. Returns the same value as {@link #getMemberType()}
*/
@Override
public OsmPrimitiveType getType() {
return memberType;
}
/**
* PrimitiveId implementation. Returns the same value as {@link #getMemberId()}
*/
@Override
public long getUniqueId() {
return memberId;
}
@Override
public boolean isNew() {
return memberId <= 0;
}
@Override
public int hashCode() {
return Objects.hash(role, memberId, memberType);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
RelationMemberData that = (RelationMemberData) obj;
return memberId == that.memberId &&
memberType == that.memberType &&
Objects.equals(role, that.role);
}
}