// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.opendata.core.io; public abstract class OverpassApi { public enum OaQueryType { NODE("node"), WAY("way"), RELATION("relation"); @Override public String toString() { return this.value; } OaQueryType(final String value) { this.value = value; } private final String value; } public enum OaRecurseType { RELATION_RELATION("relation-relation"), RELATION_BACKWARDS("relation-backwards"), RELATION_WAY("relation-way"), RELATION_NODE("relation-node"), WAY_NODE("way-node"), WAY_RELATION("way-relation"), NODE_RELATION("node-relation"), NODE_WAY("node-way"); @Override public String toString() { return this.value; } OaRecurseType(final String value) { this.value = value; } private final String value; } public static final String union(String... queries) { String result = "<union>\n"; for (String query : queries) { if (query != null) { result += query + "\n"; } } result += "</union>"; return result; } public static final String query(String bbox, OaQueryType type, String... conditions) { String result = "<query type=\""+type+"\" >\n"; if (bbox != null) { result += "<bbox-query "+bbox+"/>\n"; } for (String condition : conditions) { if (condition != null) { result += condition + "\n"; } } result += "</query>"; return result; } public static final String recurse(OaRecurseType type, String into) { return "<recurse type=\""+type+"\" into=\""+into+"\"/>\n"; } public static final String recurse(OaRecurseType... types) { String result = ""; for (OaRecurseType type : types) { result += "<recurse type=\""+type+"\"/>\n"; } return result; } public static final String print() { return "<print mode=\"meta\"/>"; } public static final String hasKey(String key) { return hasKey(key, null); } public static final String hasKey(String key, String value) { return "<has-kv k=\""+key+"\" "+(value != null && !value.isEmpty() ? "v=\""+value+"\"" : "")+" />"; } }