public static XQSequence mapToSequence(XQDataFactory factory, Map<String, Object> map) throws XQException { List<XQSequence> pairs = new ArrayList<>(); for (Map.Entry<String, Object> e: map.entrySet()) { List<XQItemAccessor> pair = new ArrayList<>(2); pair.add(factory.createItemFromString(e.getKey(), factory.createAtomicType(XQBASETYPE_STRING))); pair.add(factory.createItemFromObject(e.getValue(), factory.createAtomicType(getBaseTypeForObject(e.getValue())))); pairs.add(factory.createSequence(pair.iterator())); } return factory.createSequence(pairs.iterator()); }
/** * constructs XQJ item type for the w3c {@link Node} instance provided * * @param factory the XQJ data factory to produce XQ item type * @param node w3c XML Node instance * @return XQ item type * @throws XQException in case of processing error */ public static XQItemType getTypeForNode(XQDataFactory factory, org.w3c.dom.Node node) throws XQException { switch (node.getNodeType()) { case Node.DOCUMENT_NODE: return factory.createDocumentType(); case Node.DOCUMENT_FRAGMENT_NODE: return factory.createDocumentType(); case Node.ELEMENT_NODE: return factory.createElementType(new QName(node.getNodeName()), XQItemType.XQBASETYPE_ANYTYPE); case Node.ATTRIBUTE_NODE: return factory.createAttributeType(new QName(node.getNodeName()), XQItemType.XQBASETYPE_ANYSIMPLETYPE); case Node.COMMENT_NODE: return factory.createCommentType(); case Node.PROCESSING_INSTRUCTION_NODE: return factory.createProcessingInstructionType(null); case Node.TEXT_NODE: return factory.createTextType(); default: return factory.createNodeType(); } }
if (baseType > 0) { if (isAtomicType(baseType)) { return xqFactory.createAtomicType(baseType, typeName, schemaURI); } else { switch (kind) { case XQITEMKIND_ATTRIBUTE: return xqFactory.createAttributeType(nodeName, baseType, typeName, schemaURI); case XQITEMKIND_DOCUMENT_ELEMENT: XQItemType deType = xqFactory.createElementType(nodeName, baseType, typeName, schemaURI, nillable); return xqFactory.createDocumentElementType(deType); case XQITEMKIND_DOCUMENT_SCHEMA_ELEMENT: XQItemType seType = xqFactory.createSchemaElementType(nodeName, baseType, schemaURI); return xqFactory.createDocumentSchemaElementType(seType); case XQITEMKIND_ELEMENT: return xqFactory.createElementType(nodeName, baseType, typeName, schemaURI, nillable); case XQITEMKIND_SCHEMA_ATTRIBUTE: return xqFactory.createSchemaAttributeType(nodeName, baseType, schemaURI); case XQITEMKIND_SCHEMA_ELEMENT: return xqFactory.createSchemaElementType(nodeName, baseType, schemaURI); switch (kind) { case XQITEMKIND_DOCUMENT: return xqFactory.createDocumentType(); case XQITEMKIND_COMMENT: return xqFactory.createCommentType(); case XQITEMKIND_NODE: return xqFactory.createNodeType(); case XQITEMKIND_PI: return xqFactory.createProcessingInstructionType(nodeName == null ? null : nodeName.getLocalPart());
return xqFactory.createItemFromObject(value, type); case XQBASETYPE_NMTOKEN: case XQBASETYPE_UNTYPEDATOMIC: { return xqFactory.createItemFromString(in.readUTF(), type); byte[] ba = new byte[len]; in.readFully(ba); return xqFactory.createItemFromObject(ba, type); case XQBASETYPE_BOOLEAN: return xqFactory.createItemFromBoolean(in.readBoolean(), type); case XQBASETYPE_BYTE: return xqFactory.createItemFromByte(in.readByte(), type); case XQBASETYPE_SHORT: case XQBASETYPE_UNSIGNED_BYTE: return xqFactory.createItemFromShort(in.readShort(), type); case XQBASETYPE_INT: case XQBASETYPE_UNSIGNED_SHORT: return xqFactory.createItemFromInt(in.readInt(), type); case XQBASETYPE_LONG: case XQBASETYPE_UNSIGNED_INT: return xqFactory.createItemFromLong(in.readLong(), type); case XQBASETYPE_INTEGER: case XQBASETYPE_NEGATIVE_INTEGER: return xqFactory.createItemFromObject(in.readObject(), type); case XQBASETYPE_DECIMAL: return xqFactory.createItemFromObject(in.readObject(), type);
throw new XPathException("unsupported type: " + t); XQItemType xqt = xqFactory.createAtomicType(type); return xqFactory.createItemFromObject(value, xqt); } else if (item instanceof NodeInfo) { org.w3c.dom.Node node = NodeOverNodeInfo.wrap((NodeInfo)item); XQItemType xqt = XQUtils.getTypeForNode(xqFactory, node); return xqFactory.createItemFromNode(node, xqt); } else if (item instanceof ObjectValue) { Object value = ((ObjectValue) item).getObject(); } else { XQItemType xqt = XQUtils.getTypeForObject(xqFactory, value); return xqFactory.createItemFromObject(value, xqt); pair.add(itemToXQItem((Item) val, xqFactory)); } else { pair.add(xqFactory.createSequence(new XQIterator(xqFactory, val.iterate()))); pairs.add(xqFactory.createSequence(pair.iterator())); return xqFactory.createSequence(pairs.iterator()); } else if (item instanceof Sequence) { return xqFactory.createSequence(new XQIterator(xqFactory, ((Sequence) item).iterate()));
private void runTrigger(Document doc, SchemaRepositoryImpl repo) throws BagriException { XQProcessor xqp = repo.getXQProcessor(); try { Properties props = new Properties(); props.setProperty(pn_document_data_format, df_xml); DocumentAccessor da = repo.getDocumentManagement().getDocument(doc.getUri(), props); org.w3c.dom.Document xDoc = XMLUtils.textToDocument((String) da.getContent()); XQDataFactory xqFactory = xqp.getXQDataFactory(); XQItem item = xqFactory.createItemFromNode(xDoc, xqFactory.createDocumentType()); xqp.bindVariable("doc", item); if (logger.isTraceEnabled()) { Iterator<?> iter = xqp.executeXQuery(query, props); while (iter.hasNext()) { logger.trace("runTrigger; result: {}", iter.next()); } } xqp.unbindVariable("doc"); } catch (IOException ex) { throw new BagriException(ex, BagriException.ecInOut); } catch (XQException ex) { throw new BagriException(ex, BagriException.ecQuery); } }
@Override public XQSequence read(ObjectDataInput in) throws IOException { try { //XQItemType type = in.readObject(); // TODO: get rid of List, read/write items manually.. List<XQItemAccessor> items = (List<XQItemAccessor>) in.readObject(); logger.trace("read; got {} items", items.size()); return xqFactory.createSequence(items.iterator()); } catch (XQException ex) { throw new IOException(ex); } }
/** * constructs XQJ item type for the {@code value} specified * * @param factory the XQJ data factory to produce XQ item type * @param value the value to get item type from * @return XQ item type * @throws XQException in case of construction error */ public static XQItemType getTypeForObject(XQDataFactory factory, Object value) throws XQException { if (value instanceof org.w3c.dom.Node) { return getTypeForNode(factory, (org.w3c.dom.Node) value); } int baseType = getBaseTypeForObject(value); return factory.createAtomicType(baseType, getTypeName(baseType), null); }