use of org.exist.xquery.Module in project exist by eXist-db.
the class BuiltinFunctions method addFunctionsFromModules.
private void addFunctionsFromModules(final ValueSequence resultSeq, final Module[] modules) {
final Set<QName> set = new TreeSet<>();
for (final Module module : modules) {
final FunctionSignature[] signatures = module.listFunctions();
// add to set to remove duplicate QName's
for (final FunctionSignature signature : signatures) {
final QName qname = signature.getName();
set.add(qname);
}
for (final QName qname : set) {
resultSeq.add(new QNameValue(context, qname));
}
}
}
use of org.exist.xquery.Module in project exist by eXist-db.
the class DescribeFunction method eval.
@Override
public Sequence eval(Sequence contextSequence, Item contextItem) throws XPathException {
final String fname = getArgument(0).eval(contextSequence, contextItem).getStringValue();
final QName qname;
try {
qname = QName.parse(context, fname, context.getDefaultFunctionNamespace());
} catch (final QName.IllegalQNameException e) {
throw new XPathException(this, ErrorCodes.XPST0081, "No namespace defined for prefix " + fname);
}
final String uri = qname.getNamespaceURI();
context.pushDocumentContext();
try {
final MemTreeBuilder builder = context.getDocumentBuilder();
final AttributesImpl attribs = new AttributesImpl();
attribs.addAttribute("", "name", "name", "CDATA", qname.getStringValue());
attribs.addAttribute("", "module", "module", "CDATA", uri);
final int nodeNr = builder.startElement("", "function", "function", attribs);
FunctionSignature signature;
final Module[] modules = context.getModules(uri);
if (isNotEmpty(modules)) {
for (final Module module : modules) {
final Iterator<FunctionSignature> i = module.getSignaturesForFunction(qname);
while (i.hasNext()) {
signature = i.next();
writeSignature(signature, builder);
}
}
} else {
final Iterator<FunctionSignature> i = context.getSignaturesForFunction(qname);
while (i.hasNext()) {
signature = i.next();
writeSignature(signature, builder);
}
}
builder.endElement();
return ((DocumentImpl) builder.getDocument()).getNode(nodeNr);
} finally {
context.popDocumentContext();
}
}
Aggregations