source: josm/trunk/src/org/openstreetmap/josm/tools/TaggingPresetNameTemplateList.java@ 7100

Last change on this file since 7100 was 7100, checked in by Don-vip, 10 years ago

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

File size: 2.8 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.tools;
3
4import java.util.Collection;
5import java.util.Collections;
6import java.util.LinkedList;
7import java.util.List;
8
9import org.openstreetmap.josm.Main;
10import org.openstreetmap.josm.data.osm.OsmPrimitive;
11import org.openstreetmap.josm.gui.tagging.TaggingPreset;
12import org.openstreetmap.josm.gui.tagging.TaggingPresetListener;
13import org.openstreetmap.josm.gui.tagging.TaggingPresetType;
14import org.openstreetmap.josm.gui.tagging.TaggingPresets;
15
16/**
17 * List of tagging presets with name templates, allows to find appropriate template based on existing primitive
18 */
19public final class TaggingPresetNameTemplateList implements TaggingPresetListener {
20
21 private static TaggingPresetNameTemplateList instance;
22
23 /**
24 * Replies the unique instance.
25 * @return the unique instance
26 */
27 public static TaggingPresetNameTemplateList getInstance() {
28 if (instance == null) {
29 instance = new TaggingPresetNameTemplateList();
30 TaggingPresets.addListener(instance);
31 }
32 return instance;
33 }
34
35 private final List<TaggingPreset> presetsWithPattern = new LinkedList<>();
36
37 private TaggingPresetNameTemplateList() {
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()) {
46 if (tp.nameTemplate != null) {
47 presetsWithPattern.add(tp);
48 }
49 }
50 }
51 }
52
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 */
58 public TaggingPreset findPresetTemplate(OsmPrimitive 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)) {
70 return t;
71 }
72 }
73 }
74 }
75 return null;
76 }
77
78 @Override
79 public void taggingPresetsModified() {
80 buildPresetsWithPattern();
81 }
82}
Note: See TracBrowser for help on using the repository browser.