public void storeSecCommand() throws XQException { String dName = "..\\..\\etc\\samples\\tpox\\"; String xml; try { xml = readTextFile(dName + "security5621.xml"); } catch (IOException ex) { throw new XQException(ex.getMessage()); } XQExpression xqe = xqc.createExpression(); xqe.bindString(new QName("doc"), xml, xqc.createAtomicType(XQItemType.XQBASETYPE_STRING)); xqe.executeCommand("storeDocument($doc)"); // todo: get XDMDocument back somehow.. // XDMDocument doc = (XDMDocument) ... xqe.close(); }
@Override public String readDocument(String uri) throws XQException { String query = "declare namespace bgdb=\"http://bagridb.com/bdb\";\n" + "declare variable $uri external;\n" + "let $doc := bgdb:get-document-content($uri)\n" + "return $doc\n"; XQPreparedExpression xqpe = xqConn.prepareExpression(query); xqpe.bindString(new QName("uri"), uri, xqConn.createAtomicType(XQItemType.XQBASETYPE_ANYURI)); XQResultSequence xqs = xqpe.executeQuery(); String result = null; if (xqs.next()) { result = xqs.getItemAsString(null); } return result; }
@Override public void deleteDocument(String uri) throws XQException { String query = "declare namespace bgdb=\"http://bagridb.com/bdb\";\n" + "declare variable $uri external;\n" + "let $uri := bgdb:remove-document($uri)\n" + "return $uri\n"; XQPreparedExpression xqpe = xqConn.prepareExpression(query); xqpe.bindString(new QName("uri"), uri, xqConn.createAtomicType(XQItemType.XQBASETYPE_ANYURI)); XQSequence xqs = xqpe.executeQuery(); String result = null; try { if (xqs.next()) { result = xqs.getAtomicValue(); } if (!uri.equals(result)) { throw new XQException("got no result from bgdb:remove-document function"); } } finally { xqpe.close(); xqs.close(); } }
@Test public void testBinding() throws XQException { SaxonXQDataSource xqds = new SaxonXQDataSource(); XQConnection xqc = xqds.getConnection(); XQPreparedExpression xqpe = xqc.prepareExpression("declare variable $v external; $v"); xqpe.bindString(new QName("v"), "Hello world!", xqc.createAtomicType(XQItemType.XQBASETYPE_STRING)); XQSequence xqs = xqpe.executeQuery(); assertTrue(xqs.next()); assertEquals("Hello world!", xqs.getAtomicValue()); xqpe.close(); xqpe = xqc.prepareExpression("declare variable $v external; $v"); xqpe.bindString(new QName("v"), "Hello", xqc.createAtomicType(XQItemType.XQBASETYPE_NCNAME)); xqs = xqpe.executeQuery(); xqs.next(); assertEquals("A-XQDC-1.7: Successful bindXXX.", XQItemType.XQITEMKIND_ATOMIC, xqs.getItemType().getItemKind()); assertEquals("A-XQDC-1.7: Successful bindXXX.", XQItemType.XQBASETYPE_NCNAME, xqs.getItemType().getBaseType()); assertEquals("A-XQDC-1.7: Successful bindXXX.", "Hello", xqs.getObject()); xqpe.close(); }
/** * 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(); } }
@Test public void testBuildManual() throws Exception { ModelManagement model = new ModelManagementImpl(); List<Data> data = new ArrayList<>(); //data.add(new Data(new Path("", "/map", NodeKind.document, 1, 0, 4, XQItemType.XQBASETYPE_ANYTYPE, Occurrence.onlyOne), new Element(new int[] {}, null))); data.add(new Data(new Path("/firstName", "/", NodeKind.attribute, 2, 1, 2, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {1}, "John"))); data.add(new Data(new Path("/lastName", "/", NodeKind.attribute, 3, 1, 3, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {2}, "Smith"))); data.add(new Data(new Path("/age", "/", NodeKind.attribute, 4, 1, 4, XQItemType.XQBASETYPE_LONG, Occurrence.onlyOne), new Element(new int[] {3}, new Long(25)))); MapBuilder builder = new MapBuilder(model); Map<String, Object> content = builder.buildContent(data); System.out.println(content); assertNotNull(content); assertEquals("John", content.get("firstName")); assertEquals("Smith", content.get("lastName")); assertEquals(25L, content.get("age")); }
@Override public void setContextItemStaticType(XQItemType contextItemType) throws XQException { if (contextItemType == null) { this.type = null; } else { QName typeName = null; if (XQUtils.isBaseTypeSupported(contextItemType.getItemKind())) { typeName = contextItemType.getTypeName(); } else { // ??? } QName nodeName = null; if (XQUtils.isNodeNameSupported(contextItemType.getItemKind())) { nodeName = contextItemType.getNodeName(); } this.type = new BagriXQItemType(contextItemType.getBaseType(), contextItemType.getItemKind(), nodeName, typeName, contextItemType.isElementNillable(), contextItemType.getSchemaURI()); } }
@Override public XQSequenceType getStaticVariableType(QName name) throws XQException { checkState(ex_expression_closed); if (name == null) { throw new XQException("name is null"); } if (getVarNames().contains(name)) { // where can I get var type?? XQItemType type; XQItemAccessor acc = (XQItemAccessor) getBindings().get(name); if (acc != null) { type = acc.getItemType(); } else { type = connection.createItemType(); } return new BagriXQSequenceType(type, OCC_ZERO_OR_MORE); } throw new XQException("Static variable [" + name + "] does not exist"); }
@Override public XQItem createItemFromAtomicValue(String value, XQItemType type) throws XQException { checkState(ex_connection_closed); if (type == null) { throw new XQException("value is null"); } if (value == null) { throw new XQException("type is null"); } if (!isAtomicType(type.getBaseType())) { throw new XQException("type is not atomic"); } if (!((BagriXQItemType) type).isValueCompatible(value)) { throw new XQException("Value is not compatible"); } return new BagriXQItem(xqProcessor, type, value); }
@Override public XQItem createItemFromDocument(XMLStreamReader value, XQItemType type) throws XQException { checkState(ex_connection_closed); if (value == null) { throw new XQException("StreamReader is null"); } String content; try { content = XMLUtils.sourceToString(new StAXSource(value), null); } catch (IOException ex) { throw new XQException(ex.getMessage()); } return createItemFromDocument(content, null, type); }
@Override public XQItem createItemFromDocument(Source value, XQItemType type) throws XQException { checkState(ex_connection_closed); if (value == null) { throw new XQException("Source is null"); } String content; try { content = XMLUtils.sourceToString(value, null); } catch (IOException ex) { throw new XQException(ex.getMessage()); } return createItemFromDocument(content, null, type); }
@Override public XQItem createItemFromDocument(Reader value, String baseURI, XQItemType type) throws XQException { checkState(ex_connection_closed); if (value == null) { throw new XQException("value is null"); } String content; try { content = XMLUtils.textToString(value); } catch (IOException ex) { throw new XQException(ex.getMessage()); } return createItemFromDocument(content, baseURI, type); }
@Override public XQItem createItemFromDocument(InputStream value, String baseURI, XQItemType type) throws XQException { checkState(ex_connection_closed); if (value == null) { throw new XQException("value is null"); } String content; try { content = XMLUtils.textToString(value); } catch (IOException ex) { throw new XQException(ex.getMessage()); } return createItemFromDocument(content, baseURI, type); }
@Override public XQItem createItemFromNode(Node value, XQItemType type) throws XQException { checkState(ex_connection_closed); if (value == null) { throw new XQException("Node value is null"); } if (type == null) { return new BagriXQItem(xqProcessor, createNodeType(), value); } else { if (!((BagriXQItemType) type).isNodeCompatible(value)) { throw new XQException("Node type and value are not compatible"); } return new BagriXQItem(xqProcessor, type, value); } }
@Override public XQItem createItemFromObject(Object value, XQItemType type) throws XQException { checkState(ex_connection_closed); if (value == null) { throw new XQException("value is null"); } if (type == null) { type = XQUtils.getTypeForObject(this, value); } else { if (!XQUtils.isTypeValueCompatible(type.getBaseType(), value)) { throw new XQException("Value is not compatible"); } } return new BagriXQItem(xqProcessor, type, value); }
@Override public XQSequenceType createSequenceType(XQItemType type, int occurence) throws XQException { checkState(ex_connection_closed); if (type == null) { if (occurence == XQSequenceType.OCC_EMPTY) { return new BagriXQSequenceType(type, occurence); } throw new XQException("Occurence must be OCC_EMPTY"); } else { if (occurence == XQSequenceType.OCC_EMPTY) { throw new XQException("Occurence must be not OCC_EMPTY"); } if (occurence == XQSequenceType.OCC_ZERO_OR_ONE || occurence == XQSequenceType.OCC_EXACTLY_ONE || occurence == XQSequenceType.OCC_ZERO_OR_MORE || occurence == XQSequenceType.OCC_ONE_OR_MORE) { return new BagriXQSequenceType(type, occurence); } throw new XQException("Wrong occurence value: " + occurence); } }
@Test public void testGetDouble() throws XQException { XQPreparedExpression xqpe = xqc.prepareExpression("declare variable $v external; $v"); try { xqpe.bindDouble(new QName("v"), 1d, xqc.createAtomicType(XQItemType.XQBASETYPE_DOUBLE)); } catch (XQException e) { fail("A-XQDC-1.7: bindDouble() failed with message: " + e.getMessage()); } XQSequence xqs = xqpe.executeQuery(); xqs.next(); assertEquals("A-XQDC-1.7: Successful bindXXX.", XQItemType.XQITEMKIND_ATOMIC, xqs.getItemType().getItemKind()); assertEquals("A-XQDC-1.7: Successful bindXXX.", XQItemType.XQBASETYPE_DOUBLE, xqs.getItemType().getBaseType()); assertTrue("A-XQDC-1.7: Successful bindXXX.", 1d == xqs.getDouble()); xqpe.close(); }
@Test public void testGetBoolean() throws XQException { XQExpression xqe = xqc.createExpression(); xqe.bindObject(new QName("v"), Boolean.valueOf(true), null); xqe.bindBoolean(new QName("v"), true, xqc.createAtomicType(XQItemType.XQBASETYPE_BOOLEAN)); XQSequence xqs = xqe.executeQuery("declare variable $v external; $v instance of xs:boolean"); xqs.next(); assertTrue("expected true but got false", xqs.getBoolean()); //xqe.close(); //xqe = xqc.createExpression(); xqe.bindObject(new QName("v"), new Byte((byte)1), null); xqs = xqe.executeQuery("declare variable $v external; $v instance of xs:byte"); xqs.next(); assertTrue("expected true (byte) but got false", xqs.getBoolean()); }
@Test public void testBinding() throws XQException { XQPreparedExpression xqpe = xqc.prepareExpression("declare variable $v external; $v"); xqpe.bindString(new QName("v"), "Hello world!", xqc.createAtomicType(XQItemType.XQBASETYPE_STRING)); XQSequence xqs = xqpe.executeQuery(); assertTrue(xqs.next()); assertEquals("Hello world!", xqs.getAtomicValue()); xqpe.close(); xqpe = xqc.prepareExpression("declare variable $v external; $v"); xqpe.bindString(new QName("v"), "Hello", xqc.createAtomicType(XQItemType.XQBASETYPE_NCNAME)); xqs = xqpe.executeQuery(); xqs.next(); assertEquals("A-XQDC-1.7: Successful bindXXX.", XQItemType.XQITEMKIND_ATOMIC, xqs.getItemType().getItemKind()); assertEquals("A-XQDC-1.7: Successful bindXXX.", XQItemType.XQBASETYPE_NCNAME, xqs.getItemType().getBaseType()); assertEquals("A-XQDC-1.7: Successful bindXXX.", "Hello", xqs.getObject()); xqpe.close(); }
@Test public void testStoreSecurity() throws XQException { String dName = "../etc/samples/tpox/"; String xml; try { xml = readTextFile(dName + "security1500.xml"); } catch (IOException ex) { throw new XQException(ex.getMessage()); } String query = "declare namespace bgdb=\"http://bagridb.com/bdb\";\n" + "declare variable $url external;\n" + "declare variable $xml external;\n" + "let $id := bgdb:store-document($url, $xml)\n" + "return $id\n"; XQConnection xqc = xqds.getConnection(); XQPreparedExpression xqpe = xqc.prepareExpression(query); xqpe.bindString(new QName("url"), "security1500.xml", xqc.createAtomicType(XQItemType.XQBASETYPE_ANYURI)); xqpe.bindString(new QName("xml"), xml, xqc.createAtomicType(XQItemType.XQBASETYPE_STRING)); XQSequence xqs = xqpe.executeQuery(); assertTrue(xqs.next()); xqs.close(); xqpe.close(); }
@Override public Integer call() throws Exception { Path path = mm.translatePath("/{http://tpox-benchmark.com/security}Security", "/{http://tpox-benchmark.com/security}Security", ///{http://tpox-benchmark.com/security}Symbol/text()", NodeKind.element, 0, XQItemType.XQBASETYPE_ANYTYPE, Occurrence.onlyOne); //NodeKind.text, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne); return path.getPathId(); }
private long storeXmlDocument(String fileName) throws XQException { String dName = "..\\..\\etc\\samples\\tpox\\"; String xml; try { xml = readTextFile(dName + fileName); } catch (IOException ex) { throw new XQException(ex.getMessage()); } String query = "declare namespace bgdb=\"http://bagridb.com/bdb\";\n" + "declare variable $uri external;\n" + "declare variable $xml external;\n" + "declare variable $props external;\n" + "let $id := bgdb:store-document($uri, $xml, $props)\n" + "return $id\n"; XQPreparedExpression xqpe = xqc.prepareExpression(query); xqpe.bindString(new QName("uri"), "65538.xml", xqc.createAtomicType(XQItemType.XQBASETYPE_ANYURI)); xqpe.bindString(new QName("xml"), xml, xqc.createAtomicType(XQItemType.XQBASETYPE_STRING)); List<String> props = new ArrayList<>(4); props.add(pn_document_data_format + "=xml"); props.add(pn_document_collections + "=CLN_Custom, CLN_Security"); xqpe.bindSequence(new QName("props"), xqc.createSequence(props.iterator())); XQSequence xqs = xqpe.executeQuery(); if (xqs.next()) { long id = xqs.getLong(); xqpe.close(); xqs.close(); return id; } else { xqpe.close(); xqs.close(); throw new XQException("no response from store-document function"); } }
public void removeSecCommand(long docId) throws XQException { XQExpression xqe = xqc.createExpression(); xqe.bindLong(new QName("docId"), docId, xqc.createAtomicType(XQItemType.XQBASETYPE_LONG)); xqe.executeCommand("removeDocument($docId)"); xqe.close(); }
private String storeDocument(String uri, String content) throws XQException { String query = "declare namespace bgdb=\"http://bagridb.com/bdb\";\n" + "declare variable $uri external;\n" + "declare variable $xml external;\n" + "let $props := map {'" + pn_document_data_format + "': 'XML'}\n" + "let $uri := bgdb:store-document($uri, $xml, $props)\n" + "return $uri\n"; XQPreparedExpression xqpe = xqConn.prepareExpression(query); xqpe.bindString(new QName("uri"), uri, xqConn.createAtomicType(XQItemType.XQBASETYPE_ANYURI)); xqpe.bindString(new QName("xml"), content, xqConn.createAtomicType(XQItemType.XQBASETYPE_STRING)); //List<String> prop = new ArrayList<>(); //prop.add(pn_document_data_format); //prop.add("XML"); //XQSequence sq = xqConn.createSequence(prop.iterator()); //List props = new ArrayList(); //props.add(sq); //xqpe.bindSequence(new QName("props"), xqConn.createSequence(props.iterator())); //xqpe.bindObject(new QName("props"), props, // xqConn.createSequenceType( // xqConn.createSequenceType(xqConn.createAtomicType(XQItemType.XQBASETYPE_STRING), XQSequenceType.OCC_ONE_OR_MORE), // XQSequenceType.OCC_ZERO_OR_MORE)); XQSequence xqs = xqpe.executeQuery(); String result = null; try { if (xqs.next()) { result = xqs.getAtomicValue(); } } finally { xqpe.close(); xqs.close(); } return result; }
private long storeXmlDocument(String fileName) throws XQException { String dName = "..\\..\\etc\\samples\\tpox\\"; String xml; try { xml = readTextFile(dName + fileName); } catch (IOException ex) { throw new XQException(ex.getMessage()); } String query = "declare namespace bgdb=\"http://bagridb.com/bdb\";\n" + "declare variable $sec external;\n\n" + //"return bgdb:store-document($sec)\n"; "for $id in bgdb:store-document($sec)\n" + "return $id\n"; XQPreparedExpression xqpe = xqc.prepareExpression(query); xqpe.bindString(new QName("sec"), xml, xqc.createAtomicType(XQItemType.XQBASETYPE_STRING)); XQSequence xqs = xqpe.executeQuery(); if (xqs.next()) { long result = xqs.getLong(); xqpe.close(); return result; } else { xqpe.close(); throw new XQException("no response from store-document function"); } }
private void bindParams(Map<String, Parameter> params, XQDynamicContext xqe) throws XQException { for (Map.Entry<String, Parameter> e: params.entrySet()) { Parameter param = e.getValue(); //if ("properties".equals(param.getType())) { // create and bind sequence with properties // Properties props; // try { // props = propsFromString(param.getName()); // } catch (IOException ex) { // logger.warn("bindParams.error; " + ex, ex); // continue; // } //XQItemType type = getConnection().createAtomicType(baseType, typeName, null); //XQSequence seq = getConnection().createSequence((java.util.Iterator) null); //xqe.bindSequence(new QName(e.getKey()), seq); // XQSequenceType type = getConnection().createSequenceType(getConnection().createItemType(), XQSequenceType.OCC_ZERO_OR_MORE); //getConnection().createSequenceType( // getConnection().createAtomicType(XQItemType.XQBASETYPE_STRING), XQSequenceType.OCC_ZERO_OR_MORE), XQSequenceType.OCC_ZERO_OR_MORE); //xqe.bindObject(new QName(e.getKey()), props, type); //} else { QName typeName = new QName(xs_ns, param.getType(), xs_prefix); int baseType = getBaseTypeForTypeName(typeName); XQItemType type = getConnection().createAtomicType(baseType, typeName, null); //xqe.bindAtomicValue(new QName(e.getKey()), param.getName(), type); xqe.bindObject(new QName(e.getKey()), getAtomicValue(baseType, param.getName()), type); //} } }
/** * 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); }
private void processField(Path parent, String path, String field, JsonObject object, Occurrence occ) throws BagriException { // it can be an array also! String type = object.getString("type", null); if (type != null) { if (!path.endsWith("/")) { path += "/"; } String next = path + field; switch (type) { case "array": Path array = modelMgr.translatePath(parent.getRoot(), next, NodeKind.array, parent.getPathId(), XQItemType.XQBASETYPE_ANYTYPE, occ); JsonObject items = object.getJsonObject("items"); processField(array, path, field + "/", items, occ); break; case "boolean": modelMgr.translatePath(parent.getRoot(), next, NodeKind.attribute, parent.getPathId(), XQItemType.XQBASETYPE_BOOLEAN, occ); break; case "integer": modelMgr.translatePath(parent.getRoot(), next, NodeKind.attribute, parent.getPathId(), XQItemType.XQBASETYPE_LONG, occ); break; case "number": modelMgr.translatePath(parent.getRoot(), next, NodeKind.attribute, parent.getPathId(), XQItemType.XQBASETYPE_DECIMAL, occ); break; case "object": Path element = modelMgr.translatePath(parent.getRoot(), next, NodeKind.element, parent.getPathId(), XQItemType.XQBASETYPE_ANYTYPE, occ); processObject(element, next, object); break; case "string": modelMgr.translatePath(parent.getRoot(), next, NodeKind.attribute, parent.getPathId(), XQItemType.XQBASETYPE_STRING, occ); break; } } }
boolean appendCharacters() throws BagriException { if (chars.length() > 0) { String content = chars.toString(); // normalize xml content.. what if it is already normalized?? content = content.replaceAll("&", "&"); // trim left/right ? this is schema-dependent. trim if schema-type // is xs:token, for instance.. addData("text()", NodeKind.text, content, XQItemType.XQBASETYPE_ANYATOMICTYPE, Occurrence.zeroOrOne); chars.delete(0, chars.length()); return true; } return false; }
@Override public void endElement() throws BagriException { if (!appendCharacters()) { if (isTopEmpty()) { addData("text()", NodeKind.text, Null._null, XQItemType.XQBASETYPE_ANYATOMICTYPE, Occurrence.zeroOrOne); } } super.endElement(); }
private int getBaseType(XSTypeDefinition std) { if (std == null) { return XQItemType.XQBASETYPE_ANYSIMPLETYPE; } if (xs_ns.equals(std.getNamespace())) { QName qn = new QName(std.getNamespace(), std.getName()); int type = getBaseTypeForTypeName(qn); logger.trace("getBaseType; returning {} for type {}", type, std.getName()); return type; } return getBaseType(std.getBaseType()); }
@Test public void testBuildManual() throws Exception { ModelManagement model = new ModelManagementImpl(); // to prepare model: //XmlStaxParser parser = new XmlStaxParser(model); //List<Data> data = parser.parse(json); //data.clear(); List<Data> data = new ArrayList<>(); data.add(new Data(new Path("", "/", NodeKind.document, 1, 0, 25, XQItemType.XQBASETYPE_ANYTYPE, Occurrence.onlyOne), new Element(new int[] {}, null))); data.add(new Data(new Path("/firstName", "/", NodeKind.attribute, 2, 1, 2, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {1}, "John"))); data.add(new Data(new Path("/lastName", "/", NodeKind.attribute, 3, 1, 3, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {2}, "Smith"))); data.add(new Data(new Path("/age", "/", NodeKind.attribute, 4, 1, 4, XQItemType.XQBASETYPE_LONG, Occurrence.onlyOne), new Element(new int[] {3}, new Long(25)))); data.add(new Data(new Path("/address", "/", NodeKind.element, 5, 1, 9, XQItemType.XQBASETYPE_ANYTYPE, Occurrence.onlyOne), new Element(new int[] {4}, null))); data.add(new Data(new Path("/address/streetAddress", "/", NodeKind.attribute, 6, 5, 6, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {4, 1}, "21 2nd Street"))); data.add(new Data(new Path("/address/city", "/", NodeKind.attribute, 7, 5, 7, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {4, 2}, "New York"))); data.add(new Data(new Path("/address/state", "/", NodeKind.attribute, 8, 5, 8, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {4, 3}, "NY"))); data.add(new Data(new Path("/address/postalCode", "/", NodeKind.attribute, 9, 5, 9, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {4, 4}, "10021"))); data.add(new Data(new Path("/phoneNumber", "/", NodeKind.array, 10, 1, 14, XQItemType.XQBASETYPE_ANYTYPE, Occurrence.zeroOrOne), new Element(new int[] {5}, null))); data.add(new Data(new Path("/phoneNumber/", "/", NodeKind.element, 11, 10, 14, XQItemType.XQBASETYPE_ANYTYPE, Occurrence.oneOrMany), new Element(new int[] {5, 1}, null))); data.add(new Data(new Path("/phoneNumber/type", "/", NodeKind.attribute, 12, 11, 12, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {5, 1, 1}, "home"))); data.add(new Data(new Path("/phoneNumber/number", "/", NodeKind.attribute, 13, 11, 13, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {5, 1, 2}, "212 555-1234"))); data.add(new Data(new Path("/phoneNumber/", "/", NodeKind.element, 11, 10, 14, XQItemType.XQBASETYPE_ANYTYPE, Occurrence.oneOrMany), new Element(new int[] {5, 2}, null))); data.add(new Data(new Path("/phoneNumber/type", "/", NodeKind.attribute, 12, 11, 12, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {5, 2, 1}, "fax"))); data.add(new Data(new Path("/phoneNumber/number", "/", NodeKind.attribute, 13, 11, 13, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {5, 2, 2}, "646 555-4567"))); data.add(new Data(new Path("/phoneNumber/comment", "/", NodeKind.attribute, 14, 11, 14, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {5, 2, 3}, Null._null))); data.add(new Data(new Path("/gender", "/", NodeKind.element, 15, 1, 16, XQItemType.XQBASETYPE_ANYTYPE, Occurrence.onlyOne), new Element(new int[] {6}, null))); data.add(new Data(new Path("/gender/type", "/", NodeKind.attribute, 16, 15, 16, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {6, 1}, "male"))); //System.out.println(data); JsonpBuilder builder = new JsonpBuilder(model); Properties props = new Properties(); props.setProperty(JsonGenerator.PRETTY_PRINTING, "true"); builder.init(props); String content = builder.buildContent(data); System.out.println(content); assertNotNull(content); // now compare content vs xml.. //assertEquals(xml, content); }
@Test public void testBuildManualSparse() throws Exception { ModelManagement model = new ModelManagementImpl(); // to prepare model: JsonpParser parser = new JsonpParser(model); ParseResults results = parser.parse(json); List<Data> data = results.getResults(); data.clear(); data = new ArrayList<>(); //data.add(new Data(new Path("", "/", NodeKind.document, 1, 0, 25, XQItemType.XQBASETYPE_ANYTYPE, Occurrence.onlyOne), new Element(new int[] {}, null))); data.add(new Data(new Path("/firstName", "/", NodeKind.attribute, 2, 1, 2, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {1}, "John"))); data.add(new Data(new Path("/lastName", "/", NodeKind.attribute, 3, 1, 3, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {2}, "Smith"))); data.add(new Data(new Path("/age", "/", NodeKind.attribute, 4, 1, 4, XQItemType.XQBASETYPE_LONG, Occurrence.onlyOne), new Element(new int[] {3}, new Long(25)))); data.add(new Data(new Path("/address/streetAddress", "/", NodeKind.attribute, 6, 5, 6, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {4, 1}, "21 2nd Street"))); data.add(new Data(new Path("/address/city", "/", NodeKind.attribute, 7, 5, 7, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {4, 2}, "New York"))); data.add(new Data(new Path("/address/state", "/", NodeKind.attribute, 8, 5, 8, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {4, 3}, "NY"))); data.add(new Data(new Path("/address/postalCode", "/", NodeKind.attribute, 9, 5, 9, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {4, 4}, "10021"))); data.add(new Data(new Path("/phoneNumber/type", "/", NodeKind.attribute, 12, 11, 12, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {5, 1, 1}, "home"))); data.add(new Data(new Path("/phoneNumber/number", "/", NodeKind.attribute, 13, 11, 13, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {5, 1, 2}, "212 555-1234"))); data.add(new Data(new Path("/phoneNumber/type", "/", NodeKind.attribute, 12, 11, 12, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {5, 2, 1}, "fax"))); data.add(new Data(new Path("/phoneNumber/number", "/", NodeKind.attribute, 13, 11, 13, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {5, 2, 2}, "646 555-4567"))); data.add(new Data(new Path("/phoneNumber/comment", "/", NodeKind.attribute, 14, 11, 14, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {5, 2, 3}, Null._null))); data.add(new Data(new Path("/gender/type", "/", NodeKind.attribute, 16, 15, 16, XQItemType.XQBASETYPE_STRING, Occurrence.onlyOne), new Element(new int[] {6, 1}, "male"))); //System.out.println(data); JsonpBuilder builder = new JsonpBuilder(model); Properties props = new Properties(); props.setProperty(JsonGenerator.PRETTY_PRINTING, "true"); builder.init(props); Map<DataKey, Elements> dataMap = JsonpBuilder.dataToElements(data); String content = builder.buildContent(dataMap); System.out.println(content); assertNotNull(content); // now compare content vs xml.. //assertEquals(xml, content); }
@Override public XQItemType createAtomicType(int baseType, QName typeName, URI schemaURI) throws XQException { checkState(ex_connection_closed); if (baseType == XQBASETYPE_UNTYPED || baseType == XQBASETYPE_ANYTYPE || baseType == XQBASETYPE_IDREFS || baseType == XQBASETYPE_NMTOKENS || baseType == XQBASETYPE_ENTITIES || baseType == XQBASETYPE_ANYSIMPLETYPE) { throw new XQException("Wrong base type: " + baseType); } return new BagriXQItemType(baseType, XQITEMKIND_ATOMIC, null, typeName, false, schemaURI); }
@Override public XQItemType createAttributeType(QName nodeName, int baseType, QName typeName, URI schemaURI) throws XQException { checkState(ex_connection_closed); if (baseType == XQBASETYPE_UNTYPED || baseType == XQBASETYPE_ANYTYPE) { throw new XQException("Wrong base type: " + baseType); } return new BagriXQItemType(baseType, XQITEMKIND_ATTRIBUTE, nodeName, typeName, false, schemaURI); }
@Override public XQItemType createDocumentElementType(XQItemType elementType) throws XQException { checkState(ex_connection_closed); if (elementType == null) { throw new XQException("provided elementType is null"); } if (elementType.getItemKind() != XQITEMKIND_ELEMENT) { throw new XQException("provided elementType has wrong kind: " + elementType); } return new BagriXQItemType(elementType.getBaseType(), XQITEMKIND_DOCUMENT_ELEMENT, elementType.getNodeName(), elementType.getTypeName(), false, null); }
@Override public XQItemType createDocumentSchemaElementType(XQItemType elementType) throws XQException { checkState(ex_connection_closed); return new BagriXQItemType(XQBASETYPE_ANYTYPE, XQITEMKIND_DOCUMENT_SCHEMA_ELEMENT, elementType.getNodeName(), elementType.getTypeName(), elementType.isElementNillable(), elementType.getSchemaURI()); }
@Override public XQItem createItemFromBoolean(boolean value, XQItemType type) throws XQException { checkState(ex_connection_closed); if (type == null || type.getBaseType() == XQBASETYPE_BOOLEAN) { return new BagriXQItem(xqProcessor, new BagriXQItemType(XQBASETYPE_BOOLEAN, XQITEMKIND_ATOMIC, null, getTypeName(XQBASETYPE_BOOLEAN), false, null), value); } throw new XQException("wrong boolean type: " + type + "(" + type.getBaseType() + ")"); }