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    static final class TaggingPresetMouseAdapter extends MouseAdapter {
028        private final TaggingPreset t;
029
030        TaggingPresetMouseAdapter(TaggingPreset t) {
031            this.t = t;
032        }
033
034        @Override
035        public void mouseClicked(MouseEvent e) {
036            t.actionPerformed(null);
037        }
038    }
039
040    /** The exact name of the preset to link to. Required. */
041    public String preset_name = ""; // NOSONAR
042
043    @Override
044    public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel, boolean presetInitiallyMatches) {
045        final String presetName = preset_name;
046        Optional<TaggingPreset> found = TaggingPresets.getTaggingPresets().stream().filter(preset -> presetName.equals(preset.name)).findFirst();
047        if (!found.isPresent())
048            return false;
049        TaggingPreset t = found.get();
050        JLabel lbl = new TaggingPresetLabel(t);
051        lbl.addMouseListener(new TaggingPresetMouseAdapter(t));
052        p.add(lbl, GBC.eol().fill(GBC.HORIZONTAL));
053        return false;
054    }
055
056    @Override
057    public void addCommands(List<Tag> changedTags) {
058        // Do nothing
059    }
060}