public static XDIArc fromComponent(XDIAddress XDIaddress) { if (XDIaddress.getNumXDIArcs() > 1) return null; return XDIaddress.getFirstXDIArc(); }
@Override public XDIClientRoute<?> route(XDIAddress XDIaddress) throws Xdi2AgentException, Xdi2ClientException { // let's find out the TO peer root of the address XDIAddress peerRootXDIAddress = XDIAddressUtil.extractXDIAddress(XDIaddress, XdiPeerRoot.class, false, false, true, false, false); XDIArc peerRootFirstXDIArc = peerRootXDIAddress == null ? null : peerRootXDIAddress.getFirstXDIArc(); XDIArc firstXDIArc = XDIaddress.getFirstXDIArc(); if (log.isDebugEnabled()) log.debug("Peer root first arc: " + peerRootFirstXDIArc + ", First arc: " + firstXDIArc); XDIArc toPeerRootXDIArc = null; if (toPeerRootXDIArc == null && peerRootFirstXDIArc != null) toPeerRootXDIArc = peerRootFirstXDIArc; if (toPeerRootXDIArc == null && firstXDIArc != null) toPeerRootXDIArc = XdiPeerRoot.createPeerRootXDIArc(XDIAddress.fromComponent(firstXDIArc)); if (log.isDebugEnabled()) log.debug("Determined TO peer root: " + toPeerRootXDIArc); if (toPeerRootXDIArc == null) { if (log.isDebugEnabled()) log.debug("Unable to determine TO peer root for address " + XDIaddress); return null; } // let's find a route return route(toPeerRootXDIArc); }
public Character getCs() { return this.getXDIAddress().getFirstXDIArc().getCs(); }
char cs = XDIaddress.getFirstXDIArc().getCs().charValue(); if (XDIaddress.getFirstXDIArc().isCollection()) return null; if (! XDIaddress.getFirstXDIArc().hasLiteral()) return null; if (XDIaddress.getFirstXDIArc().hasXRef()) return null; if (! XDIaddress.getFirstXDIArc().getLiteral().startsWith(":uuid")) return null; if (XDIaddress.getFirstXDIArc().getLiteral().length() != 42) return null; parts[0] = XDIaddress.getFirstXDIArc().getLiteral().substring(6, 10); parts[1] = XDIaddress.getFirstXDIArc().getLiteral().substring(10, 14); parts[2] = XDIaddress.getFirstXDIArc().getLiteral().substring(15, 19); parts[3] = XDIaddress.getFirstXDIArc().getLiteral().substring(20, 24); if (! parts[0].equals(XDIaddress.getFirstXDIArc().getLiteral().substring(25, 29))) return null; if (! parts[1].equals(XDIaddress.getFirstXDIArc().getLiteral().substring(30, 34))) return null; if (! parts[2].equals(XDIaddress.getFirstXDIArc().getLiteral().substring(34, 38))) return null; if (! parts[3].equals(XDIaddress.getFirstXDIArc().getLiteral().substring(38, 42))) return null;
public Character getCs() { return this.getXDIAddress().getFirstXDIArc().getCs(); }
public Character getCs() { return this.getXDIAddress().getFirstXDIArc().getCs(); }
/** * Return the FROM peer root arc of the message (template). */ public XDIArc getFromPeerRootXDIArc() { Relation fromPeerRootXDIArcRelation = this.getContextNode().getRelation(XDIMessagingConstants.XDI_ADD_FROM); if (fromPeerRootXDIArcRelation == null) return null; XDIAddress fromPeerRootXDIAddress = fromPeerRootXDIArcRelation.getTargetXDIAddress(); if (fromPeerRootXDIAddress.getNumXDIArcs() > 1 || ! XdiPeerRoot.isValidXDIArc(fromPeerRootXDIAddress.getFirstXDIArc())) return null; return fromPeerRootXDIAddress.getFirstXDIArc(); }
/** * Return the TO peer root arc of the message (template). */ public XDIArc getToPeerRootXDIArc() { Relation toPeerRootXDIArcRelation = this.getContextNode().getRelation(XDIMessagingConstants.XDI_ADD_TO); if (toPeerRootXDIArcRelation == null) return null; XDIAddress toPeerRootXDIAddress = toPeerRootXDIArcRelation.getTargetXDIAddress(); if (toPeerRootXDIAddress.getNumXDIArcs() > 1 || ! XdiPeerRoot.isValidXDIArc(toPeerRootXDIAddress.getFirstXDIArc())) return null; return toPeerRootXDIAddress.getFirstXDIArc(); }
private static JsonElement makeGom(XDIAddress XDIaddress) { JsonElement gom; if (XDIaddress.getNumXDIArcs() == 1) { gom = makeGom(XDIaddress.getFirstXDIArc()); } else { gom = new JsonArray(); for (int i=0; i<XDIaddress.getNumXDIArcs(); i++) ((JsonArray) gom).add(makeGom(XDIaddress.getXDIArc(i))); } return gom; }
public static XDIAddress getRequestingAuthority(XDIAddress XDIaddress) { XDIaddress = XDIAddressUtil.extractXDIAddress(XDIaddress, XdiInnerRoot.class, false, true, false, false, true); if (XDIaddress == null) return null; XDIArc linkContractInnerRootXDIArc = XDIaddress.getFirstXDIArc(); if (! XdiInnerRoot.isValidXDIArc(linkContractInnerRootXDIArc)) return null; return XdiInnerRoot.getPredicateOfInnerRootXDIArc(linkContractInnerRootXDIArc); }
public static XDIAddress getAuthorizingAuthority(XDIAddress XDIaddress) { XDIaddress = XDIAddressUtil.extractXDIAddress(XDIaddress, XdiInnerRoot.class, false, true, false, false, true); if (XDIaddress == null) return null; XDIArc linkContractInnerRootXDIArc = XDIaddress.getFirstXDIArc(); if (! XdiInnerRoot.isValidXDIArc(linkContractInnerRootXDIArc)) return null; return XdiInnerRoot.getSubjectOfInnerRootXDIArc(linkContractInnerRootXDIArc); }
@Override public List<ContextNode> replaceContextNode(ContextNode contextNode) { Relation relation = contextNode.getRelation(XDIConstants.XDI_ADD_LITERAL_VARIABLE); if (relation == null) return null; XDIAddress targetXDIAddress = relation.getTargetXDIAddress(); if (targetXDIAddress.getNumXDIArcs() > 1) return null; Object replacement = this.replacements.get(targetXDIAddress.getFirstXDIArc()); ContextNode replacedContextNode = CloneUtil.cloneContextNode(contextNode); replacedContextNode.delRelations(XDIConstants.XDI_ADD_LITERAL_VARIABLE); replacedContextNode.delLiteralNode(); replacedContextNode.setLiteralNode(replacement); if (log.isTraceEnabled()) log.trace("Replaced " + targetXDIAddress + " with " + replacement); return Collections.singletonList(replacedContextNode); } }
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; }
private Graph resolveGraph(XDIAddress contextNodeXDIAddress) { XDIArc firstArc = contextNodeXDIAddress.getFirstXDIArc(); if (XdiPeerRoot.isValidXDIArc(firstArc)) { firstArc = XdiPeerRoot.getXDIAddressOfPeerRootXDIArc(firstArc).getFirstXDIArc(); } else if (XdiInnerRoot.isValidXDIArc(firstArc)) { firstArc = XdiInnerRoot.getSubjectOfInnerRootXDIArc(firstArc).getFirstXDIArc(); } Graph resolvedGraph = null; if (XDI_ARC_MSG_VARIABLE.equals(firstArc)) { resolvedGraph = this.getMessage().getContextNode().getGraph(); } else if (XDI_ARC_FROM_VARIABLE.equals(firstArc)) { resolvedGraph = this.getTargetGraph(); } else if (XDI_ARC_FROM_PEER_VARIABLE.equals(firstArc)) { resolvedGraph = this.getTargetGraph(); } else { resolvedGraph = this.getTargetGraph(); } if (log.isTraceEnabled()) log.trace("getGraph(" + contextNodeXDIAddress + ") --> " + resolvedGraph); return resolvedGraph; }
/** * Returns the inner root arc of a subject address and a predicate address. * @param subject A subject address. * @param predicate A subject address. * @return The inner root arc of the subject address and the predicate address. */ public static XDIArc createInnerRootXDIArc(XDIAddress subject, XDIAddress predicate) { if (subject.getNumXDIArcs() > 0 && XdiAbstractRoot.isValidXDIArc(subject.getFirstXDIArc())) throw new Xdi2GraphException("Cannot create an inner root XDI arc for subject " + subject + " and predicate " + predicate); return XDIArc.fromComponents( null, false, false, false, false, false, false, null, XDIXRef.fromComponents( XDIConstants.XS_ROOT, null, subject, predicate, null, null)); }
XdiInnerRoot.isValidXDIArc(relativeRelationTargetXDIAddress.getFirstXDIArc()) && XdiInnerRoot.getSubjectOfInnerRootXDIArc(relativeRelationTargetXDIAddress.getFirstXDIArc()).equals(relativeRelationContextNodeXDIAddress) && XdiInnerRoot.getPredicateOfInnerRootXDIArc(relativeRelationTargetXDIAddress.getFirstXDIArc()).equals(relationXDIAddress)) {
@Override public void executeDelOnAddress(XDIAddress targetXDIAddress, DelOperation operation, Graph operationResultGraph, ExecutionContext executionContext) throws Xdi2MessagingException { if (XDIConstants.XDI_ADD_ROOT.equals(targetXDIAddress)) { this.getGraph().clear(); } else if (targetXDIAddress.getNumXDIArcs() == 1) { this.getGraph().getRootContextNode(false).delContextNode(targetXDIAddress.getFirstXDIArc()); } else { XDIAddress parentContextNodeXDIAddress = XDIAddressUtil.parentXDIAddress(targetXDIAddress, -1); XDIArc XDIarc = targetXDIAddress.getLastXDIArc(); ContextNode parentContextNode = this.getGraph().getDeepContextNode(parentContextNodeXDIAddress, false); if (parentContextNode == null) return; if (XDIConstants.XDI_ARC_LITERAL.equals(XDIarc)) { parentContextNode.delLiteralNode(); } else { parentContextNode.delContextNode(XDIarc); } } }
assertEquals(statement.getSubject().getXDIArc(0), statement.getSubject().getFirstXDIArc()); assertEquals(statement.getSubject().getXDIArc(2), statement.getSubject().getLastXDIArc()); assertEquals(statement.getSubject().getXDIArc(0), parser.parseXDIArc("=markus"));