Changeset 4546 in josm for trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java
- Timestamp:
- 2011-10-29T09:01:30+02:00 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java
r4377 r4546 69 69 protected boolean existsMatch(Collection<? extends OsmPrimitive> primitives) { 70 70 for (OsmPrimitive p : primitives) { 71 if (match(p)) {71 if (match(p)) 72 72 return true; 73 }74 73 } 75 74 return false; … … 81 80 protected boolean forallMatch(Collection<? extends OsmPrimitive> primitives) { 82 81 for (OsmPrimitive p : primitives) { 83 if (!match(p)) {82 if (!match(p)) 84 83 return false; 85 }86 84 } 87 85 return true; … … 110 108 } 111 109 @Override public String toString() {return "!"+match;} 110 public Match getMatch() { 111 return match; 112 } 112 113 } 113 114 … … 130 131 } 131 132 132 p rivatestatic class And extends Match {133 private Match lhs;134 private Match rhs;133 public static class And extends Match { 134 private final Match lhs; 135 private final Match rhs; 135 136 public And(Match lhs, Match rhs) {this.lhs = lhs; this.rhs = rhs;} 136 137 @Override public boolean match(OsmPrimitive osm) { … … 138 139 } 139 140 @Override public String toString() {return lhs+" && "+rhs;} 140 } 141 142 private static class Or extends Match { 143 private Match lhs; 144 private Match rhs; 141 public Match getLhs() { 142 return lhs; 143 } 144 public Match getRhs() { 145 return rhs; 146 } 147 } 148 149 public static class Or extends Match { 150 private final Match lhs; 151 private final Match rhs; 145 152 public Or(Match lhs, Match rhs) {this.lhs = lhs; this.rhs = rhs;} 146 153 @Override public boolean match(OsmPrimitive osm) { … … 148 155 } 149 156 @Override public String toString() {return lhs+" || "+rhs;} 157 public Match getLhs() { 158 return lhs; 159 } 160 public Match getRhs() { 161 return rhs; 162 } 150 163 } 151 164 … … 552 565 public boolean match(OsmPrimitive osm) { 553 566 Integer count = getCount(osm); 554 if (count == null) {567 if (count == null) 555 568 return false; 556 } else {569 else 557 570 return (count >= minCount) && (count <= maxCount); 558 }559 571 } 560 572 … … 575 587 @Override 576 588 protected Integer getCount(OsmPrimitive osm) { 577 if (!(osm instanceof Way)) {589 if (!(osm instanceof Way)) 578 590 return null; 579 } else {591 else 580 592 return ((Way) osm).getNodesCount(); 581 }582 593 } 583 594 … … 649 660 } 650 661 651 private static class Parent extends Match { 652 private Match child; 653 public Parent(Match m) { child = m; } 662 public static class Parent extends Match { 663 private final Match child; 664 public Parent(Match m) { 665 if (m == null) { 666 // "parent" (null) should mean the same as "parent()" 667 // (Always). I.e. match everything 668 child = new Always(); 669 } else { 670 child = m; 671 } 672 } 654 673 @Override public boolean match(OsmPrimitive osm) { 655 674 boolean isParent = false; 656 657 // "parent" (null) should mean the same as "parent()"658 // (Always). I.e. match everything659 if (child == null) {660 child = new Always();661 }662 675 663 676 if (osm instanceof Way) { … … 673 686 } 674 687 @Override public String toString() {return "parent(" + child + ")";} 675 } 676 677 private static class Child extends Match { 688 public Match getChild() { 689 return child; 690 } 691 } 692 693 public static class Child extends Match { 678 694 private final Match parent; 679 695 … … 696 712 } 697 713 @Override public String toString() {return "child(" + parent + ")";} 698 } 699 714 715 public Match getParent() { 716 return parent; 717 } 718 } 719 700 720 /** 701 721 * Matches on the area of a closed way. 702 * 722 * 703 723 * @author Ole Jørgen Brønner 704 724 */ … … 711 731 @Override 712 732 protected Integer getCount(OsmPrimitive osm) { 713 if (!(osm instanceof Way && ((Way) osm).isClosed())) {733 if (!(osm instanceof Way && ((Way) osm).isClosed())) 714 734 return null; 715 }716 735 Way way = (Way) osm; 717 736 return (int) Geometry.closedWayArea(way); … … 743 762 @Override 744 763 public boolean match(OsmPrimitive osm) { 745 if (!osm.isUsable()) {764 if (!osm.isUsable()) 746 765 return false; 747 } else if (osm instanceof Node) {766 else if (osm instanceof Node) 748 767 return bounds.contains(((Node) osm).getCoor()); 749 }else if (osm instanceof Way) {768 else if (osm instanceof Way) { 750 769 Collection<Node> nodes = ((Way) osm).getNodes(); 751 770 return all ? forallMatch(nodes) : existsMatch(nodes); … … 753 772 Collection<OsmPrimitive> primitives = ((Relation) osm).getMemberPrimitives(); 754 773 return all ? forallMatch(primitives) : existsMatch(primitives); 755 } else {774 } else 756 775 return false; 757 }758 776 } 759 777 } … … 799 817 800 818 public static Match compile(String searchStr, boolean caseSensitive, boolean regexSearch) 801 throws ParseError {819 throws ParseError { 802 820 return new SearchCompiler(caseSensitive, regexSearch, 803 821 new PushbackTokenizer(
Note:
See TracChangeset
for help on using the changeset viewer.