Changeset 7725 in josm for trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java
- Timestamp:
- 2014-11-15T21:45:22+01:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java
r7556 r7725 7 7 import java.util.Collections; 8 8 import java.util.HashSet; 9 import java.util.LinkedHashSet; 9 10 import java.util.List; 10 11 import java.util.Map; 11 12 import java.util.Map.Entry; 13 import java.util.Objects; 12 14 import java.util.Set; 13 15 … … 54 56 public class AutoCompletionManager implements DataSetListener { 55 57 58 /** 59 * Data class to remember tags that the user has entered. 60 */ 61 public static class UserInputTag { 62 public String key; 63 public String value; 64 public boolean defaultKey; 65 66 /** 67 * Constructor. 68 * 69 * @param key the tag key 70 * @param value the tag value 71 * @param defaultKey true, if the key was not really entered by the 72 * user, e.g. for preset text fields. 73 * In this case, the key will not get any higher priority, just the value. 74 */ 75 public UserInputTag(String key, String value, boolean defaultKey) { 76 this.key = key; 77 this.value = value; 78 this.defaultKey = defaultKey; 79 } 80 81 @Override 82 public int hashCode() { 83 int hash = 7; 84 hash = 59 * hash + Objects.hashCode(this.key); 85 hash = 59 * hash + Objects.hashCode(this.value); 86 hash = 59 * hash + (this.defaultKey ? 1 : 0); 87 return hash; 88 } 89 90 @Override 91 public boolean equals(Object obj) { 92 if (obj == null) { 93 return false; 94 } 95 if (getClass() != obj.getClass()) { 96 return false; 97 } 98 final UserInputTag other = (UserInputTag) obj; 99 if (!Objects.equals(this.key, other.key)) { 100 return false; 101 } 102 if (!Objects.equals(this.value, other.value)) { 103 return false; 104 } 105 if (this.defaultKey != other.defaultKey) { 106 return false; 107 } 108 return true; 109 } 110 } 111 56 112 /** If the dirty flag is set true, a rebuild is necessary. */ 57 113 protected boolean dirty; … … 70 126 */ 71 127 protected static final MultiMap<String, String> presetTagCache = new MultiMap<>(); 128 /** 129 * Cache for tags that have been entered by the user. 130 */ 131 protected static final Set<UserInputTag> userInputTagCache = new LinkedHashSet<>(); 132 72 133 /** 73 134 * the cached list of member roles … … 174 235 } 175 236 } 237 238 239 public static void rememberUserInput(String key, String value, boolean defaultKey) { 240 UserInputTag tag = new UserInputTag(key, value, defaultKey); 241 userInputTagCache.remove(tag); // re-add, so it gets to the last position of the LinkedHashSet 242 userInputTagCache.add(tag); 243 } 176 244 177 245 /** … … 187 255 return new ArrayList<>(presetTagCache.keySet()); 188 256 } 257 258 protected Collection<String> getUserInputKeys() { 259 List<String> keys = new ArrayList<>(); 260 for (UserInputTag tag : userInputTagCache) { 261 if (!tag.defaultKey) { 262 keys.add(tag.key); 263 } 264 } 265 Collections.reverse(keys); 266 return new LinkedHashSet<>(keys); 267 } 189 268 190 269 /** … … 201 280 protected static List<String> getPresetValues(String key) { 202 281 return new ArrayList<>(presetTagCache.getValues(key)); 282 } 283 284 protected static Collection<String> getUserInputValues(String key) { 285 ArrayList<String> values = new ArrayList<>(); 286 for (UserInputTag tag : userInputTagCache) { 287 if (key.equals(tag.key)) { 288 values.add(tag.value); 289 } 290 } 291 Collections.reverse(values); 292 return new LinkedHashSet<>(values); 203 293 } 204 294 … … 261 351 list.add(new AutoCompletionListItem("source", AutoCompletionItemPriority.IS_IN_STANDARD)); 262 352 list.add(getDataKeys(), AutoCompletionItemPriority.IS_IN_DATASET); 353 list.addUserInput(getUserInputKeys()); 263 354 } 264 355 … … 285 376 list.add(getPresetValues(key), AutoCompletionItemPriority.IS_IN_STANDARD); 286 377 list.add(getDataValues(key), AutoCompletionItemPriority.IS_IN_DATASET); 378 list.addUserInput(getUserInputValues(key)); 287 379 } 288 380 }
Note:
See TracChangeset
for help on using the changeset viewer.