/** * Creates a context node from its components. * @param contextNodeXDIAddress The address of the context node. * @return A context node. */ public static ContextNode contextNodeFromComponents(XDIAddress contextNodeXDIAddress) { Graph graph = MemoryGraphFactory.getInstance().openGraph(); return graph.setDeepContextNode(contextNodeXDIAddress); }
/** * Copies a relation into another graph. * @param relation A relation from any graph. * @param targetGraph The target graph. * @param copyStrategy The strategy to determine what to copy. * @return The copied relation in the target graph. */ public static Relation copyRelation(Relation relation, Graph targetGraph, CopyStrategy copyStrategy) { if (relation == null) throw new NullPointerException(); if (targetGraph == null) throw new NullPointerException(); if (copyStrategy == null) copyStrategy = DEFAULT_COPY_STRATEGY; XDIAddress relationContextNodeXDIAddress = relation.getContextNode().getXDIAddress(); ContextNode targetContextNode = targetGraph.setDeepContextNode(relationContextNodeXDIAddress); return copyRelation(relation, targetContextNode, copyStrategy); }
/** * Copies a literal into another graph. * @param literalNode A literal from any graph. * @param targetGraph The target graph. * @param copyStrategy The strategy to determine what to copy. * @return The copied literal in the target graph. */ public static LiteralNode copyLiteralNode(LiteralNode literalNode, Graph targetGraph, CopyStrategy copyStrategy) { if (literalNode == null) throw new NullPointerException(); if (targetGraph == null) throw new NullPointerException(); if (copyStrategy == null) copyStrategy = DEFAULT_COPY_STRATEGY; XDIAddress literalNodeContextNodeXDIAddress = literalNode.getContextNode().getXDIAddress(); ContextNode targetContextNode = targetGraph.setDeepContextNode(literalNodeContextNodeXDIAddress); return copyLiteralNode(literalNode, targetContextNode, copyStrategy); }
/** * Creates a relation from its components. * @param contextNodeXDIAddress The address of the context node containing the relation. * @param XDIaddress The address of the relation. * @param targetXDIAddress The target context node address of the relation. * @return A relation. */ public static Relation relationFromComponents(XDIAddress contextNodeXDIAddress, XDIAddress XDIaddress, XDIAddress targetXDIAddress) { Graph graph = MemoryGraphFactory.getInstance().openGraph(); return graph.setDeepContextNode(contextNodeXDIAddress).setRelation(XDIaddress, targetXDIAddress); }
/** * Creates a literal from its components. * @param contextNodeXDIAddress The address of the context node containing the literal. * @param literalData The literal data of the literal. * @return A literal. */ public static LiteralNode literalFromComponents(XDIAddress contextNodeXDIAddress, Object literalData) { Graph graph = MemoryGraphFactory.getInstance().openGraph(); return graph.setDeepContextNode(contextNodeXDIAddress).setLiteralNode(literalData); }
/** * Factory method that finds or creates an XDI relationship link contract for a graph. * @return The XDI relationship link contract. */ public static RelationshipLinkContract findRelationshipLinkContract(Graph graph, XDIAddress authorizingAuthority, XDIAddress requestingAuthority, XDIAddress templateAuthorityAndId, XDIArc instanceXDIArc, boolean create) { XDIAddress relationshipLinkContractXDIAddress = createRelationshipLinkContractXDIAddress(authorizingAuthority, requestingAuthority, templateAuthorityAndId, instanceXDIArc); ContextNode relationshipLinkContractContextNode = create ? graph.setDeepContextNode(relationshipLinkContractXDIAddress) : graph.getDeepContextNode(relationshipLinkContractXDIAddress, true); if (relationshipLinkContractContextNode == null) return null; return new RelationshipLinkContract(XdiAbstractEntity.fromContextNode(relationshipLinkContractContextNode)); }
/** * Copies a context node into a target graph. * @param contextNode A context node from any graph. * @param targetGraph The target graph. * @param copyStrategy The strategy to determine what to copy. * @return The copied context node in the target graph. */ public static ContextNode copyContextNode(ContextNode contextNode, Graph targetGraph, CopyStrategy copyStrategy) { if (contextNode == null) throw new NullPointerException(); if (targetGraph == null) throw new NullPointerException(); if (copyStrategy == null) copyStrategy = DEFAULT_COPY_STRATEGY; ContextNode targetContextNode; XDIAddress contextNodeXDIAddress = contextNode.getXDIAddress(); if (contextNode.isRootContextNode()) { targetContextNode = targetGraph.getRootContextNode(false); copyContextNodeContents(contextNode, targetContextNode, copyStrategy); } else { targetContextNode = targetGraph.setDeepContextNode(contextNodeXDIAddress); copyContextNodeContents(contextNode, targetContextNode, copyStrategy); } return targetContextNode; }
@Override public void executeSetOnRelationStatement(XDIStatement relationStatement, SetOperation operation, Graph operationResultGraph, ExecutionContext executionContext) throws Xdi2MessagingException { XDIAddress contextNodeXDIAddress = relationStatement.getContextNodeXDIAddress(); XDIAddress relationXDIaddress = relationStatement.getRelationXDIAddress(); XDIAddress targetXDIAddress = relationStatement.getTargetXDIAddress(); this.getGraph().setDeepContextNode(contextNodeXDIAddress).setRelation(relationXDIaddress, targetXDIAddress); }
@Override public ContributorResult executeDoOnLiteralStatement(XDIAddress[] contributorAddresses, XDIAddress contributorsAddress, XDIStatement relativeTargetStatement, DoOperation operation, Graph operationResultGraph, ExecutionContext executionContext) throws Xdi2MessagingException { Object literalData = relativeTargetStatement.getLiteralData(); // check parameters if (! (literalData instanceof String)) return ContributorResult.SKIP_MESSAGING_CONTAINER; String secretToken = (String) literalData; // generate local salt and digest secret token String localSaltAndDigestSecretToken; try { localSaltAndDigestSecretToken = SecretTokens.localSaltAndDigestSecretToken(secretToken, this.getGlobalSalt()); } catch (Exception ex) { throw new Xdi2MessagingException("Problem while creating digest secret token: " + ex.getMessage(), ex, executionContext); } if (log.isDebugEnabled()) log.debug("Created digest secret token: " + localSaltAndDigestSecretToken); // add it to the graph ContextNode contextNode = this.getTargetGraph().setDeepContextNode(contributorsAddress); if (! XdiAbstractAttribute.isValid(contextNode)) throw new Xdi2MessagingException("Can only create a digest secret token on an attribute.", null, executionContext); XdiAttribute localSaltAndDigestSecretTokenXdiAttribute = XdiAbstractAttribute.fromContextNode(contextNode); localSaltAndDigestSecretTokenXdiAttribute.setLiteralString(localSaltAndDigestSecretToken); // done return ContributorResult.SKIP_MESSAGING_CONTAINER; }
/** * Returns an existing XDI message collection in this XDI message envelope, or creates a new one. * @param senderXDIAddress The sender. * @param create Whether to create an XDI message collection if it does not exist. * @return The existing or newly created XDI message collection. */ public MessageCollection getMessageCollection(XDIAddress senderXDIAddress, boolean create) { if (senderXDIAddress == null) senderXDIAddress = XDIMessagingConstants.XDI_ADD_ANONYMOUS; XDIAddress messageCollectionXDIAddress = XDIAddress.create(senderXDIAddress.toString() + XdiEntityCollection.createXDIArc(XDIMessagingConstants.XDI_ARC_MSG)); ContextNode contextNode = create ? this.getGraph().setDeepContextNode(messageCollectionXDIAddress) : this.getGraph().getDeepContextNode(messageCollectionXDIAddress, true); if (contextNode == null) return null; XdiEntityCollection xdiEntityCollection = XdiEntityCollection.fromContextNode(contextNode); return new MessageCollection(this, xdiEntityCollection); }
public void setDID(DID did) { if (did.equals(this.getDID())) return; ContextNode newContextNode = this.getContextNode().getGraph().setDeepContextNode(did.getXDIAddress()); CopyUtil.copyContextNodeContents(this.getContextNode(), newContextNode, null); this.getContextNode().delete(); this.xdiEntity = XdiAbstractEntity.fromContextNode(newContextNode); }
public void testDeleteDeep() throws Exception { Graph graph12 = this.getGraphFactory().openGraph(this.getClass().getName() + "-graph-12"); assertEquals(graph12.getRootContextNode(), graph12.getDeepContextNode(XDIConstants.XDI_ADD_ROOT)); assertEquals(graph12.getRootContextNode().getXDIAddress(), XDIConstants.XDI_ADD_ROOT); graph12.setDeepContextNode(XDIAddress.create("=markus")).setRelation(XDIAddress.create("#friend"), XDIAddress.create("=someone")); graph12.getDeepContextNode(XDIAddress.create("=markus")).delete(); graph12.setDeepContextNode(XDIAddress.create("=markus")); assertNull(graph12.getDeepContextNode(XDIAddress.create("=markus")).getRelation(XDIAddress.create("#friend"))); graph12.close(); }
public void testLinkContracts() throws Exception { Graph graph = MemoryGraphFactory.getInstance().openGraph(); ContextNode contextNode1 = graph.setDeepContextNode(XDIAddress.create("(=alice/$public)$contract")); ContextNode contextNode2 = graph.setDeepContextNode(XDIAddress.create("(=alice/=alice)$contract")); assertTrue(LinkContract.isValid(XdiAbstractEntity.fromContextNode(contextNode1))); assertTrue(LinkContract.isValid(XdiAbstractEntity.fromContextNode(contextNode2))); LinkContract linkContract1 = LinkContract.fromXdiEntity(XdiAbstractEntity.fromContextNode(contextNode1)); LinkContract linkContract2 = LinkContract.fromXdiEntity(XdiAbstractEntity.fromContextNode(contextNode2)); assertTrue(new IteratorContains<LinkContract> (LinkContracts.getAllLinkContracts(graph), linkContract1).contains()); assertTrue(new IteratorContains<LinkContract> (LinkContracts.getAllLinkContracts(graph), linkContract2).contains()); graph.close(); }
public void testImplied() throws Exception { Graph graph21 = this.getGraphFactory().openGraph(this.getClass().getName() + "-graph-21"); ContextNode webmarkus = graph21.setDeepContextNode(XDIAddress.create("=web=markus")); ContextNode animesh = graph21.setDeepContextNode(XDIAddress.create("=animesh")); Relation friend = webmarkus.setRelation(XDIAddress.create("#friend"), animesh); ContextNode value = webmarkus.setContextNode(XDIArc.create("<#name>")); LiteralNode name = value.setLiteralNode("Markus Sabadello"); ContextNode web = webmarkus.getContextNode(); assertTrue(webmarkus.getStatement().isImplied()); assertTrue(animesh.getStatement().isImplied()); assertFalse(friend.getStatement().isImplied()); assertTrue(value.getStatement().isImplied()); assertFalse(name.getStatement().isImplied()); assertTrue(web.getStatement().isImplied()); graph21.close(); }
public void testIllegalarcs() throws Exception { Graph graph20 = this.getGraphFactory().openGraph(this.getClass().getName() + "-graph-20"); ContextNode markus = graph20.setDeepContextNode(XDIAddress.create("=markus")); try { markus.setContextNode(XDIArc.create("")); fail(); } catch (Xdi2GraphException ex) { } try { markus.setRelation(XDIAddress.create(""), XDIAddress.create("=animesh")); fail(); } catch (Xdi2GraphException ex) { } try { markus.setRelation(XDIAddress.create("&"), XDIAddress.create("=animesh")); fail(); } catch (Xdi2GraphException ex) { } Equivalence.setReferenceContextNode(markus, XDIAddress.create("=!:uuid:1234")); // try { markus.setContextNode(XDIArc.create("<#email>")); fail(); } catch (Xdi2GraphException ex) { } // try { markus.setRelation(XDIAddress.create("#friend"), XDIAddress.create("=animesh")); fail(); } catch (Xdi2GraphException ex) { } // try { markus.setLiteralNode("hello"); fail(); } catch (Xdi2GraphException ex) { } Equivalence.getReferenceContextNode(markus).delete(); markus.setRelation(XDIAddress.create("#friend"), XDIAddress.create("=animesh")); // try { Equivalence.setReferenceContextNode(markus, XDIAddress.create("=!:uuid:1234")); fail(); } catch (Xdi2GraphException ex) { } graph20.close(); }
public void testCreate() throws Exception { Graph graph24 = this.getGraphFactory().openGraph(this.getClass().getName() + "-graph-24"); ContextNode root = graph24.getRootContextNode(); root.setContextNode(XDIArc.create("+a")); assertNotNull(root.getContextNode(XDIArc.create("+a"))); assertNotNull(root.getDeepContextNode(XDIAddress.create("+a"))); assertNotNull(graph24.getDeepContextNode(XDIAddress.create("+a"))); root.setContextNode(XDIArc.create("+a")); root.setDeepContextNode(XDIAddress.create("+a")); graph24.setDeepContextNode(XDIAddress.create("+a")); root.setDeepContextNode(XDIAddress.create("+a+b")); assertNotNull(root.getContextNode(XDIArc.create("+a")).getContextNode(XDIArc.create("+b"))); assertNotNull(root.getDeepContextNode(XDIAddress.create("+a+b"))); assertNotNull(graph24.getDeepContextNode(XDIAddress.create("+a+b"))); root.setContextNode(XDIArc.create("+a")); root.setDeepContextNode(XDIAddress.create("+a")); root.setDeepContextNode(XDIAddress.create("+a+b")); graph24.setDeepContextNode(XDIAddress.create("+a")); graph24.setDeepContextNode(XDIAddress.create("+a+b")); graph24.close(); }
public void testSet() throws Exception { Graph graph25 = this.getGraphFactory().openGraph(this.getClass().getName() + "-graph-25"); ContextNode root = graph25.getRootContextNode(); root.setContextNode(XDIArc.create("+a")); assertNotNull(root.getContextNode(XDIArc.create("+a"))); assertNotNull(root.getDeepContextNode(XDIAddress.create("+a"))); assertNotNull(graph25.getDeepContextNode(XDIAddress.create("+a"))); root.setContextNode(XDIArc.create("+a")); root.setDeepContextNode(XDIAddress.create("+a")); graph25.setDeepContextNode(XDIAddress.create("+a")); root.setDeepContextNode(XDIAddress.create("+a+b")); assertNotNull(root.getContextNode(XDIArc.create("+a")).getContextNode(XDIArc.create("+b"))); assertNotNull(root.getDeepContextNode(XDIAddress.create("+a+b"))); assertNotNull(graph25.getDeepContextNode(XDIAddress.create("+a+b"))); root.setContextNode(XDIArc.create("+a")); root.setDeepContextNode(XDIAddress.create("+a")); root.setDeepContextNode(XDIAddress.create("+a+b")); graph25.setDeepContextNode(XDIAddress.create("+a")); graph25.setDeepContextNode(XDIAddress.create("+a+b")); graph25.close(); }
public void testNestedRelationshipLinkContract() throws Exception { Graph graph = MemoryGraphFactory.getInstance().openGraph(); ContextNode c1 = graph.setDeepContextNode(XDIAddress.create("(=bob[$msg]*!:uuid:1234/$connect$push)(=bob/=alice)$defer$push$contract")); RelationshipLinkContract l1 = (RelationshipLinkContract) LinkContract.fromXdiEntity(XdiAbstractEntity.fromContextNode(c1)); assertNotNull(l1); assertEquals(l1.getAuthorizingAuthority(), XDIAddress.create("=bob")); assertEquals(l1.getRequestingAuthority(), XDIAddress.create("=alice")); assertEquals(l1.getTemplateAuthorityAndId(), XDIAddress.create("$defer$push")); ContextNode c2 = graph.setDeepContextNode(XDIAddress.create("(=bob[$msg]*!:uuid:1234/$connect$push)(=bob/=alice)$defer$push[$contract]*!:uuid:1234")); RelationshipLinkContract l2 = (RelationshipLinkContract) LinkContract.fromXdiEntity(XdiAbstractEntity.fromContextNode(c2)); assertNotNull(l2); assertEquals(l2.getAuthorizingAuthority(), XDIAddress.create("=bob")); assertEquals(l2.getRequestingAuthority(), XDIAddress.create("=alice")); assertEquals(l2.getTemplateAuthorityAndId(), XDIAddress.create("$defer$push")); graph.close(); }
public void testLinkContractTemplate() throws Exception { XDIAddress XDIaddress = XDIAddress.create("=markus#registration{$contract}"); Graph graph = MemoryGraphFactory.getInstance().openGraph(); ContextNode contextNode = graph.setDeepContextNode(XDIaddress); LinkContractTemplate l1 = LinkContractTemplate.findLinkContractTemplate(graph, XDIAddress.create("=markus#registration"), false); assertNotNull(l1); assertEquals(l1.getTemplateAuthorityAndId(), XDIAddress.create("=markus#registration")); LinkContractTemplate l2 = LinkContractTemplate.fromXdiEntitySingletonVariable(XdiEntitySingleton.Variable.fromContextNode(contextNode)); assertNotNull(l2); assertEquals(l2.getTemplateAuthorityAndId(), XDIAddress.create("=markus#registration")); assertEquals(l1, l2); graph.close(); }
public void testDoubleSet() throws Exception { Graph graph29 = this.getGraphFactory().openGraph(this.getClass().getName() + "-graph-29"); ContextNode c = graph29.setDeepContextNode(XDIAddress.create("=markus")); ContextNode a = graph29.setDeepContextNode(XDIAddress.create("=animesh")); c.setContextNode(XDIArc.create("<#email>")); c.setContextNode(XDIArc.create("<#email>")); c.setRelation(XDIAddress.create("#friend"), a); c.setRelation(XDIAddress.create("#friend"), a); c.setRelation(XDIAddress.create("#friend"), XDIAddress.create("=animesh")); c.setRelation(XDIAddress.create("#friend"), XDIAddress.create("=animesh")); assertEquals(c.getContextNodeCount(), 1); assertEquals(c.getAllContextNodeCount(), 1); assertEquals(c.getRelationCount(XDIAddress.create("#friend")), 1); assertEquals(c.getRelationCount(), 1); assertEquals(c.getAllRelationCount(), 1); c.delContextNode(XDIArc.create("<#email>")); c.delRelation(XDIAddress.create("#friend"), XDIAddress.create("=animesh")); assertEquals(c.getContextNodeCount(), 0); assertEquals(c.getAllContextNodeCount(), 0); assertEquals(c.getRelationCount(XDIAddress.create("#friend")), 0); assertEquals(c.getRelationCount(), 0); assertEquals(c.getAllRelationCount(), 0); graph29.close(); }