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    }