Changeset 12042 in josm
- Timestamp:
- 2017-05-03T11:19:04+02:00 (8 years ago)
- Location:
- trunk/src/org/openstreetmap/josm
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java
r11942 r12042 69 69 /** Normalized keys: the key should be substituted by the value if the key was not found in presets */ 70 70 private static final Map<String, String> harmonizedKeys = new HashMap<>(); 71 /** The spell check preset values */72 private static volatile MultiMap<String, String> presetsValueData;71 /** The spell check preset values which are not stored in TaggingPresets */ 72 private static volatile MultiMap<String, String> additionalPresetsValueData; 73 73 /** The TagChecker data */ 74 74 private static final List<CheckerData> checkerData = new ArrayList<>(); … … 259 259 Collection<TaggingPreset> presets = TaggingPresets.getTaggingPresets(); 260 260 if (!presets.isEmpty()) { 261 presetsValueData = new MultiMap<>();261 additionalPresetsValueData = new MultiMap<>(); 262 262 for (String a : OsmPrimitive.getUninterestingKeys()) { 263 presetsValueData.putVoid(a);263 additionalPresetsValueData.putVoid(a); 264 264 } 265 265 // TODO directionKeys are no longer in OsmPrimitive (search pattern is used instead) 266 266 for (String a : Main.pref.getCollection(ValidatorPreference.PREFIX + ".knownkeys", 267 267 Arrays.asList(new String[]{"is_in", "int_ref", "fixme", "population"}))) { 268 presetsValueData.putVoid(a);268 additionalPresetsValueData.putVoid(a); 269 269 } 270 270 for (TaggingPreset p : presets) { … … 285 285 Collection<String> values = ky.getValues(); 286 286 if (ky.key != null && values != null) { 287 presetsValueData.putAll(ky.key, values);288 287 harmonizedKeys.put(harmonizeKey(ky.key), ky.key); 289 288 } … … 305 304 } 306 305 306 private static Set<String> getPresetValues(String key) { 307 Set<String> res = TaggingPresets.getPresetValues(key); 308 if (res != null) 309 return res; 310 return additionalPresetsValueData.get(key); 311 } 312 307 313 /** 308 314 * Determines if the given key is in internal presets. … … 312 318 */ 313 319 public static boolean isKeyInPresets(String key) { 314 return presetsValueData.get(key) != null;320 return getPresetValues(key) != null; 315 321 } 316 322 … … 323 329 */ 324 330 public static boolean isTagInPresets(String key, String value) { 325 final Set<String> values = presetsValueData.get(key);331 final Set<String> values = getPresetValues(key); 326 332 return values != null && (values.isEmpty() || values.contains(value)); 327 333 } … … 462 468 withErrors.put(p, "HTML"); 463 469 } 464 if (checkValues && key != null && value != null && !value.isEmpty() && presetsValueData != null && !isTagIgnored(key, value)) { 470 if (checkValues && key != null && value != null && !value.isEmpty() && additionalPresetsValueData != null 471 && !isTagIgnored(key, value)) { 465 472 if (!isKeyInPresets(key)) { 466 473 String prettifiedKey = harmonizeKey(key); … … 487 494 // try to fix common typos and check again if value is still unknown 488 495 String fixedValue = harmonizeValue(prop.getValue()); 489 Map<String, String> possibleValues = getPossibleValues( presetsValueData.get(key));496 Map<String, String> possibleValues = getPossibleValues(getPresetValues(key)); 490 497 if (possibleValues.containsKey(fixedValue)) { 491 498 final String newKey = possibleValues.get(fixedValue); -
trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java
r11746 r12042 29 29 import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent; 30 30 import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset; 31 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetItem;32 31 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets; 33 import org.openstreetmap.josm.gui.tagging.presets.items.CheckGroup;34 import org.openstreetmap.josm.gui.tagging.presets.items.KeyedItem;35 import org.openstreetmap.josm.gui.tagging.presets.items.Roles;36 32 import org.openstreetmap.josm.gui.tagging.presets.items.Roles.Role; 37 33 import org.openstreetmap.josm.tools.CheckParameterUtil; … … 203 199 204 200 /** 205 * Initialize the cache for presets. This is done only once.206 * @param presets Tagging presets to cache207 */208 public static void cachePresets(Collection<TaggingPreset> presets) {209 for (final TaggingPreset p : presets) {210 for (TaggingPresetItem item : p.data) {211 cachePresetItem(p, item);212 }213 }214 }215 216 protected static void cachePresetItem(TaggingPreset p, TaggingPresetItem item) {217 if (item instanceof KeyedItem) {218 KeyedItem ki = (KeyedItem) item;219 if (ki.key != null && ki.getValues() != null) {220 PRESET_TAG_CACHE.putAll(ki.key, ki.getValues());221 }222 } else if (item instanceof Roles) {223 Roles r = (Roles) item;224 for (Role i : r.roles) {225 if (i.key != null) {226 PRESET_ROLE_CACHE.add(i.key);227 }228 }229 } else if (item instanceof CheckGroup) {230 for (KeyedItem check : ((CheckGroup) item).checks) {231 cachePresetItem(p, check);232 }233 }234 }235 236 /**237 201 * Remembers user input for the given key/value. 238 202 * @param key Tag key … … 253 217 protected List<String> getDataKeys() { 254 218 return new ArrayList<>(getTagCache().keySet()); 255 }256 257 protected List<String> getPresetKeys() {258 return new ArrayList<>(PRESET_TAG_CACHE.keySet());259 219 } 260 220 … … 281 241 } 282 242 283 protected static List<String> getPresetValues(String key) {284 return new ArrayList<>(PRESET_TAG_CACHE.getValues(key));285 }286 287 243 protected static Collection<String> getUserInputValues(String key) { 288 244 List<String> values = new ArrayList<>(); … … 312 268 */ 313 269 public void populateWithMemberRoles(AutoCompletionList list) { 314 list.add( PRESET_ROLE_CACHE, AutoCompletionItemPriority.IS_IN_STANDARD);270 list.add(TaggingPresets.getPresetRoles(), AutoCompletionItemPriority.IS_IN_STANDARD); 315 271 list.add(getRoleCache(), AutoCompletionItemPriority.IS_IN_DATASET); 316 272 } … … 347 303 */ 348 304 public void populateWithKeys(AutoCompletionList list) { 349 list.add( getPresetKeys(), AutoCompletionItemPriority.IS_IN_STANDARD);305 list.add(TaggingPresets.getPresetKeys(), AutoCompletionItemPriority.IS_IN_STANDARD); 350 306 list.add(new AutoCompletionListItem("source", AutoCompletionItemPriority.IS_IN_STANDARD)); 351 307 list.add(getDataKeys(), AutoCompletionItemPriority.IS_IN_DATASET); … … 373 329 public void populateWithTagValues(AutoCompletionList list, List<String> keys) { 374 330 for (String key : keys) { 375 list.add( getPresetValues(key), AutoCompletionItemPriority.IS_IN_STANDARD);331 list.add(TaggingPresets.getPresetValues(key), AutoCompletionItemPriority.IS_IN_STANDARD); 376 332 list.add(getDataValues(key), AutoCompletionItemPriority.IS_IN_DATASET); 377 333 list.addUserInput(getUserInputValues(key)); -
trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java
r11386 r12042 4 4 import java.util.ArrayList; 5 5 import java.util.Collection; 6 import java.util.Collections; 6 7 import java.util.HashMap; 8 import java.util.HashSet; 7 9 import java.util.Map; 10 import java.util.Set; 8 11 9 12 import javax.swing.JMenu; … … 14 17 import org.openstreetmap.josm.data.osm.OsmPrimitive; 15 18 import org.openstreetmap.josm.gui.MenuScroller; 16 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager; 19 import org.openstreetmap.josm.gui.tagging.presets.items.CheckGroup; 20 import org.openstreetmap.josm.gui.tagging.presets.items.KeyedItem; 21 import org.openstreetmap.josm.gui.tagging.presets.items.Roles; 22 import org.openstreetmap.josm.gui.tagging.presets.items.Roles.Role; 23 import org.openstreetmap.josm.tools.MultiMap; 17 24 import org.openstreetmap.josm.tools.SubclassFilteredCollection; 18 25 … … 26 33 private static final Collection<TaggingPreset> taggingPresets = new ArrayList<>(); 27 34 35 /** cache for key/value pairs found in the preset */ 36 private static final MultiMap<String, String> PRESET_TAG_CACHE = new MultiMap<>(); 37 /** cache for roles found in the preset */ 38 private static final Set<String> PRESET_ROLE_CACHE = new HashSet<>(); 39 28 40 /** The collection of listeners */ 29 41 private static final Collection<TaggingPresetListener> listeners = new ArrayList<>(); … … 39 51 taggingPresets.clear(); 40 52 taggingPresets.addAll(TaggingPresetReader.readFromPreferences(false, false)); 53 cachePresets(taggingPresets); 41 54 } 42 55 … … 54 67 Main.main.menu.presetsMenu.setVisible(false); 55 68 } else { 56 AutoCompletionManager.cachePresets(taggingPresets);57 69 Map<TaggingPresetMenu, JMenu> submenus = new HashMap<>(); 58 70 for (final TaggingPreset p : taggingPresets) { … … 88 100 89 101 /** 102 * Initialize the cache for presets. This is done only once. 103 * @param presets Tagging presets to cache 104 */ 105 private static void cachePresets(Collection<TaggingPreset> presets) { 106 for (final TaggingPreset p : presets) { 107 for (TaggingPresetItem item : p.data) { 108 cachePresetItem(p, item); 109 } 110 } 111 } 112 113 private static void cachePresetItem(TaggingPreset p, TaggingPresetItem item) { 114 if (item instanceof KeyedItem) { 115 KeyedItem ki = (KeyedItem) item; 116 if (ki.key != null && ki.getValues() != null) { 117 try { 118 PRESET_TAG_CACHE.putAll(ki.key, ki.getValues()); 119 } catch (NullPointerException e) { 120 Main.error(e, p + ": Unable to cache " + ki); 121 } 122 } 123 } else if (item instanceof Roles) { 124 Roles r = (Roles) item; 125 for (Role i : r.roles) { 126 if (i.key != null) { 127 PRESET_ROLE_CACHE.add(i.key); 128 } 129 } 130 } else if (item instanceof CheckGroup) { 131 for (KeyedItem check : ((CheckGroup) item).checks) { 132 cachePresetItem(p, check); 133 } 134 } 135 } 136 137 /** 90 138 * Replies a new collection containing all tagging presets. 91 139 * @return a new collection containing all tagging presets. Empty if presets are not initialized (never null) 92 140 */ 93 141 public static Collection<TaggingPreset> getTaggingPresets() { 94 return new ArrayList<>(taggingPresets); 142 return Collections.unmodifiableCollection(taggingPresets); 143 } 144 145 /** 146 * Replies a set of all roles in the tagging presets. 147 * @return a set of all roles in the tagging presets. 148 */ 149 public static Set<String> getPresetRoles() { 150 return Collections.unmodifiableSet(PRESET_ROLE_CACHE); 151 } 152 153 /** 154 * Replies a set of all keys in the tagging presets. 155 * @return a set of all keys in the tagging presets. 156 */ 157 public static Set<String> getPresetKeys() { 158 return Collections.unmodifiableSet(PRESET_TAG_CACHE.keySet()); 159 } 160 161 /** 162 * Return set of values for a key in the tagging presets 163 * @param key the key 164 * @return set of values for a key in the tagging presets or null if none is found 165 */ 166 public static Set<String> getPresetValues(String key) { 167 Set<String> values = PRESET_TAG_CACHE.get(key); 168 if (values != null) 169 return Collections.unmodifiableSet(values); 170 return null; 95 171 } 96 172
Note:
See TracChangeset
for help on using the changeset viewer.