// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.conflict.pair; import static org.openstreetmap.josm.gui.conflict.pair.ListRole.MERGED_ENTRIES; import static org.openstreetmap.josm.gui.conflict.pair.ListRole.MY_ENTRIES; import static org.openstreetmap.josm.gui.conflict.pair.ListRole.THEIR_ENTRIES; import static org.openstreetmap.josm.tools.I18n.tr; import org.openstreetmap.josm.tools.Utils; /** * Enumeration of the possible comparison pairs * @since 1650 */ public enum ComparePairType { /** * compare my version of an {@link org.openstreetmap.josm.data.osm.OsmPrimitive} with their version */ MY_WITH_THEIR(tr("My with Their"), new ListRole[] {MY_ENTRIES, THEIR_ENTRIES}), /** * compare my version of an {@link org.openstreetmap.josm.data.osm.OsmPrimitive} with the merged version */ MY_WITH_MERGED(tr("My with Merged"), new ListRole[] {MY_ENTRIES, MERGED_ENTRIES}), /** * compare their version of an {@link org.openstreetmap.josm.data.osm.OsmPrimitive} with the merged veresion */ THEIR_WITH_MERGED(tr("Their with Merged"), new ListRole[] {THEIR_ENTRIES, MERGED_ENTRIES}); /** the localized display name */ private final String displayName; private final ListRole[] participatingRoles; ComparePairType(String displayName, ListRole... participatingRoles) { this.displayName = displayName; this.participatingRoles = Utils.copyArray(participatingRoles); } /** * replies the display name * * @return the display name */ public String getDisplayName() { return displayName; } /** * replies true, if <code>role</code> is participating in this comparison pair * * @param role the list role * @return true, if <code>role</code> is participating in this comparison pair; false, otherwise */ public boolean isParticipatingIn(ListRole role) { for (ListRole r: participatingRoles) { if (r.equals(role)) return true; } return false; } /** * replies the pair of {@link ListRole}s participating in this comparison pair * * @return the pair of list roles */ public ListRole[] getParticipatingRoles() { return Utils.copyArray(participatingRoles); } /** * replies the opposite role of <code>role</code> participating in this comparison pair * * @param role one of the two roles in this pair * @return the opposite role * @throws IllegalStateException if role is not participating in this pair */ public ListRole getOppositeRole(ListRole role) { if (!isParticipatingIn(role)) throw new IllegalStateException(tr("Role {0} is not participating in compare pair {1}.", role.toString(), this.toString())); if (participatingRoles[0].equals(role)) return participatingRoles[1]; else return participatingRoles[0]; } }