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;
008import java.util.Optional;
009
010import javax.swing.JLabel;
011import javax.swing.JPanel;
012
013import org.openstreetmap.josm.data.osm.OsmPrimitive;
014import org.openstreetmap.josm.data.osm.Tag;
015import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
016import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetItem;
017import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetLabel;
018import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
019import org.openstreetmap.josm.tools.GBC;
020
021/**
022 * Adds a link to an other preset.
023 * @since 8863
024 */
025public class PresetLink extends TaggingPresetItem {
026
027    /** The exact name of the preset to link to. Required. */
028    public String preset_name = ""; // NOSONAR
029
030    @Override
031    public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel, boolean presetInitiallyMatches) {
032        final String presetName = preset_name;
033        Optional<TaggingPreset> found = TaggingPresets.getTaggingPresets().stream().filter(preset -> presetName.equals(preset.name)).findFirst();
034        if (!found.isPresent())
035            return false;
036        TaggingPreset t = found.get();
037        JLabel lbl = new TaggingPresetLabel(t);
038        lbl.addMouseListener(new MouseAdapter() {
039            @Override
040            public void mouseClicked(MouseEvent arg0) {
041                t.actionPerformed(null);
042            }
043        });
044        p.add(lbl, GBC.eol().fill(GBC.HORIZONTAL));
045        return false;
046    }
047
048    @Override
049    public void addCommands(List<Tag> changedTags) {
050        // Do nothing
051    }
052}