Changeset 2993 in josm for trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java
- Timestamp:
- 2010-02-15T20:39:37+01:00 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java
r2973 r2993 12 12 13 13 import org.openstreetmap.josm.Main; 14 import org.openstreetmap.josm.actions.search.PushbackTokenizer.Range; 14 15 import org.openstreetmap.josm.actions.search.PushbackTokenizer.Token; 15 16 import org.openstreetmap.josm.data.osm.Node; … … 254 255 this.key = key; 255 256 this.value = value == null?"":value; 256 if ("".equals( value) && "*".equals(key)) {257 if ("".equals(this.value) && "*".equals(key)) { 257 258 mode = Mode.NONE; 258 } else if ("".equals( value)) {259 } else if ("".equals(this.value)) { 259 260 if (regexp) { 260 261 mode = Mode.MISSING_KEY_REGEXP; … … 262 263 mode = Mode.MISSING_KEY; 263 264 } 264 } else if ("*".equals(key) && "*".equals( value)) {265 } else if ("*".equals(key) && "*".equals(this.value)) { 265 266 mode = Mode.ANY; 266 267 } else if ("*".equals(key)) { … … 270 271 mode = Mode.ANY_KEY; 271 272 } 272 } else if ("*".equals( value)) {273 } else if ("*".equals(this.value)) { 273 274 if (regexp) { 274 275 mode = Mode.ANY_VALUE_REGEXP; … … 289 290 keyPattern = null; 290 291 } 291 if (regexp && value.length() > 0 && !value.equals("*")) {292 if (regexp && this.value.length() > 0 && !this.value.equals("*")) { 292 293 try { 293 valuePattern = Pattern.compile( value);294 valuePattern = Pattern.compile(this.value); 294 295 } catch (PatternSyntaxException e) { 295 296 throw new ParseError(tr("Pattern Syntax Error: Pattern {0} in {1} is illegal!", e.getPattern(), value)); … … 471 472 } 472 473 473 private static class NodeCount extends Match {474 private int count;475 public NodeCount(int count) {this.count = count;}476 @Override public boolean match(OsmPrimitive osm) {477 return osm instanceof Way && ((Way) osm).getNodesCount() == count;478 }479 @Override public String toString() {return "nodes="+count;}480 }481 482 474 private static class NodeCountRange extends Match { 483 475 private int minCount; … … 500 492 } 501 493 502 private static class TagCount extends Match {503 private int count;504 public TagCount(int count) {this.count = count;}505 @Override public boolean match(OsmPrimitive osm) {506 int size = osm.getKeys().size();507 return size == count;508 }509 @Override public String toString() {return "tags="+count;}510 }511 512 494 private static class TagCountRange extends Match { 513 495 private int minCount; … … 609 591 public ParseError(String msg) { 610 592 super(msg); 593 } 594 public ParseError(Token expected, Token found) { 595 this(tr("Unexpected token. Expected {0}, found {1}", expected, found)); 611 596 } 612 597 } … … 656 641 Match expression = parseExpression(); 657 642 if (!tokenizer.readIfEqual(Token.RIGHT_PARENT)) 658 throw new ParseError( tr("Unexpected token. Expected {0}, found {1}", Token.RIGHT_PARENT, tokenizer.nextToken()));643 throw new ParseError(Token.RIGHT_PARENT, tokenizer.nextToken()); 659 644 return expression; 660 645 } else if (tokenizer.readIfEqual(Token.NOT)) … … 663 648 String key = tokenizer.getText(); 664 649 if (tokenizer.readIfEqual(Token.EQUALS)) 665 return new ExactKeyValue(regexSearch, key, tokenizer.readText ());666 else if (tokenizer.readIfEqual(Token.COLON)) 650 return new ExactKeyValue(regexSearch, key, tokenizer.readTextOrNumber()); 651 else if (tokenizer.readIfEqual(Token.COLON)) { 667 652 if ("id".equals(key)) 668 653 return new Id(tokenizer.readNumber(tr("Primitive id expected"))); 654 else if ("tags".equals(key)) { 655 Range range = tokenizer.readRange(); 656 return new TagCountRange((int)range.getStart(), (int)range.getEnd()); 657 } else if ("nodes".equals("nodes")) { 658 Range range = tokenizer.readRange(); 659 return new NodeCountRange((int)range.getStart(), (int)range.getEnd()); 660 } else if ("changeset".equals(key)) 661 return new ChangesetId(tokenizer.readNumber(tr("Changeset id expected"))); 662 else if ("version".equals(key)) 663 return new Version(tokenizer.readNumber(tr("Version expected"))); 669 664 else 670 return parseKV(key, tokenizer.readText ());671 else if (tokenizer.readIfEqual(Token.QUESTION_MARK))665 return parseKV(key, tokenizer.readTextOrNumber()); 666 } else if (tokenizer.readIfEqual(Token.QUESTION_MARK)) 672 667 return new BooleanMatch(key, false); 673 668 else if ("modified".equals(key)) … … 705 700 else if (key.equals("user")) 706 701 return new UserMatch(value); 707 else if (key.equals("tags")) {708 try {709 String[] range = value.split("-");710 if (range.length == 1)711 return new TagCount(Integer.parseInt(value));712 else if (range.length == 2)713 return new TagCountRange(Integer.parseInt(range[0]), Integer.parseInt(range[1]));714 else715 throw new ParseError(tr("Wrong number of parameters for tags operator."));716 } catch (NumberFormatException e) {717 throw new ParseError(tr("Incorrect value of tags operator: {0}. Tags operator expects number of tags or range, for example tags:1 or tags:2-5", value));718 }719 } else if (key.equals("nodes")) {720 try {721 String[] range = value.split("-");722 if (range.length == 1)723 return new NodeCount(Integer.parseInt(value));724 else if (range.length == 2)725 return new NodeCountRange(Integer.parseInt(range[0]), Integer.parseInt(range[1]));726 else727 throw new ParseError(tr("Wrong number of parameters for nodes operator."));728 } catch (NumberFormatException e) {729 throw new ParseError(tr("Incorrect value of nodes operator: {0}. Nodes operator expects number of nodes or range, for example nodes:10-20", value));730 }731 732 } else if (key.equals("changeset")) {733 try {734 return new ChangesetId(Integer.parseInt(value));735 } catch (NumberFormatException x) {736 throw new ParseError(tr("Incorrect value of changeset operator: {0}. Number is expected.", value));737 }738 739 } else if (key.equals("version")) {740 try {741 return new Version(Long.parseLong(value));742 } catch (NumberFormatException x) {743 throw new ParseError(tr("Incorrect value of version operator: {0}. Number is expected.", value));744 }745 }746 702 else 747 703 return new KeyValue(key, value, regexSearch, caseSensitive);
Note:
See TracChangeset
for help on using the changeset viewer.