Ignore:
Timestamp:
2015-10-12T22:58:25+02:00 (9 years ago)
Author:
Don-vip
Message:

major code cleanup/refactoring of tagging presets: slay the monster TaggingPresetItems (60 Kb, 1600 lines) and extract all its internal classes to a new package gui.tagging.presets.items

Location:
trunk/src/org/openstreetmap/josm/gui
Files:
20 added
1 deleted
12 edited
15 moved

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/DefaultNameFormatter.java

    r8846 r8863  
    3737import org.openstreetmap.josm.data.osm.history.HistoryRelation;
    3838import org.openstreetmap.josm.data.osm.history.HistoryWay;
    39 import org.openstreetmap.josm.gui.tagging.TaggingPreset;
    40 import org.openstreetmap.josm.gui.tagging.TaggingPresetNameTemplateList;
     39import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
     40import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetNameTemplateList;
    4141import org.openstreetmap.josm.tools.AlphanumComparator;
    4242import org.openstreetmap.josm.tools.I18n;
  • trunk/src/org/openstreetmap/josm/gui/MainMenu.java

    r8840 r8863  
    130130import org.openstreetmap.josm.gui.preferences.imagery.ImageryPreference;
    131131import org.openstreetmap.josm.gui.preferences.map.TaggingPresetPreference;
    132 import org.openstreetmap.josm.gui.tagging.TaggingPresetSearchAction;
    133 import org.openstreetmap.josm.gui.tagging.TaggingPresetSearchPrimitiveDialog;
     132import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetSearchAction;
     133import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetSearchPrimitiveDialog;
    134134import org.openstreetmap.josm.gui.widgets.DisableShortcutsOnFocusGainedTextField;
    135135import org.openstreetmap.josm.tools.Shortcut;
  • trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PresetListPanel.java

    r7128 r8863  
    33
    44import org.openstreetmap.josm.data.osm.OsmPrimitive;
    5 import org.openstreetmap.josm.gui.tagging.PresetHandler;
    6 import org.openstreetmap.josm.gui.tagging.TaggingPreset;
    7 import org.openstreetmap.josm.gui.tagging.TaggingPresetType;
    8 import org.openstreetmap.josm.gui.tagging.PresetLabel;
     5import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetHandler;
     6import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetLabel;
     7import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
     8import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetType;
    99import org.openstreetmap.josm.tools.GBC;
    1010
     
    3434     * and associates an interaction with (matching) presets via {@code presetHandler}.
    3535     */
    36     public void updatePresets(final Collection<TaggingPresetType> types, final Map<String, String> tags, final PresetHandler presetHandler) {
     36    public void updatePresets(final Collection<TaggingPresetType> types, final Map<String, String> tags, final TaggingPresetHandler presetHandler) {
    3737
    3838        removeAll();
     
    4343
    4444        for (final TaggingPreset t : TaggingPreset.getMatchingPresets(types, tags, true)) {
    45             final JLabel lbl = new PresetLabel(t);
     45            final JLabel lbl = new TaggingPresetLabel(t);
    4646            lbl.addMouseListener(new MouseAdapter() {
    4747                @Override
  • trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java

    r8846 r8863  
    8585import org.openstreetmap.josm.gui.help.HelpUtil;
    8686import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    87 import org.openstreetmap.josm.gui.tagging.PresetHandler;
    88 import org.openstreetmap.josm.gui.tagging.TaggingPreset;
    89 import org.openstreetmap.josm.gui.tagging.TaggingPresetType;
     87import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetHandler;
     88import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
     89import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetType;
    9090import org.openstreetmap.josm.gui.util.GuiHelper;
    9191import org.openstreetmap.josm.gui.util.HighlightHelper;
     
    215215            + tr("Select objects for which to change tags.") + "</p></html>");
    216216
    217     private final transient PresetHandler presetHandler = new PresetHandler() {
     217    private final transient TaggingPresetHandler presetHandler = new TaggingPresetHandler() {
    218218        @Override public void updateTags(List<Tag> tags) {
    219219            Command command = TaggingPreset.createCommand(getSelection(), tags);
  • trunk/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java

    r8846 r8863  
    6969import org.openstreetmap.josm.gui.ExtendedDialog;
    7070import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
    71 import org.openstreetmap.josm.gui.tagging.TaggingPreset;
    7271import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingComboBox;
    7372import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionListItem;
    7473import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager;
     74import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
    7575import org.openstreetmap.josm.gui.util.GuiHelper;
    7676import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java

    r8855 r8863  
    7979import org.openstreetmap.josm.gui.help.HelpUtil;
    8080import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    81 import org.openstreetmap.josm.gui.tagging.PresetHandler;
    8281import org.openstreetmap.josm.gui.tagging.TagEditorModel;
    8382import org.openstreetmap.josm.gui.tagging.TagEditorPanel;
    84 import org.openstreetmap.josm.gui.tagging.TaggingPreset;
    85 import org.openstreetmap.josm.gui.tagging.TaggingPresetType;
    8683import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingTextField;
    8784import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionList;
     85import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetHandler;
     86import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
     87import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetType;
    8888import org.openstreetmap.josm.io.OnlineResource;
    8989import org.openstreetmap.josm.tools.CheckParameterUtil;
     
    137137                WindowGeometry.centerInWindow(Main.parent, new Dimension(700, 650)));
    138138
    139         final PresetHandler presetHandler = new PresetHandler() {
     139        final TaggingPresetHandler presetHandler = new TaggingPresetHandler() {
    140140
    141141            @Override
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java

    r8855 r8863  
    3939import org.openstreetmap.josm.gui.dialogs.relation.sort.WayConnectionTypeCalculator;
    4040import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    41 import org.openstreetmap.josm.gui.tagging.PresetHandler;
    42 import org.openstreetmap.josm.gui.tagging.TaggingPreset;
    43 import org.openstreetmap.josm.gui.tagging.TaggingPresetType;
     41import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetHandler;
     42import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
     43import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetType;
    4444import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTableModel;
    4545
     
    5656    private final CopyOnWriteArrayList<IMemberModelListener> listeners;
    5757    private final transient OsmDataLayer layer;
    58     private final transient PresetHandler presetHandler;
     58    private final transient TaggingPresetHandler presetHandler;
    5959
    6060    private final transient WayConnectionTypeCalculator wayConnectionTypeCalculator = new WayConnectionTypeCalculator();
     
    6464     * constructor
    6565     */
    66     public MemberTableModel(OsmDataLayer layer, PresetHandler presetHandler) {
     66    public MemberTableModel(OsmDataLayer layer, TaggingPresetHandler presetHandler) {
    6767        members = new ArrayList<>();
    6868        listeners = new CopyOnWriteArrayList<>();
  • trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java

    r8840 r8863  
    6969import org.openstreetmap.josm.actions.ParameterizedAction;
    7070import org.openstreetmap.josm.actions.ParameterizedActionDecorator;
    71 import org.openstreetmap.josm.gui.tagging.TaggingPreset;
     71import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
    7272import org.openstreetmap.josm.tools.GBC;
    7373import org.openstreetmap.josm.tools.ImageProvider;
  • trunk/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java

    r8836 r8863  
    2828import org.openstreetmap.josm.gui.preferences.SourceEditor;
    2929import org.openstreetmap.josm.gui.preferences.SourceEditor.ExtendedSourceEntry;
     30import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetReader;
    3031import org.openstreetmap.josm.gui.preferences.SourceEntry;
    3132import org.openstreetmap.josm.gui.preferences.SourceProvider;
     
    3334import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
    3435import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
    35 import org.openstreetmap.josm.gui.tagging.TaggingPresetReader;
    3636import org.openstreetmap.josm.tools.GBC;
    3737import org.xml.sax.SAXException;
  • trunk/src/org/openstreetmap/josm/gui/tagging/TagEditorPanel.java

    r8760 r8863  
    2323import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionList;
    2424import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager;
     25import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetHandler;
     26import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetType;
    2527import org.openstreetmap.josm.tools.CheckParameterUtil;
    2628
     
    3941
    4042    private PresetListPanel presetListPanel;
    41     private final transient PresetHandler presetHandler;
     43    private final transient TaggingPresetHandler presetHandler;
    4244
    4345    /**
     
    140142     * internally and can be retrieved with {@link #getModel()}.
    141143     */
    142     public TagEditorPanel(PresetHandler presetHandler) {
     144    public TagEditorPanel(TaggingPresetHandler presetHandler) {
    143145        this(null, presetHandler, 0);
    144146    }
     
    151153     * @param maxCharacters maximum number of characters allowed, 0 for unlimited
    152154     */
    153     public TagEditorPanel(TagEditorModel model, PresetHandler presetHandler, final int maxCharacters) {
     155    public TagEditorPanel(TagEditorModel model, TaggingPresetHandler presetHandler, final int maxCharacters) {
    154156        this.model = model;
    155157        this.presetHandler = presetHandler;
  • trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java

    r8786 r8863  
    2828import org.openstreetmap.josm.data.osm.event.TagsChangedEvent;
    2929import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
    30 import org.openstreetmap.josm.gui.tagging.TaggingPreset;
    31 import org.openstreetmap.josm.gui.tagging.TaggingPresetItem;
    32 import org.openstreetmap.josm.gui.tagging.TaggingPresetItems;
    33 import org.openstreetmap.josm.gui.tagging.TaggingPresetItems.Role;
     30import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
     31import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetItem;
     32import org.openstreetmap.josm.gui.tagging.presets.items.CheckGroup;
     33import org.openstreetmap.josm.gui.tagging.presets.items.KeyedItem;
     34import org.openstreetmap.josm.gui.tagging.presets.items.Roles;
     35import org.openstreetmap.josm.gui.tagging.presets.items.Roles.Role;
    3436import org.openstreetmap.josm.tools.CheckParameterUtil;
    3537import org.openstreetmap.josm.tools.MultiMap;
     
    216218
    217219    protected static void cachePresetItem(TaggingPreset p, TaggingPresetItem item) {
    218         if (item instanceof TaggingPresetItems.KeyedItem) {
    219             TaggingPresetItems.KeyedItem ki = (TaggingPresetItems.KeyedItem) item;
     220        if (item instanceof KeyedItem) {
     221            KeyedItem ki = (KeyedItem) item;
    220222            if (ki.key != null && ki.getValues() != null) {
    221223                try {
     
    225227                }
    226228            }
    227         } else if (item instanceof TaggingPresetItems.Roles) {
    228             TaggingPresetItems.Roles r = (TaggingPresetItems.Roles) item;
    229             for (TaggingPresetItems.Role i : r.roles) {
     229        } else if (item instanceof Roles) {
     230            Roles r = (Roles) item;
     231            for (Role i : r.roles) {
    230232                if (i.key != null) {
    231233                    PRESET_ROLE_CACHE.add(i.key);
    232234                }
    233235            }
    234         } else if (item instanceof TaggingPresetItems.CheckGroup) {
    235             for (TaggingPresetItems.KeyedItem check : ((TaggingPresetItems.CheckGroup) item).checks) {
     236        } else if (item instanceof CheckGroup) {
     237            for (KeyedItem check : ((CheckGroup) item).checks) {
    236238                cachePresetItem(p, check);
    237239            }
  • trunk/src/org/openstreetmap/josm/gui/tagging/package-info.java

    r8624 r8863  
    22
    33/**
    4  * Provides classes for handling edition of OSM tags: tagging presets, tag tables, tag editors.
    5  * Autocompletion of tags is dealt with a subpackage.
     4 * Provides classes for handling edition of OSM tags: tag tables, tag editors.
     5 * Autocompletion of tags and tagging presets are dealt with a subpackage.
    66 */
    77package org.openstreetmap.josm.gui.tagging;
  • trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java

    r8862 r8863  
    11// License: GPL. For details, see LICENSE file.
    2 package org.openstreetmap.josm.gui.tagging;
     2package org.openstreetmap.josm.gui.tagging.presets;
    33
    44import static org.openstreetmap.josm.tools.I18n.tr;
     
    4848import org.openstreetmap.josm.gui.layer.Layer;
    4949import org.openstreetmap.josm.gui.preferences.ToolbarPreferences;
    50 import org.openstreetmap.josm.gui.tagging.TaggingPresetItems.Link;
    51 import org.openstreetmap.josm.gui.tagging.TaggingPresetItems.PresetLink;
    52 import org.openstreetmap.josm.gui.tagging.TaggingPresetItems.Role;
    53 import org.openstreetmap.josm.gui.tagging.TaggingPresetItems.Roles;
     50import org.openstreetmap.josm.gui.tagging.presets.items.Key;
     51import org.openstreetmap.josm.gui.tagging.presets.items.Label;
     52import org.openstreetmap.josm.gui.tagging.presets.items.Link;
     53import org.openstreetmap.josm.gui.tagging.presets.items.Optional;
     54import org.openstreetmap.josm.gui.tagging.presets.items.PresetLink;
     55import org.openstreetmap.josm.gui.tagging.presets.items.Roles;
     56import org.openstreetmap.josm.gui.tagging.presets.items.Roles.Role;
     57import org.openstreetmap.josm.gui.tagging.presets.items.Space;
    5458import org.openstreetmap.josm.gui.util.GuiHelper;
    5559import org.openstreetmap.josm.tools.GBC;
     
    7781    public static final int DIALOG_ANSWER_CANCEL = 3;
    7882
     83    public static final String OPTIONAL_TOOLTIP_TEXT = "Optional tooltip text";
     84
    7985    public TaggingPresetMenu group;
    8086    public String name;
     
    8389    public String locale_name;
    8490    public boolean preset_name_label;
    85     public static final String OPTIONAL_TOOLTIP_TEXT = "Optional tooltip text";
    8691
    8792    /**
     
    9398    public transient TemplateEntry nameTemplate;
    9499    public transient Match nameTemplateFilter;
     100
     101    /**
     102     * True whenever the original selection given into createSelection was empty
     103     */
     104    private boolean originalSelectionEmpty;
    95105
    96106    /**
     
    118128        if (locale_name == null) {
    119129            if (name_context != null) {
    120                 locale_name = trc(name_context, TaggingPresetItems.fixPresetString(name));
     130                locale_name = trc(name_context, TaggingPresetItem.fixPresetString(name));
    121131            } else {
    122                 locale_name = tr(TaggingPresetItems.fixPresetString(name));
     132                locale_name = tr(TaggingPresetItem.fixPresetString(name));
    123133            }
    124134        }
     
    190200     */
    191201    public void setType(String types) throws SAXException {
    192         this.types = TaggingPresetItems.getType(types);
     202        this.types = TaggingPresetItem.getType(types);
    193203    }
    194204
     
    235245        }
    236246        if (preset_name_label) {
    237             TaggingPresetItems.Label.addLabel(p, getIcon(), getName());
     247            Label.addLabel(p, getIcon(), getName());
    238248        }
    239249
     
    279289    public boolean isShowable() {
    280290        for (TaggingPresetItem i : data) {
    281             if (!(i instanceof TaggingPresetItems.Optional || i instanceof TaggingPresetItems.Space || i instanceof TaggingPresetItems.Key))
     291            if (!(i instanceof Optional || i instanceof Space || i instanceof Key))
    282292                return true;
    283293        }
     
    412422
    413423    /**
    414      * True whenever the original selection given into createSelection was empty
    415      */
    416     private boolean originalSelectionEmpty;
    417 
    418     /**
    419424     * Removes all unsuitable OsmPrimitives from the given list
    420425     * @param participants List of possible OsmPrimitives to tag
  • trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetHandler.java

    r8862 r8863  
    11// License: GPL. For details, see LICENSE file.
    2 package org.openstreetmap.josm.gui.tagging;
     2package org.openstreetmap.josm.gui.tagging.presets;
    33
    44import java.util.Collection;
     
    88import org.openstreetmap.josm.data.osm.Tag;
    99
    10 public interface PresetHandler {
     10public interface TaggingPresetHandler {
    1111    Collection<OsmPrimitive> getSelection();
    1212
  • trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetItem.java

    r8862 r8863  
    11// License: GPL. For details, see LICENSE file.
    2 package org.openstreetmap.josm.gui.tagging;
     2package org.openstreetmap.josm.gui.tagging.presets;
    33
     4import static org.openstreetmap.josm.tools.I18n.tr;
     5import static org.openstreetmap.josm.tools.I18n.trc;
     6
     7import java.io.File;
    48import java.util.Arrays;
    59import java.util.Collection;
     10import java.util.EnumSet;
     11import java.util.LinkedHashMap;
    612import java.util.List;
    713import java.util.Map;
     14import java.util.Set;
    815
     16import javax.swing.ImageIcon;
    917import javax.swing.JPanel;
    1018
     
    1523import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingTextField;
    1624import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionList;
     25import org.openstreetmap.josm.tools.ImageProvider;
     26import org.xml.sax.SAXException;
    1727
    1828/**
     
    2131 */
    2232public abstract class TaggingPresetItem {
     33
     34    // cache the parsing of types using a LRU cache (http://java-planet.blogspot.com/2005/08/how-to-set-up-simple-lru-cache-using.html)
     35    private static final Map<String, Set<TaggingPresetType>> TYPE_CACHE = new LinkedHashMap<>(16, 1.1f, true);
    2336
    2437    protected void initAutoCompletionField(AutoCompletingTextField field, String... key) {
     
    4760     * @return {@code true} if this item adds semantic tagging elements, {@code false} otherwise.
    4861     */
    49     abstract boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel, boolean presetInitiallyMatches);
     62    protected abstract boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel, boolean presetInitiallyMatches);
    5063
    5164    /**
     
    5366     * @param changedTags The list of changed tags to modify if needed
    5467     */
    55     abstract void addCommands(List<Tag> changedTags);
    56 
    57     boolean requestFocusInWindow() {
    58         return false;
    59     }
     68    protected abstract void addCommands(List<Tag> changedTags);
    6069
    6170    /**
     
    6574     * @return {@code true} if matches (positive), {@code null} if neutral, {@code false} if mismatches (negative).
    6675     */
    67     Boolean matches(Map<String, String> tags) {
     76    protected Boolean matches(Map<String, String> tags) {
    6877        return null;
    6978    }
     79
     80    protected static Set<TaggingPresetType> getType(String types) throws SAXException {
     81        if (types == null || types.isEmpty()) {
     82            throw new SAXException(tr("Unknown type: {0}", types));
     83        }
     84        if (TYPE_CACHE.containsKey(types))
     85            return TYPE_CACHE.get(types);
     86        Set<TaggingPresetType> result = EnumSet.noneOf(TaggingPresetType.class);
     87        for (String type : Arrays.asList(types.split(","))) {
     88            try {
     89                TaggingPresetType presetType = TaggingPresetType.fromString(type);
     90                result.add(presetType);
     91            } catch (IllegalArgumentException e) {
     92                throw new SAXException(tr("Unknown type: {0}", type), e);
     93            }
     94        }
     95        TYPE_CACHE.put(types, result);
     96        return result;
     97    }
     98
     99    protected static String fixPresetString(String s) {
     100        return s == null ? s : s.replaceAll("'", "''");
     101    }
     102
     103    protected static String getLocaleText(String text, String text_context, String defaultText) {
     104        if (text == null) {
     105            return defaultText;
     106        } else if (text_context != null) {
     107            return trc(text_context, fixPresetString(text));
     108        } else {
     109            return tr(fixPresetString(text));
     110        }
     111    }
     112
     113    protected static Integer parseInteger(String str) {
     114        if (str == null || str.isEmpty())
     115            return null;
     116        try {
     117            return Integer.valueOf(str);
     118        } catch (Exception e) {
     119            if (Main.isTraceEnabled()) {
     120                Main.trace(e.getMessage());
     121            }
     122        }
     123        return null;
     124    }
     125
     126    protected static ImageIcon loadImageIcon(String iconName, File zipIcons, Integer maxSize) {
     127        final Collection<String> s = Main.pref.getCollection("taggingpreset.icon.sources", null);
     128        ImageProvider imgProv = new ImageProvider(iconName).setDirs(s).setId("presets").setArchive(zipIcons).setOptional(true);
     129        if (maxSize != null) {
     130            imgProv.setMaxSize(maxSize);
     131        }
     132        return imgProv.get();
     133    }
    70134}
  • trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetLabel.java

    r8862 r8863  
    11// License: GPL. For details, see LICENSE file.
    2 package org.openstreetmap.josm.gui.tagging;
     2package org.openstreetmap.josm.gui.tagging.presets;
    33
    44import java.awt.Cursor;
     
    1111import javax.swing.JLabel;
    1212
    13 public class PresetLabel extends JLabel {
     13public class TaggingPresetLabel extends JLabel {
    1414
    1515    protected final TaggingPreset t;
     
    1919     * @param t the tagging preset
    2020     */
    21     public PresetLabel(TaggingPreset t) {
     21    public TaggingPresetLabel(TaggingPreset t) {
    2222        super(t.getName() + " …");
    2323        setIcon(t.getIcon());
  • trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetListener.java

    r8862 r8863  
    11// License: GPL. For details, see LICENSE file.
    2 package org.openstreetmap.josm.gui.tagging;
     2package org.openstreetmap.josm.gui.tagging.presets;
    33
    44/**
  • trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetMenu.java

    r8862 r8863  
    11// License: GPL. For details, see LICENSE file.
    2 package org.openstreetmap.josm.gui.tagging;
     2package org.openstreetmap.josm.gui.tagging.presets;
    33
    44import static org.openstreetmap.josm.tools.I18n.tr;
  • trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetNameTemplateList.java

    r8862 r8863  
    11// License: GPL. For details, see LICENSE file.
    2 package org.openstreetmap.josm.gui.tagging;
     2package org.openstreetmap.josm.gui.tagging.presets;
    33
    44import java.util.Collection;
     
    1717    private static TaggingPresetNameTemplateList instance;
    1818
     19    private final List<TaggingPreset> presetsWithPattern = new LinkedList<>();
     20
    1921    /**
    2022     * Replies the unique instance.
     
    2830        return instance;
    2931    }
    30 
    31     private final List<TaggingPreset> presetsWithPattern = new LinkedList<>();
    3232
    3333    private TaggingPresetNameTemplateList() {
  • trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetReader.java

    r8862 r8863  
    11// License: GPL. For details, see LICENSE file.
    2 package org.openstreetmap.josm.gui.tagging;
     2package org.openstreetmap.josm.gui.tagging.presets;
    33
    44import static org.openstreetmap.josm.tools.I18n.tr;
     
    2626import org.openstreetmap.josm.Main;
    2727import org.openstreetmap.josm.gui.preferences.map.TaggingPresetPreference;
     28import org.openstreetmap.josm.gui.tagging.presets.items.Check;
     29import org.openstreetmap.josm.gui.tagging.presets.items.CheckGroup;
     30import org.openstreetmap.josm.gui.tagging.presets.items.Combo;
     31import org.openstreetmap.josm.gui.tagging.presets.items.ComboMultiSelect;
     32import org.openstreetmap.josm.gui.tagging.presets.items.ItemSeparator;
     33import org.openstreetmap.josm.gui.tagging.presets.items.Key;
     34import org.openstreetmap.josm.gui.tagging.presets.items.Label;
     35import org.openstreetmap.josm.gui.tagging.presets.items.Link;
     36import org.openstreetmap.josm.gui.tagging.presets.items.MultiSelect;
     37import org.openstreetmap.josm.gui.tagging.presets.items.Optional;
     38import org.openstreetmap.josm.gui.tagging.presets.items.PresetLink;
     39import org.openstreetmap.josm.gui.tagging.presets.items.Roles;
     40import org.openstreetmap.josm.gui.tagging.presets.items.Roles.Role;
     41import org.openstreetmap.josm.gui.tagging.presets.items.Space;
     42import org.openstreetmap.josm.gui.tagging.presets.items.Text;
    2843import org.openstreetmap.josm.io.CachedFile;
    2944import org.openstreetmap.josm.io.UTFInputStreamReader;
     
    4661            "application/xml, text/xml, text/plain; q=0.8, application/zip, application/octet-stream; q=0.5";
    4762
    48     private TaggingPresetReader() {
    49         // Hide default constructor for utils classes
    50     }
    51 
    5263    private static volatile File zipIcons;
    5364    private static volatile boolean loadIcons = true;
    54 
    55     /**
    56      * Returns the set of preset source URLs.
    57      * @return The set of preset source URLs.
    58      */
    59     public static Set<String> getPresetSources() {
    60         return new TaggingPresetPreference.PresetPrefHelper().getActiveUrls();
    61     }
    6265
    6366    /**
     
    7578        /** Reference matching a chunk id defined earlier **/
    7679        public String ref;
     80    }
     81
     82    static class HashSetWithLast<E> extends LinkedHashSet<E> {
     83        protected E last;
     84
     85        @Override
     86        public boolean add(E e) {
     87            last = e;
     88            return super.add(e);
     89        }
     90
     91        /**
     92         * Returns the last inserted element.
     93         */
     94        public E getLast() {
     95            return last;
     96        }
     97    }
     98
     99    /**
     100     * Returns the set of preset source URLs.
     101     * @return The set of preset source URLs.
     102     */
     103    public static Set<String> getPresetSources() {
     104        return new TaggingPresetPreference.PresetPrefHelper().getActiveUrls();
    77105    }
    78106
     
    82110        parser.mapOnStart("separator", TaggingPresetSeparator.class);
    83111        parser.mapBoth("group", TaggingPresetMenu.class);
    84         parser.map("text", TaggingPresetItems.Text.class);
    85         parser.map("link", TaggingPresetItems.Link.class);
    86         parser.map("preset_link", TaggingPresetItems.PresetLink.class);
    87         parser.mapOnStart("optional", TaggingPresetItems.Optional.class);
    88         parser.mapOnStart("roles", TaggingPresetItems.Roles.class);
    89         parser.map("role", TaggingPresetItems.Role.class);
    90         parser.map("checkgroup", TaggingPresetItems.CheckGroup.class);
    91         parser.map("check", TaggingPresetItems.Check.class);
    92         parser.map("combo", TaggingPresetItems.Combo.class);
    93         parser.map("multiselect", TaggingPresetItems.MultiSelect.class);
    94         parser.map("label", TaggingPresetItems.Label.class);
    95         parser.map("space", TaggingPresetItems.Space.class);
    96         parser.map("key", TaggingPresetItems.Key.class);
    97         parser.map("list_entry", TaggingPresetItems.PresetListEntry.class);
    98         parser.map("item_separator", TaggingPresetItems.ItemSeparator.class);
     112        parser.map("text", Text.class);
     113        parser.map("link", Link.class);
     114        parser.map("preset_link", PresetLink.class);
     115        parser.mapOnStart("optional", Optional.class);
     116        parser.mapOnStart("roles", Roles.class);
     117        parser.map("role", Role.class);
     118        parser.map("checkgroup", CheckGroup.class);
     119        parser.map("check", Check.class);
     120        parser.map("combo", Combo.class);
     121        parser.map("multiselect", MultiSelect.class);
     122        parser.map("label", Label.class);
     123        parser.map("space", Space.class);
     124        parser.map("key", Key.class);
     125        parser.map("list_entry", ComboMultiSelect.PresetListEntry.class);
     126        parser.map("item_separator", ItemSeparator.class);
    99127        parser.mapBoth("chunk", Chunk.class);
    100128        parser.map("reference", Reference.class);
    101129        return parser;
    102     }
    103 
    104     static class HashSetWithLast<E> extends LinkedHashSet<E> {
    105         protected E last;
    106 
    107         @Override
    108         public boolean add(E e) {
    109             last = e;
    110             return super.add(e);
    111         }
    112 
    113         /**
    114          * Returns the last inserted element.
    115          */
    116         public E getLast() {
    117             return last;
    118         }
    119130    }
    120131
     
    145156        /** to detect end of reused {@code <group>} */
    146157        TaggingPresetMenu lastmenuOriginal = null;
    147         TaggingPresetItems.Roles lastrole = null;
    148         final List<TaggingPresetItems.Check> checks = new LinkedList<>();
    149         List<TaggingPresetItems.PresetListEntry> listEntries = new LinkedList<>();
     158        Roles lastrole = null;
     159        final List<Check> checks = new LinkedList<>();
     160        List<ComboMultiSelect.PresetListEntry> listEntries = new LinkedList<>();
    150161        final Map<String, List<Object>> byId = new HashMap<>();
    151162        final Deque<String> lastIds = new ArrayDeque<>();
     
    238249            } else {
    239250                if (!all.isEmpty()) {
    240                     if (o instanceof TaggingPresetItems.Roles) {
     251                    if (o instanceof Roles) {
    241252                        all.getLast().data.add((TaggingPresetItem) o);
    242253                        if (all.getLast().roles != null) {
    243254                            throw new SAXException(tr("Roles cannot appear more than once"));
    244255                        }
    245                         all.getLast().roles = (TaggingPresetItems.Roles) o;
    246                         lastrole = (TaggingPresetItems.Roles) o;
    247                     } else if (o instanceof TaggingPresetItems.Role) {
     256                        all.getLast().roles = (Roles) o;
     257                        lastrole = (Roles) o;
     258                    } else if (o instanceof Role) {
    248259                        if (lastrole == null)
    249260                            throw new SAXException(tr("Preset role element without parent"));
    250                         lastrole.roles.add((TaggingPresetItems.Role) o);
    251                     } else if (o instanceof TaggingPresetItems.Check) {
    252                         checks.add((TaggingPresetItems.Check) o);
    253                     } else if (o instanceof TaggingPresetItems.PresetListEntry) {
    254                         listEntries.add((TaggingPresetItems.PresetListEntry) o);
    255                     } else if (o instanceof TaggingPresetItems.CheckGroup) {
     261                        lastrole.roles.add((Role) o);
     262                    } else if (o instanceof Check) {
     263                        checks.add((Check) o);
     264                    } else if (o instanceof ComboMultiSelect.PresetListEntry) {
     265                        listEntries.add((ComboMultiSelect.PresetListEntry) o);
     266                    } else if (o instanceof CheckGroup) {
    256267                        all.getLast().data.add((TaggingPresetItem) o);
    257268                        // Make sure list of checks is empty to avoid adding checks several times
    258269                        // when used in chunks (fix #10801)
    259                         ((TaggingPresetItems.CheckGroup) o).checks.clear();
    260                         ((TaggingPresetItems.CheckGroup) o).checks.addAll(checks);
     270                        ((CheckGroup) o).checks.clear();
     271                        ((CheckGroup) o).checks.addAll(checks);
    261272                        checks.clear();
    262273                    } else {
     
    266277                        }
    267278                        all.getLast().data.add((TaggingPresetItem) o);
    268                         if (o instanceof TaggingPresetItems.ComboMultiSelect) {
    269                             ((TaggingPresetItems.ComboMultiSelect) o).addListEntries(listEntries);
    270                         } else if (o instanceof TaggingPresetItems.Key) {
    271                             if (((TaggingPresetItems.Key) o).value == null) {
    272                                 ((TaggingPresetItems.Key) o).value = ""; // Fix #8530
     279                        if (o instanceof ComboMultiSelect) {
     280                            ((ComboMultiSelect) o).addListEntries(listEntries);
     281                        } else if (o instanceof Key) {
     282                            if (((Key) o).value == null) {
     283                                ((Key) o).value = ""; // Fix #8530
    273284                            }
    274285                        }
     
    403414        TaggingPresetReader.loadIcons = loadIcons;
    404415    }
     416
     417    private TaggingPresetReader() {
     418        // Hide default constructor for utils classes
     419    }
    405420}
  • trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchAction.java

    r8862 r8863  
    11// License: GPL. For details, see LICENSE file.
    2 package org.openstreetmap.josm.gui.tagging;
     2package org.openstreetmap.josm.gui.tagging.presets;
    33
    44import static org.openstreetmap.josm.tools.I18n.tr;
  • trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchDialog.java

    r8862 r8863  
    11// License: GPL. For details, see LICENSE file.
    2 package org.openstreetmap.josm.gui.tagging;
     2package org.openstreetmap.josm.gui.tagging.presets;
    33
    44import static org.openstreetmap.josm.tools.I18n.tr;
     
    1717public final class TaggingPresetSearchDialog extends ExtendedDialog {
    1818
     19    private static TaggingPresetSearchDialog instance;
     20
    1921    private TaggingPresetSelector selector;
    20 
    21     private static TaggingPresetSearchDialog instance;
    2222
    2323    /**
  • trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchPrimitiveDialog.java

    r8862 r8863  
    11// License: GPL. For details, see LICENSE file.
    2 package org.openstreetmap.josm.gui.tagging;
     2package org.openstreetmap.josm.gui.tagging.presets;
    33
    44import static org.openstreetmap.josm.tools.I18n.tr;
     
    1919/**
    2020 * A dialog that allows to select a preset and then selects all matching OSM objects.
    21  * @see org.openstreetmap.josm.gui.tagging.TaggingPresetSearchDialog
     21 * @see org.openstreetmap.josm.gui.tagging.presets.TaggingPresetSearchDialog
    2222 */
    2323public final class TaggingPresetSearchPrimitiveDialog extends ExtendedDialog {
    2424
     25    private static TaggingPresetSearchPrimitiveDialog instance;
     26
    2527    private TaggingPresetSelector selector;
    2628
    27     private static TaggingPresetSearchPrimitiveDialog instance;
     29    /**
     30     * An action executing {@link TaggingPresetSearchPrimitiveDialog}.
     31     */
     32    public static class Action extends JosmAction {
     33
     34        /**
     35         * Constructs a new {@link TaggingPresetSearchPrimitiveDialog.Action}.
     36         */
     37        public Action() {
     38            super(tr("Search for objects by preset"), "dialogs/search", tr("Show preset search dialog"),
     39                    Shortcut.registerShortcut("preset:search-objects", tr("Search for objects by preset"), KeyEvent.VK_F3, Shortcut.SHIFT),
     40                    false);
     41            putValue("toolbar", "presets/search-objects");
     42            Main.toolbar.register(this);
     43        }
     44
     45        @Override
     46        public void actionPerformed(ActionEvent e) {
     47            if (Main.main.hasEditLayer()) {
     48                TaggingPresetSearchPrimitiveDialog.getInstance().showDialog();
     49            }
     50        }
     51    }
    2852
    2953    /**
     
    6993        }
    7094    }
    71 
    72     /**
    73      * An action executing {@link TaggingPresetSearchPrimitiveDialog}.
    74      */
    75     public static class Action extends JosmAction {
    76 
    77         /**
    78          * Constructs a new {@link TaggingPresetSearchPrimitiveDialog.Action}.
    79          */
    80         public Action() {
    81             super(tr("Search for objects by preset"), "dialogs/search", tr("Show preset search dialog"),
    82                     Shortcut.registerShortcut("preset:search-objects", tr("Search for objects by preset"), KeyEvent.VK_F3, Shortcut.SHIFT),
    83                     false);
    84             putValue("toolbar", "presets/search-objects");
    85             Main.toolbar.register(this);
    86         }
    87 
    88         @Override
    89         public void actionPerformed(ActionEvent e) {
    90             if (Main.main.hasEditLayer()) {
    91                 TaggingPresetSearchPrimitiveDialog.getInstance().showDialog();
    92             }
    93         }
    94     }
    95 
    9695}
  • trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSelector.java

    r8862 r8863  
    11// License: GPL. For details, see LICENSE file.
    2 package org.openstreetmap.josm.gui.tagging;
     2package org.openstreetmap.josm.gui.tagging.presets;
    33
    44import static org.openstreetmap.josm.tools.I18n.tr;
     
    4949import org.openstreetmap.josm.data.osm.OsmPrimitive;
    5050import org.openstreetmap.josm.data.preferences.BooleanProperty;
    51 import org.openstreetmap.josm.gui.tagging.TaggingPresetItems.Key;
    52 import org.openstreetmap.josm.gui.tagging.TaggingPresetItems.KeyedItem;
    53 import org.openstreetmap.josm.gui.tagging.TaggingPresetItems.Role;
    54 import org.openstreetmap.josm.gui.tagging.TaggingPresetItems.Roles;
     51import org.openstreetmap.josm.gui.tagging.presets.items.ComboMultiSelect;
     52import org.openstreetmap.josm.gui.tagging.presets.items.Key;
     53import org.openstreetmap.josm.gui.tagging.presets.items.KeyedItem;
     54import org.openstreetmap.josm.gui.tagging.presets.items.Roles;
     55import org.openstreetmap.josm.gui.tagging.presets.items.Roles.Role;
    5556import org.openstreetmap.josm.gui.widgets.JosmTextField;
    5657import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
     
    125126     * Computes the match ration of a {@link TaggingPreset} wrt. a searchString.
    126127     */
    127     static class PresetClassification implements Comparable<PresetClassification> {
     128    public static class PresetClassification implements Comparable<PresetClassification> {
    128129        public final TaggingPreset preset;
    129130        public int classification;
     
    144145                if (item instanceof KeyedItem) {
    145146                    tags.add(((KeyedItem) item).key);
    146                     if (item instanceof TaggingPresetItems.ComboMultiSelect) {
    147                         final TaggingPresetItems.ComboMultiSelect cms = (TaggingPresetItems.ComboMultiSelect) item;
     147                    if (item instanceof ComboMultiSelect) {
     148                        final ComboMultiSelect cms = (ComboMultiSelect) item;
    148149                        if (Boolean.parseBoolean(cms.values_searchable)) {
    149150                            tags.addAll(cms.getDisplayValues());
     
    366367     * A collection of {@link PresetClassification}s with the functionality of filtering wrt. searchString.
    367368     */
    368     static class PresetClassifications implements Iterable<PresetClassification> {
     369    public static class PresetClassifications implements Iterable<PresetClassification> {
    369370
    370371        private final List<PresetClassification> classifications = new ArrayList<>();
  • trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSeparator.java

    r8862 r8863  
    11// License: GPL. For details, see LICENSE file.
    2 package org.openstreetmap.josm.gui.tagging;
     2package org.openstreetmap.josm.gui.tagging.presets;
    33
    44/**
  • trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetType.java

    r8862 r8863  
    11// License: GPL. For details, see LICENSE file.
    2 package org.openstreetmap.josm.gui.tagging;
     2package org.openstreetmap.josm.gui.tagging.presets;
    33
    44import org.openstreetmap.josm.data.osm.OsmPrimitive;
  • trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java

    r8862 r8863  
    11// License: GPL. For details, see LICENSE file.
    2 package org.openstreetmap.josm.gui.tagging;
     2package org.openstreetmap.josm.gui.tagging.presets;
    33
    44import java.util.ArrayList;
Note: See TracChangeset for help on using the changeset viewer.