package com.bagri.xquery.saxon.ext.doc; import static com.bagri.core.Constants.cmd_store_document; import static com.bagri.xquery.saxon.SaxonUtils.sequence2Properties; import java.util.Properties; import com.bagri.core.api.DocumentManagement; import com.bagri.core.api.BagriException; import com.bagri.core.model.Document; import net.sf.saxon.expr.XPathContext; import net.sf.saxon.lib.ExtensionFunctionCall; import net.sf.saxon.ma.map.HashTrieMap; import net.sf.saxon.om.Sequence; import net.sf.saxon.trans.XPathException; import net.sf.saxon.value.AnyURIValue; import net.sf.saxon.value.SequenceType; public class StoreDocument extends DocumentFunctionExtension { //private static final Logger logger = LoggerFactory.getLogger(StoreDocument.class); public StoreDocument(DocumentManagement xdm) { super(xdm); } @Override public String getFunctionName() { return cmd_store_document; } @Override public SequenceType[] getArgumentTypes() { return new SequenceType[] {SequenceType.SINGLE_ANY_URI, SequenceType.SINGLE_STRING, SequenceType.ATOMIC_SEQUENCE}; //STRING_SEQUENCE}; } @Override public SequenceType getResultType(SequenceType[] suppliedArgumentTypes) { return SequenceType.SINGLE_ANY_URI; } @Override public int getMinimumNumberOfArguments() { return 2; } @Override public int getMaximumNumberOfArguments() { return 3; } @Override public ExtensionFunctionCall makeCallExpression() { return new ExtensionFunctionCall() { @Override public Sequence call(XPathContext context, Sequence[] arguments) throws XPathException { String uri = arguments[0].head().getStringValue(); String xml = arguments[1].head().getStringValue(); Properties props = null; if (arguments.length > 2) { props = sequence2Properties(arguments[2]); } try { Document doc = xdm.storeDocumentFromString(uri, xml, props); //HashTrieMap map = new HashTrieMap(context); return new AnyURIValue(doc.getUri()); } catch (BagriException ex) { throw new XPathException(ex); } } }; } }