001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.plugins.streetside.gui.imageinfo; 003 004import java.awt.event.ActionEvent; 005 006import javax.swing.AbstractAction; 007import javax.swing.JOptionPane; 008 009import org.openstreetmap.josm.Main; 010import org.openstreetmap.josm.data.osm.AbstractPrimitive; 011import org.openstreetmap.josm.data.osm.Tag; 012import org.openstreetmap.josm.tools.I18n; 013import org.openstreetmap.josm.tools.ImageProvider; 014import org.openstreetmap.josm.tools.ImageProvider.ImageSizes; 015 016public class AddTagToPrimitiveAction extends AbstractAction { 017 018 private static final long serialVersionUID = -2134831346322019333L; 019 020 private Tag tag; 021 private AbstractPrimitive target; 022 023 public AddTagToPrimitiveAction(final String name) { 024 super(name, ImageProvider.get("dialogs/add", ImageSizes.SMALLICON)); 025 } 026 027 public void setTag(Tag tag) { 028 this.tag = tag; 029 updateEnabled(); 030 } 031 032 public void setTarget(AbstractPrimitive target) { 033 this.target = target; 034 updateEnabled(); 035 } 036 037 private void updateEnabled() { 038 setEnabled(tag != null && target != null); 039 } 040 041 @Override 042 public void actionPerformed(ActionEvent e) { 043 if (target != null && tag != null) { 044 int conflictResolution = JOptionPane.YES_OPTION; 045 if (target.hasKey(tag.getKey()) && !target.hasTag(tag.getKey(), tag.getValue())) { 046 conflictResolution = JOptionPane.showConfirmDialog( 047 Main.parent, 048 "<html>" + 049 // TODO: tr( RRH 050 I18n.tr("A tag with key <i>{0}</i> is already present on the selected OSM object.", tag.getKey()) + "<br>" + 051 I18n.tr( 052 "Do you really want to replace the current value <i>{0}</i> with the new value <i>{1}</i>?", 053 target.get(tag.getKey()), 054 tag.getValue() 055 ) + "</html>", 056 I18n.tr("Tag conflict"), 057 JOptionPane.YES_NO_OPTION, 058 JOptionPane.WARNING_MESSAGE 059 ); 060 } 061 if (JOptionPane.YES_OPTION == conflictResolution) { 062 target.put(tag); 063 target.setModified(true); 064 } 065 } 066 } 067}