Ticket #14923: preset-search-v2.patch
| File preset-search-v2.patch, 5.7 KB (added by , 9 years ago) |
|---|
-
src/org/openstreetmap/josm/actions/search/SearchAction.java
454 454 .addKeyword("type:node", "type:node ", tr("all nodes")) 455 455 .addKeyword("type:way", "type:way ", tr("all ways")) 456 456 .addKeyword("type:relation", "type:relation ", tr("all relations")) 457 .addKeyword("preset:water", "preset:water", tr("all objects that use the water preset")) 458 .addKeyword("preset:\"fast food\"", "preset:\"fast food\"", tr("all objects that use the fast food preset")) 457 459 .addKeyword("closed", "closed ", tr("all closed ways")) 458 460 .addKeyword("untagged", "untagged ", tr("object without useful tags")), 459 461 GBC.eol()); … … 888 890 public List<ActionParameter<?>> getActionParameters() { 889 891 return Collections.<ActionParameter<?>>singletonList(new SearchSettingsActionParameter(SEARCH_EXPRESSION)); 890 892 } 891 } 893 } 894 No newline at end of file -
src/org/openstreetmap/josm/actions/search/SearchCompiler.java
20 20 import java.util.regex.Matcher; 21 21 import java.util.regex.Pattern; 22 22 import java.util.regex.PatternSyntaxException; 23 import java.util.stream.Collectors; 24 import java.util.Objects; 23 25 24 26 import org.openstreetmap.josm.Main; 25 27 import org.openstreetmap.josm.actions.search.PushbackTokenizer.Range; … … 38 40 import org.openstreetmap.josm.gui.mappaint.mapcss.Selector; 39 41 import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.MapCSSParser; 40 42 import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.ParseException; 43 import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset; 44 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets; 41 45 import org.openstreetmap.josm.tools.AlphanumComparator; 42 46 import org.openstreetmap.josm.tools.Geometry; 43 47 import org.openstreetmap.josm.tools.UncheckedParseException; … … 115 119 private final Collection<String> keywords = Arrays.asList("id", "version", "type", "user", "role", 116 120 "changeset", "nodes", "ways", "tags", "areasize", "waylength", "modified", "deleted", "selected", 117 121 "incomplete", "untagged", "closed", "new", "indownloadedarea", 118 "allindownloadedarea", "inview", "allinview", "timestamp", "nth", "nth%", "hasRole" );122 "allindownloadedarea", "inview", "allinview", "timestamp", "nth", "nth%", "hasRole", "preset"); 119 123 120 124 @Override 121 125 public Match get(String keyword, PushbackTokenizer tokenizer) throws ParseError { … … 151 155 return new Version(tokenizer); 152 156 case "type": 153 157 return new ExactType(tokenizer.readTextOrNumber()); 158 case "preset": 159 return new Preset(tokenizer.readTextOrNumber()); 154 160 case "user": 155 161 return new UserMatch(tokenizer.readTextOrNumber()); 156 162 case "role": … … 1554 1560 } 1555 1561 } 1556 1562 1563 /** 1564 * Matches presets. 1565 */ 1566 private static class Preset extends Match { 1567 private List<TaggingPreset> presets; 1568 1569 Preset(String presetName) throws ParseError { 1570 1571 Objects.requireNonNull(presetName); 1572 1573 this.presets = TaggingPresets.getTaggingPresets() 1574 .stream() 1575 .filter(preset -> presetName.equalsIgnoreCase(preset.getSimpleName())) 1576 .collect(Collectors.toList()); 1577 1578 if (this.presets.isEmpty()) { 1579 throw new ParseError(tr("Unknown preset name: ") + presetName); 1580 } 1581 } 1582 1583 /** 1584 * Since presets can have common names, the primitive is considered to 1585 * belong to a certain preset if it matches at least one of them. 1586 */ 1587 @Override 1588 public boolean match(OsmPrimitive osm) { 1589 for (TaggingPreset p : this.presets) { 1590 if (p.test(osm)) { 1591 return true; 1592 } 1593 } 1594 1595 return false; 1596 } 1597 } 1598 1557 1599 public static class ParseError extends Exception { 1558 1600 public ParseError(String msg) { 1559 1601 super(msg); … … 1803 1845 return forKey + '"' + escapeStringForSearch(value) + '"'; 1804 1846 } 1805 1847 } 1806 } 1848 } 1849 No newline at end of file -
src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
173 173 } 174 174 175 175 /** 176 * Returns the non translated name without any prefixes. 177 * @return returns the non translated name without any prefixes. 178 */ 179 public String getSimpleName() { 180 return this.name; 181 } 182 183 /** 176 184 * Returns the preset icon (16px). 177 185 * @return The preset icon, or {@code null} if none defined 178 186 * @since 6403 … … 634 642 ToolbarPreferences.ActionParser actionParser = new ToolbarPreferences.ActionParser(null); 635 643 return actionParser.saveAction(new ToolbarPreferences.ActionDefinition(this)); 636 644 } 637 } 645 } 646 No newline at end of file
