Ignore:
Timestamp:
2014-05-11T01:01:33+02:00 (10 years ago)
Author:
Don-vip
Message:

refactor tagging presets to allow presets-dependent unit tests to update them correctly at runtime

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/tools/TaggingPresetNameTemplateList.java

    r7005 r7100  
    77import java.util.List;
    88
     9import org.openstreetmap.josm.Main;
    910import org.openstreetmap.josm.data.osm.OsmPrimitive;
    10 import org.openstreetmap.josm.gui.preferences.map.TaggingPresetPreference;
    1111import org.openstreetmap.josm.gui.tagging.TaggingPreset;
     12import org.openstreetmap.josm.gui.tagging.TaggingPresetListener;
    1213import org.openstreetmap.josm.gui.tagging.TaggingPresetType;
     14import org.openstreetmap.josm.gui.tagging.TaggingPresets;
    1315
    1416/**
    1517 * List of tagging presets with name templates, allows to find appropriate template based on existing primitive
    1618 */
    17 public final class TaggingPresetNameTemplateList {
     19public final class TaggingPresetNameTemplateList implements TaggingPresetListener {
    1820
    1921    private static TaggingPresetNameTemplateList instance;
    2022
     23    /**
     24     * Replies the unique instance.
     25     * @return the unique instance
     26     */
    2127    public static TaggingPresetNameTemplateList getInstance() {
    2228        if (instance == null) {
    2329            instance = new TaggingPresetNameTemplateList();
     30            TaggingPresets.addListener(instance);
    2431        }
    2532        return instance;
    2633    }
     34
    2735    private final List<TaggingPreset> presetsWithPattern = new LinkedList<>();
    2836
    2937    private TaggingPresetNameTemplateList() {
    30         if (TaggingPresetPreference.taggingPresets != null) {
    31             for (TaggingPreset tp : TaggingPresetPreference.taggingPresets) {
     38        buildPresetsWithPattern();
     39    }
     40
     41    private void buildPresetsWithPattern() {
     42        synchronized(this) {
     43            Main.debug("Building list of presets with name template");
     44            presetsWithPattern.clear();
     45            for (TaggingPreset tp : TaggingPresets.getTaggingPresets()) {
    3246                if (tp.nameTemplate != null) {
    3347                    presetsWithPattern.add(tp);
     
    3751    }
    3852
     53    /**
     54     * Finds and returns the first occurence of preset with template name matching the given primitive
     55     * @param primitive The primitive to match
     56     * @return the first occurence of preset with template name matching the primitive
     57     */
    3958    public TaggingPreset findPresetTemplate(OsmPrimitive primitive) {
    40 
    41         for (TaggingPreset t : presetsWithPattern) {
    42             Collection<TaggingPresetType> type = Collections.singleton(TaggingPresetType.forPrimitive(primitive));
    43             if (t.typeMatches(type)) {
    44                 if (t.nameTemplateFilter != null) {
    45                     if (t.nameTemplateFilter.match(primitive))
     59        synchronized(this) {
     60            for (TaggingPreset t : presetsWithPattern) {
     61                Collection<TaggingPresetType> type = Collections.singleton(TaggingPresetType.forPrimitive(primitive));
     62                if (t.typeMatches(type)) {
     63                    if (t.nameTemplateFilter != null) {
     64                        if (t.nameTemplateFilter.match(primitive))
     65                            return t;
     66                        else {
     67                            continue;
     68                        }
     69                    } else if (t.matches(type, primitive.getKeys(), false)) {
    4670                        return t;
    47                     else {
    48                         continue;
    4971                    }
    50                 } else if (t.matches(type, primitive.getKeys(), false)) {
    51                     return t;
    5272                }
    5373            }
     
    5575        return null;
    5676    }
     77
     78    @Override
     79    public void taggingPresetsModified() {
     80        buildPresetsWithPattern();
     81    }
    5782}
Note: See TracChangeset for help on using the changeset viewer.