001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.tagging.presets.items;
003
004import java.awt.event.MouseAdapter;
005import java.awt.event.MouseEvent;
006import java.util.Collection;
007import java.util.List;
008
009import javax.swing.JLabel;
010import javax.swing.JPanel;
011
012import org.openstreetmap.josm.data.osm.OsmPrimitive;
013import org.openstreetmap.josm.data.osm.Tag;
014import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
015import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetItem;
016import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetLabel;
017import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
018import org.openstreetmap.josm.tools.GBC;
019import org.openstreetmap.josm.tools.Predicate;
020import org.openstreetmap.josm.tools.Utils;
021
022/**
023 * Adds a link to an other preset.
024 * @since 8863
025 */
026public class PresetLink extends TaggingPresetItem {
027
028    /** The exact name of the preset to link to. Required. */
029    public String preset_name = ""; // NOSONAR
030
031    @Override
032    public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel, boolean presetInitiallyMatches) {
033        final String presetName = preset_name;
034        final TaggingPreset t = Utils.filter(TaggingPresets.getTaggingPresets(), new Predicate<TaggingPreset>() {
035            @Override
036            public boolean evaluate(TaggingPreset object) {
037                return presetName.equals(object.name);
038            }
039        }).iterator().next();
040        if (t == null)
041            return false;
042        JLabel lbl = new TaggingPresetLabel(t);
043        lbl.addMouseListener(new MouseAdapter() {
044            @Override
045            public void mouseClicked(MouseEvent arg0) {
046                t.actionPerformed(null);
047            }
048        });
049        p.add(lbl, GBC.eol().fill(GBC.HORIZONTAL));
050        return false;
051    }
052
053    @Override
054    public void addCommands(List<Tag> changedTags) {
055        // Do nothing
056    }
057}