Search in sources :

Example 11 with Module

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));
        }
    }
}
Also used : QName(org.exist.dom.QName) TreeSet(java.util.TreeSet) Module(org.exist.xquery.Module)

Example 12 with Module

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();
    }
}
Also used : AttributesImpl(org.xml.sax.helpers.AttributesImpl) MemTreeBuilder(org.exist.dom.memtree.MemTreeBuilder) QName(org.exist.dom.QName) Module(org.exist.xquery.Module) DocumentImpl(org.exist.dom.memtree.DocumentImpl)

Aggregations

Module (org.exist.xquery.Module)12 QName (org.exist.dom.QName)5 MemTreeBuilder (org.exist.dom.memtree.MemTreeBuilder)3 URI (java.net.URI)2 Map (java.util.Map)2 Source (org.exist.source.Source)2 ExternalModule (org.exist.xquery.ExternalModule)2 XPathException (org.exist.xquery.XPathException)2 AttributesImpl (org.xml.sax.helpers.AttributesImpl)2 ConsumerE (com.evolvedbinary.j8fu.function.ConsumerE)1 IEntry (io.lacuna.bifurcan.IEntry)1 IMap (io.lacuna.bifurcan.IMap)1 Map (io.lacuna.bifurcan.Map)1 Maps (io.lacuna.bifurcan.Maps)1 IOException (java.io.IOException)1 java.util (java.util)1 TreeSet (java.util.TreeSet)1 DocumentImpl (org.exist.dom.memtree.DocumentImpl)1 RequestWrapper (org.exist.http.servlets.RequestWrapper)1 PermissionDeniedException (org.exist.security.PermissionDeniedException)1