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 TaggingPreset t = found.get(); 049 JLabel lbl = new TaggingPresetLabel(t); 050 lbl.addMouseListener(new TaggingPresetMouseAdapter(t)); 051 p.add(lbl, GBC.eol().fill(GBC.HORIZONTAL)); 052 } 053 return false; 054 } 055 056 @Override 057 public void addCommands(List<Tag> changedTags) { 058 // Do nothing 059 } 060 061 @Override 062 public String toString() { 063 return "PresetLink [preset_name=" + preset_name + ']'; 064 } 065}