// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.command.conflict; import static org.openstreetmap.josm.tools.I18n.tr; import java.util.Collection; import java.util.List; import java.util.Objects; import javax.swing.Icon; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.data.conflict.Conflict; import org.openstreetmap.josm.data.osm.Node; import org.openstreetmap.josm.data.osm.OsmPrimitive; import org.openstreetmap.josm.data.osm.Way; import org.openstreetmap.josm.tools.ImageProvider; /** * Represents the resolution of conflicts in the node list of two {@link Way}s. * */ public class WayNodesConflictResolverCommand extends ConflictResolveCommand { /** the conflict to resolve */ private final Conflict<Way> conflict; /** the list of merged nodes. This becomes the list of news of my way after the * command is executed */ private final List<Node> mergedNodeList; /** * @param conflict the conflict data set * @param mergedNodeList the list of merged nodes */ @SuppressWarnings("unchecked") public WayNodesConflictResolverCommand(Conflict<? extends OsmPrimitive> conflict, List<Node> mergedNodeList) { this.conflict = (Conflict<Way>) conflict; this.mergedNodeList = mergedNodeList; } @Override public String getDescriptionText() { return tr("Resolve conflicts in node list of way {0}", conflict.getMy().getId()); } @Override public Icon getDescriptionIcon() { return ImageProvider.get("data", "object"); } @Override public boolean executeCommand() { // remember the current state of 'my' way // super.executeCommand(); // replace the list of nodes of 'my' way by the list of merged nodes // for (Node n:mergedNodeList) { if (!getAffectedDataSet().getNodes().contains(n)) { Main.warn(tr("Main dataset does not include node {0}", n.toString())); } } conflict.getMy().setNodes(mergedNodeList); rememberConflict(conflict); return true; } @Override public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted, Collection<OsmPrimitive> added) { modified.add(conflict.getMy()); } @Override public int hashCode() { return Objects.hash(super.hashCode(), conflict, mergedNodeList); } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; if (!super.equals(obj)) return false; WayNodesConflictResolverCommand that = (WayNodesConflictResolverCommand) obj; return Objects.equals(conflict, that.conflict) && Objects.equals(mergedNodeList, that.mergedNodeList); } }