package org.gcube.resources.discovery.client.queries.impl; import java.net.URI; import java.util.Map; import org.gcube.resources.discovery.client.queries.api.SimpleQuery; /** * A {@link SimpleQuery} over an XQuery template. *

* The template is defined as follows (cf. {@link #template}): *

* <ns/> for $resource in <range/><vars/> where <cond def="$result"/> return <result def="$result"/> *

* * where: * *

* * @author Fabio Simeoni * */ public class XQuery extends QueryTemplate implements SimpleQuery { public static final String ns = "ns"; public static final String vars = "vars"; public static final String range = "range"; public static final String cond = "cond"; public static final String result = "result"; public static final String template = " for $resource in <" + range + "/> <" + cond + " "+ STATEMENT +"='where' "+ DEFAULT + "=''/> return <" + result + " " + DEFAULT + "='$resource'/>"; public XQuery(Map parameters) {// add static parameters super(template, parameters); } /** * {@inheritDoc} *

* In the condition, $resource ranges over resources. * */ public XQuery addCondition(String condition) { String newcond = "("+condition+")"; if (hasParameter(cond)) appendParameter(cond," and "+newcond); else addParameter(cond,newcond); return this; } public XQuery addNamespace(String prefix, URI uri) { String declaration = "declare namespace " + prefix + " = '" + uri + "';"; appendParameter(ns,declaration); return this; } public XQuery addVariable(String variable, String range) { String declaration = ", "+variable+" in "+range; appendParameter(vars,declaration); return this; } /** * {@inheritDoc} *

* In the expression, $resource ranges over resources. */ public XQuery setResult(String expression) { addParameter(result, expression); return this; } }