001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.command; 003 004import static org.openstreetmap.josm.tools.I18n.tr; 005 006import java.util.Collection; 007 008import javax.swing.Icon; 009import javax.swing.JOptionPane; 010 011import org.openstreetmap.josm.Main; 012import org.openstreetmap.josm.data.conflict.Conflict; 013import org.openstreetmap.josm.data.osm.OsmPrimitive; 014import org.openstreetmap.josm.gui.DefaultNameFormatter; 015import org.openstreetmap.josm.gui.layer.OsmDataLayer; 016import org.openstreetmap.josm.tools.ImageProvider; 017 018public 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 Main.warn(tr("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}