// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.turnrestrictions.editor; import java.io.Serializable; import org.openstreetmap.josm.data.osm.PrimitiveId; import org.openstreetmap.josm.data.osm.RelationMember; import org.openstreetmap.josm.data.osm.SimplePrimitiveId; import org.openstreetmap.josm.tools.CheckParameterUtil; /** * RelationMemberModel is a mutable relation member. In contrast to * {@link RelationMember} it doesn't keep references to the referred * primitive. Internally, it only keeps their the unique id. * * */ public class RelationMemberModel implements Serializable { private String role; private SimplePrimitiveId target; /** * Creates a new relation member model * * @param role the member role. Reset to "" if null. * @param target the id of the target object. Must not be null. * @throws IllegalArgumentException thrown if {@code target} is null */ public RelationMemberModel(String role, PrimitiveId target) throws IllegalArgumentException { CheckParameterUtil.ensureParameterNotNull(target, "target"); this.role = role == null ? "" : role; this.target = new SimplePrimitiveId(target.getUniqueId(), target.getType()); } /** * Creates a new relation member model from a relation member * * @param member the relation member. Must not be null. * @throws IllegalArgumentException thrown if {@code member} is null */ public RelationMemberModel(RelationMember member) throws IllegalArgumentException { CheckParameterUtil.ensureParameterNotNull(member, "member"); this.role = member.getRole(); setTarget(member.getMember().getPrimitiveId()); } /** * Replies the current role in this model. Never null. * * @return the current role in this model */ public String getRole() { return role; } /** * Sets the current role in this model. * * @param role the role. Reset to "" if null. */ public void setRole(String role) { this.role = role == null ? "" : role; } /** * Replies the id of the target object of this relation member. * * @return the id of the target object of this relation member. */ public PrimitiveId getTarget() { return target; } /** * Sets the id of the target object. * * @param target the id of the target object. Must not be null. * @throws IllegalArgumentException thrown if {@code target} is null */ public void setTarget(PrimitiveId target) throws IllegalArgumentException { CheckParameterUtil.ensureParameterNotNull(target, "target"); this.target = new SimplePrimitiveId(target.getUniqueId(), target.getType()); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((role == null) ? 0 : role.hashCode()); result = prime * result + ((target == null) ? 0 : target.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; RelationMemberModel other = (RelationMemberModel) obj; if (role == null) { if (other.role != null) return false; } else if (!role.equals(other.role)) return false; if (target == null) { if (other.target != null) return false; } else if (!target.equals(other.target)) return false; return true; } }