@Test public void onAddToCollectionCreatesARelation() throws Exception { final String[] types = {"person", "wwperson"}; final String typesJson = new ObjectMapper().writeValueAsString(types); final String linkingNodeWwPersonsName = "linking-node-wwpersons"; final String linkingNodePersonsName = "linking-node-persons"; final String createThisVertexName = "create-this-vertex"; final TestGraphBuilder builder = newGraph() .withVertex(linkingNodePersonsName, v -> v .withLabel(Collection.COLLECTION_ENTITIES_LABEL) .withProperty("check", linkingNodePersonsName) ) .withVertex(linkingNodeWwPersonsName, v -> v .withLabel(Collection.COLLECTION_ENTITIES_LABEL) .withProperty("check", linkingNodeWwPersonsName) ) .withVertex("other", v -> v .withLabel(Collection.COLLECTION_ENTITIES_LABEL) .withProperty("check", "other") ) .withVertex(v -> v .withLabel(Collection.DATABASE_LABEL) .withProperty(Collection.ENTITY_TYPE_NAME_PROPERTY_NAME, "person") .withProperty(Collection.COLLECTION_NAME_PROPERTY_NAME, "persons") .withOutgoingRelation(Collection.HAS_ENTITY_NODE_RELATION_NAME, linkingNodePersonsName) ) .withVertex(v -> v .withLabel(Collection.DATABASE_LABEL) .withProperty(Collection.ENTITY_TYPE_NAME_PROPERTY_NAME, "wwperson") .withProperty(Collection.COLLECTION_NAME_PROPERTY_NAME, "wwpersons") .withOutgoingRelation(Collection.HAS_ENTITY_NODE_RELATION_NAME, linkingNodeWwPersonsName) ) .withVertex(v -> v .withProperty("types", typesJson) .withTimId(createThisVertexName) .withIncomingRelation(Collection.HAS_ENTITY_RELATION_NAME, linkingNodePersonsName) ); final GraphWrapper graphWrapper = builder.wrap(); Vertex createdVertex = graphWrapper.getGraph().traversal().V().has("tim_id", createThisVertexName).next(); CollectionHasEntityRelationChangeListener instance = new CollectionHasEntityRelationChangeListener(graphWrapper); instance.onAddToCollection(forEntitytypeName("ww", "person"), Optional.empty(), createdVertex); final List<Vertex> actualLinkingNodes = Lists.newArrayList( createdVertex.vertices(Direction.IN, Collection.HAS_ENTITY_RELATION_NAME)); assertThat(actualLinkingNodes, containsInAnyOrder( likeVertex().withProperty("check", linkingNodePersonsName), likeVertex().withProperty("check", linkingNodeWwPersonsName) )); }
@Override public void onAddToCollection(Collection collection, Optional<Vertex> oldVertex, Vertex newVertex) { String type = collection.getEntityTypeName(); final GraphTraversal<Vertex, Vertex> hasEntityNode = findEntityNodeForEntityTypeName(type); if (hasEntityNode.hasNext()) { hasEntityNode.next().addEdge(Collection.HAS_ENTITY_RELATION_NAME, newVertex); } else { LOG.error(databaseInvariant, "No hasEntity node found for collection with entityTypeName {} ", type); } }
CollectionHasEntityRelationChangeListener implements ChangeListener { @Override public void onAddToCollection(Collection collection, Optional<Vertex> oldVertex, Vertex newVertex) { String type = collection.getEntityTypeName(); final GraphTraversal<Vertex, Vertex> hasEntityNode = findEntityNodeForEntityTypeName(type); if (hasEntityNode.hasNext()) { hasEntityNode.next().addEdge(Collection.HAS_ENTITY_RELATION_NAME, newVertex); } else { LOG.error(databaseInvariant, "No hasEntity node found for collection with entityTypeName {} ", type); } } }
CollectionHasEntityRelationChangeListener implements ChangeListener { @Override public void onAddToCollection(Collection collection, Optional<Vertex> oldVertex, Vertex newVertex) { String type = collection.getEntityTypeName(); final GraphTraversal<Vertex, Vertex> hasEntityNode = findEntityNodeForEntityTypeName(type); if (hasEntityNode.hasNext()) { hasEntityNode.next().addEdge(Collection.HAS_ENTITY_RELATION_NAME, newVertex); } else { LOG.error(databaseInvariant, "No hasEntity node found for collection with entityTypeName {} ", type); } } CollectionHasEntityRelationChangeListener(GraphWrapper graphWrapper); }
CollectionHasEntityRelationChangeListener implements ChangeListener { @Override public void onAddToCollection(Collection collection, Optional<Vertex> oldVertex, Vertex newVertex) { String type = collection.getEntityTypeName(); final GraphTraversal<Vertex, Vertex> hasEntityNode = findEntityNodeForEntityTypeName(type); if (hasEntityNode.hasNext()) { hasEntityNode.next().addEdge(Collection.HAS_ENTITY_RELATION_NAME, newVertex); } else { LOG.error(databaseInvariant, "No hasEntity node found for collection with entityTypeName {} ", type); } } CollectionHasEntityRelationChangeListener(GraphWrapper graphWrapper); @Override void onCreate(Collection collection, Vertex vertex); @Override void onPropertyUpdate(Collection collection, Optional<Vertex> ignored, Vertex vertexToUpdate); @Override void onRemoveFromCollection(Collection collection, Optional<Vertex> oldVertex, Vertex newVertex); @Override void onAddToCollection(Collection collection, Optional<Vertex> oldVertex, Vertex newVertex); @Override void onCreateEdge(Collection collection, Edge edge); @Override void onEdgeUpdate(Collection collection, Edge oldEdge, Edge newEdge); }
CollectionHasEntityRelationChangeListener implements ChangeListener { @Override public void onAddToCollection(Collection collection, Optional<Vertex> oldVertex, Vertex newVertex) { String type = collection.getEntityTypeName(); final GraphTraversal<Vertex, Vertex> hasEntityNode = findEntityNodeForEntityTypeName(type); if (hasEntityNode.hasNext()) { hasEntityNode.next().addEdge(Collection.HAS_ENTITY_RELATION_NAME, newVertex); } else { LOG.error(databaseInvariant, "No hasEntity node found for collection with entityTypeName {} ", type); } } CollectionHasEntityRelationChangeListener(GraphWrapper graphWrapper); @Override void onCreate(Collection collection, Vertex vertex); @Override void onPropertyUpdate(Collection collection, Optional<Vertex> ignored, Vertex vertexToUpdate); @Override void onRemoveFromCollection(Collection collection, Optional<Vertex> oldVertex, Vertex newVertex); @Override void onAddToCollection(Collection collection, Optional<Vertex> oldVertex, Vertex newVertex); @Override void onCreateEdge(Collection collection, Edge edge); @Override void onEdgeUpdate(Collection collection, Edge oldEdge, Edge newEdge);  }