001// License: GPL. See LICENSE file for details. 002package org.openstreetmap.josm.command; 003 004import static org.openstreetmap.josm.tools.I18n.tr; 005 006import java.util.Collection; 007import java.util.List; 008import javax.swing.Icon; 009 010import org.openstreetmap.josm.data.osm.Node; 011import org.openstreetmap.josm.data.osm.Way; 012import org.openstreetmap.josm.data.osm.OsmPrimitive; 013import org.openstreetmap.josm.data.osm.OsmPrimitiveType; 014import org.openstreetmap.josm.gui.DefaultNameFormatter; 015import 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 */ 025public 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}