// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.utilsplugin2.search; import static org.openstreetmap.josm.tools.I18n.tr; import org.openstreetmap.josm.actions.search.PushbackTokenizer; import org.openstreetmap.josm.actions.search.SearchCompiler; import org.openstreetmap.josm.data.osm.Changeset; import org.openstreetmap.josm.data.osm.Node; import org.openstreetmap.josm.data.osm.OsmPrimitive; import org.openstreetmap.josm.data.osm.Relation; import org.openstreetmap.josm.data.osm.Way; import org.openstreetmap.josm.data.osm.visitor.Visitor; /** * Matches nodes that are attached to given range of ways */ public class UsedInWaysMatch extends RangeMatch { public UsedInWaysMatch(PushbackTokenizer.Range range) { super(range); } public UsedInWaysMatch(PushbackTokenizer tokenizer) throws SearchCompiler.ParseError { this(tokenizer.readRange(tr("Range of attached ways count"))); } private static class WayCounter implements Visitor { int count; @Override public void visit(Way w) { count++; } @Override public void visit(Node n) { // Do nothing } @Override public void visit(Relation r) { // Do nothing } @Override public void visit(Changeset cs) { // Do nothing } } WayCounter counter = new WayCounter(); @Override protected Long getNumber(OsmPrimitive osm) { if (osm instanceof Node) { counter.count = 0; osm.visitReferrers(counter); return Long.valueOf(counter.count); } else return null; } @Override protected String getString() { return "wayrefs"; } }