/** * Removes a start address from a statement. * E.g. for =a*b*c*d/&/... and =a*b, this returns *c*d/&/... */ public static XDIStatement removeStartXDIStatement(final XDIStatement statement, final XDIAddress start) { return removeStartXDIStatement(statement, start, false, false); }
@Override public XDIStatement absoluteToRelativeXDIStatement(XDIStatement absoluteStatementAddress) { XDIStatement relativeStatementAddress = XDIStatementUtil.removeStartXDIStatement(absoluteStatementAddress, this.getContextNode().getXDIAddress()); if (log.isTraceEnabled()) log.trace("absoluteToRelativeStatementAddress(" + absoluteStatementAddress + " --> " + relativeStatementAddress + ")"); return relativeStatementAddress; }
XDIStatement nextRelativeTargetXDIStatement = relativeTargetXDIStatement == null ? null : XDIStatementUtil.removeStartXDIStatement(relativeTargetXDIStatement, contributorAddress); XDIAddress nextRelativeNodeXDIAddress = nextRelativeTargetXDIStatement == null ? null : nextRelativeTargetXDIStatement.getContextNodeXDIAddress();
private boolean tryPutStatementIntoInnerJsonObject(XDIStatement XDIstatement, JsonObject jsonObject) throws IOException { XDIArc subjectFirstArc = XDIstatement.getSubject().getFirstXDIArc(); if (subjectFirstArc == null || (! subjectFirstArc.hasXRef()) || (! subjectFirstArc.getXRef().hasPartialSubjectAndPredicate())) return false; XDIAddress innerRootSubject = XDIstatement.getSubject().getFirstXDIArc().getXRef().getPartialSubject(); XDIAddress innerRootPredicate = XDIstatement.getSubject().getFirstXDIArc().getXRef().getPartialPredicate(); XDIStatement reducedStatementAddress = XDIStatementUtil.removeStartXDIStatement(XDIstatement, XDIAddress.fromComponent(subjectFirstArc)); if (reducedStatementAddress == null) return false; // find the inner root JSON array String innerRootKey = "" + innerRootSubject + "/" + innerRootPredicate; JsonArray innerRootJsonArray = (JsonArray) jsonObject.get(innerRootKey); if (innerRootJsonArray == null) { innerRootJsonArray = new JsonArray(); jsonObject.add(innerRootKey, innerRootJsonArray); } // find the inner root JSON object JsonObject innerRootJsonObject = findJsonObjectInJsonArray(innerRootJsonArray); if (innerRootJsonObject == null) { innerRootJsonObject = new JsonObject(); innerRootJsonArray.add(innerRootJsonObject); } // put the statement into the inner root JSON object this.putStatementIntoJsonObject(reducedStatementAddress, innerRootJsonObject); // done return true; }
XDIStatement reducedContextStatement = XDIStatementUtil.removeStartXDIStatement(contextStatement, XDIAddress.create("=markus")); assertEquals(reducedContextStatement.getObject(), "<#name>"); assertEquals(XDIStatementUtil.removeStartXDIStatement(reducedContextStatement, XDIAddress.create("{}"), false, true), XDIStatement.create("//<#name>")); XDIStatement reducedLiteralStatement = XDIStatementUtil.removeStartXDIStatement(literalStatement, XDIAddress.create("=markus")); assertEquals(reducedLiteralStatement.getObject(), "Markus Sabadello"); assertEquals(XDIStatementUtil.removeStartXDIStatement(reducedLiteralStatement, XDIAddress.create("{}"), false, true), XDIStatement.create("/&/\"Markus Sabadello\"")); assertEquals(XDIStatementUtil.removeStartXDIStatement(reducedLiteralStatement, XDIAddress.create("{}{}"), false, true), XDIStatement.create("/&/\"Markus Sabadello\"")); XDIStatement reducedRelationStatement1 = XDIStatementUtil.removeStartXDIStatement(relationStatement, XDIAddress.create("=markus")); assertEquals(reducedRelationStatement1.getObject(), "=markus<#full><#name>"); assertEquals(XDIStatementUtil.removeStartXDIStatement(reducedRelationStatement1, XDIAddress.create("{}"), false, true), XDIStatement.create("/$ref/=markus<#full><#name>")); XDIStatement reducedRelationStatement2 = XDIStatementUtil.removeStartXDIStatement(relationStatement, XDIAddress.create("=markus")); assertEquals(reducedRelationStatement2.getObject(), "=markus<#full><#name>"); assertEquals(XDIStatementUtil.removeStartXDIStatement(reducedRelationStatement2, XDIAddress.create("{}"), false, true), XDIStatement.create("/$ref/=markus<#full><#name>"));