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 }