001 // License: GPL. For details, see LICENSE file. 002 package org.openstreetmap.josm.command; 003 004 import static org.openstreetmap.josm.tools.I18n.tr; 005 006 import java.util.Collection; 007 008 import javax.swing.Icon; 009 import javax.swing.JOptionPane; 010 011 import org.openstreetmap.josm.Main; 012 import org.openstreetmap.josm.data.conflict.Conflict; 013 import org.openstreetmap.josm.data.osm.OsmPrimitive; 014 import org.openstreetmap.josm.gui.DefaultNameFormatter; 015 import org.openstreetmap.josm.gui.layer.OsmDataLayer; 016 import org.openstreetmap.josm.tools.ImageProvider; 017 018 public class ConflictAddCommand extends Command { 019 private Conflict<? extends OsmPrimitive> conflict; 020 021 public ConflictAddCommand(OsmDataLayer layer, Conflict<? extends OsmPrimitive> conflict) { 022 super(layer); 023 this.conflict = conflict; 024 } 025 026 protected void warnBecauseOfDoubleConflict() { 027 JOptionPane.showMessageDialog( 028 Main.parent, 029 tr("<html>Layer ''{0}'' already has a conflict for object<br>" 030 + "''{1}''.<br>" 031 + "This conflict cannot be added.</html>", 032 getLayer().getName(), 033 conflict.getMy().getDisplayName(DefaultNameFormatter.getInstance()) 034 ), 035 tr("Double conflict"), 036 JOptionPane.ERROR_MESSAGE 037 ); 038 } 039 @Override public boolean executeCommand() { 040 try { 041 getLayer().getConflicts().add(conflict); 042 } catch(IllegalStateException e) { 043 e.printStackTrace(); 044 warnBecauseOfDoubleConflict(); 045 } 046 return true; 047 } 048 049 @Override public void undoCommand() { 050 if (! Main.map.mapView.hasLayer(getLayer())) { 051 System.out.println(tr("Warning: Layer ''{0}'' does not exist any more. Cannot remove conflict for object ''{1}''.", 052 getLayer().getName(), 053 conflict.getMy().getDisplayName(DefaultNameFormatter.getInstance()) 054 )); 055 return; 056 } 057 getLayer().getConflicts().remove(conflict); 058 } 059 060 @Override public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted, Collection<OsmPrimitive> added) { 061 // nothing to fill 062 } 063 064 @Override 065 public String getDescriptionText() { 066 return tr("Add conflict for ''{0}''", 067 conflict.getMy().getDisplayName(DefaultNameFormatter.getInstance())); 068 } 069 070 @Override 071 public Icon getDescriptionIcon() { 072 return ImageProvider.get(conflict.getMy().getDisplayType()); 073 } 074 }