// License: GPL. See LICENSE file for details. package org.openstreetmap.josm.command; import static org.openstreetmap.josm.tools.I18n.tr; import java.util.Collection; import java.util.List; import javax.swing.JLabel; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.MutableTreeNode; import org.openstreetmap.josm.data.osm.Node; import org.openstreetmap.josm.data.osm.Way; import org.openstreetmap.josm.data.osm.OsmPrimitive; import org.openstreetmap.josm.data.osm.OsmPrimitiveType; import org.openstreetmap.josm.gui.DefaultNameFormatter; import org.openstreetmap.josm.tools.ImageProvider; /** * Command that changes the nodes list of a way. * The same can be done with ChangeCommand, but this is more * efficient. (Needed for the duplicate node fixing * tool of the validator plugin, when processing large data sets.) * * @author Imi */ public class ChangeNodesCommand extends Command { private final Way way; private final List<Node> newNodes; public ChangeNodesCommand(Way way, List<Node> newNodes) { super(); this.way = way; this.newNodes = newNodes; } @Override public boolean executeCommand() { super.executeCommand(); way.setNodes(newNodes); way.setModified(true); return true; } @Override public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted, Collection<OsmPrimitive> added) { modified.add(way); } @Override public MutableTreeNode description() { String msg = tr("Changed nodes of {0}", way.getDisplayName(DefaultNameFormatter.getInstance())); return new DefaultMutableTreeNode( new JLabel(msg, ImageProvider.get(OsmPrimitiveType.WAY), JLabel.HORIZONTAL)); } }