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: * *
$result
variable. This parameter
* is typically bound at query-creation time (cf. {@link #XQuery(Map)}.
*
* 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;
}
}