package de.westnordost.streetcomplete.data.osm; import de.westnordost.streetcomplete.data.osm.download.MapDataWithGeometryHandler; import de.westnordost.streetcomplete.data.osm.download.OverpassMapDataDao; import de.westnordost.streetcomplete.data.osm.tql.FiltersParser; import de.westnordost.streetcomplete.data.osm.tql.TagFilterExpression; import de.westnordost.osmapi.map.data.BoundingBox; /** Quest type that simply makes a certain overpass query using tag filters and creates quests for * every element received */ public abstract class SimpleOverpassQuestType implements OsmElementQuestType { private final OverpassMapDataDao overpassServer; private TagFilterExpression filter; public SimpleOverpassQuestType(OverpassMapDataDao overpassServer) { this.overpassServer = overpassServer; filter = new FiltersParser().parse(getTagFilters()); } /** @return a query string that is accepted by Overpass and does not exceed the given bbox */ String getOverpassQuery(BoundingBox bbox) { return filter.toOverpassQLString(bbox); } protected abstract String getTagFilters(); public boolean download(BoundingBox bbox, MapDataWithGeometryHandler handler) { return overpassServer.getAndHandleQuota(getOverpassQuery(bbox), handler); } }