001 // License: GPL. Copyright 2007 by Immanuel Scholz and others 002 package org.openstreetmap.josm.command; 003 004 import static org.openstreetmap.josm.tools.I18n.marktr; 005 import static org.openstreetmap.josm.tools.I18n.tr; 006 007 import java.util.Collection; 008 009 import javax.swing.Icon; 010 011 import org.openstreetmap.josm.data.osm.OsmPrimitive; 012 import org.openstreetmap.josm.data.osm.OsmPrimitiveType; 013 import org.openstreetmap.josm.gui.DefaultNameFormatter; 014 import org.openstreetmap.josm.gui.layer.OsmDataLayer; 015 import org.openstreetmap.josm.tools.ImageProvider; 016 017 /** 018 * Command that basically replaces one OSM primitive by another of the 019 * same type. 020 * 021 * @author Imi 022 */ 023 public class ChangeCommand extends Command { 024 025 private final OsmPrimitive osm; 026 private final OsmPrimitive newOsm; 027 028 029 public ChangeCommand(OsmPrimitive osm, OsmPrimitive newOsm) { 030 super(); 031 this.osm = osm; 032 this.newOsm = newOsm; 033 } 034 035 public ChangeCommand(OsmDataLayer layer, OsmPrimitive osm, OsmPrimitive newOsm) { 036 super(layer); 037 this.osm = osm; 038 this.newOsm = newOsm; 039 } 040 041 @Override public boolean executeCommand() { 042 super.executeCommand(); 043 osm.cloneFrom(newOsm); 044 osm.setModified(true); 045 return true; 046 } 047 048 @Override public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted, Collection<OsmPrimitive> added) { 049 modified.add(osm); 050 } 051 052 @Override 053 public String getDescriptionText() { 054 String msg = ""; 055 switch(OsmPrimitiveType.from(osm)) { 056 case NODE: msg = marktr("Change node {0}"); break; 057 case WAY: msg = marktr("Change way {0}"); break; 058 case RELATION: msg = marktr("Change relation {0}"); break; 059 } 060 return tr(msg, osm.getDisplayName(DefaultNameFormatter.getInstance())); 061 } 062 063 @Override 064 public Icon getDescriptionIcon() { 065 return ImageProvider.get(osm.getDisplayType()); 066 } 067 }