001 // License: GPL. See LICENSE file for details.
002 package org.openstreetmap.josm.command;
003
004 import static org.openstreetmap.josm.tools.I18n.tr;
005
006 import java.util.Collection;
007 import java.util.List;
008 import javax.swing.Icon;
009
010 import org.openstreetmap.josm.data.osm.Node;
011 import org.openstreetmap.josm.data.osm.Way;
012 import org.openstreetmap.josm.data.osm.OsmPrimitive;
013 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
014 import org.openstreetmap.josm.gui.DefaultNameFormatter;
015 import org.openstreetmap.josm.tools.ImageProvider;
016
017 /**
018 * Command that changes the nodes list of a way.
019 * The same can be done with ChangeCommand, but this is more
020 * efficient. (Needed for the duplicate node fixing
021 * tool of the validator plugin, when processing large data sets.)
022 *
023 * @author Imi
024 */
025 public class ChangeNodesCommand extends Command {
026
027 private final Way way;
028 private final List<Node> newNodes;
029
030 public ChangeNodesCommand(Way way, List<Node> newNodes) {
031 super();
032 this.way = way;
033 this.newNodes = newNodes;
034 }
035
036 @Override public boolean executeCommand() {
037 super.executeCommand();
038 way.setNodes(newNodes);
039 way.setModified(true);
040 return true;
041 }
042
043 @Override public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted, Collection<OsmPrimitive> added) {
044 modified.add(way);
045 }
046
047 @Override
048 public String getDescriptionText() {
049 return tr("Changed nodes of {0}", way.getDisplayName(DefaultNameFormatter.getInstance()));
050 }
051
052 @Override
053 public Icon getDescriptionIcon() {
054 return ImageProvider.get(OsmPrimitiveType.WAY);
055 }
056 }