/** * <p> * This method creates the specified number of vertices and connect each * vertex with all other vertices which have a higher id. * </p> * <p> * <b>Beware: The commit on the graph needs to be performed by the test!</b> * </p> * * @param graph * is the graph to add vertices to. * @param numberOfVertices * is the number of vertices to be created. * @throws IOException * is thrown in case of IO issues. */ public static void createGraph(DuctileDBGraph graph, int numberOfVertices) throws IOException { DuctileDBVertex[] vertices = new DuctileDBVertex[numberOfVertices]; for (int i = 0; i < numberOfVertices; ++i) { Set<String> types = new HashSet<>(); types.add("vertex" + i); DuctileDBVertex vertex = graph.addVertex(types, new HashMap<>()); vertices[i] = vertex; } for (int i = 0; i < numberOfVertices - 1; ++i) { for (int j = i + 1; j < numberOfVertices; ++j) { graph.addEdge(vertices[i], vertices[j], "connects"); } } }
@Override public void clear(Graph graph, Configuration configuration) throws Exception { try (DuctileDBGraph ductileGraph = ((DuctileGraph) graph).getBaseGraph()) { logger.info("Delete ductile graph..."); for (DuctileDBEdge edge : ductileGraph.getEdges()) { edge.remove(); } for (DuctileDBVertex vertex : ductileGraph.getVertices()) { vertex.remove(); } ductileGraph.commit(); logger.info("Ductile graph deleted."); } }
@Override public Set<String> keys() { DuctileDBGraph baseGraph = ductileGraph.getBaseGraph(); DuctileDBGraphManager graphManager = baseGraph.createGraphManager(); return (Set<String>) graphManager.getVariableNames(); }
@Override public Iterator<Edge> edges(Object... edgeIds) { List<Edge> edges = new ArrayList<>(); if (edgeIds.length > 0) { for (Object edgeId : edgeIds) { DuctileDBEdge baseEdge = baseGraph.getEdge(convertId(edgeId)); edges.add(new DuctileEdge(baseEdge, this)); } } else { baseGraph.getEdges().forEach(edge -> edges.add(new DuctileEdge(edge, this))); } return edges.iterator(); }
public static void removeGraph(DuctileDBGraph graph) throws IOException { logger.info("Delete ductile graph..."); for (DuctileDBEdge edge : graph.getEdges()) { edge.remove(); } for (DuctileDBVertex vertex : graph.getVertices()) { vertex.remove(); } graph.commit(); DuctileDBGraphManager graphManager = graph.createGraphManager(); for (String variableName : graphManager.getVariableNames()) { graphManager.removeVariable(variableName); } DuctileDBSchemaManager schemaManager = graph.createSchemaManager(); for (String typeName : schemaManager.getDefinedTypes()) { for (ElementType elementType : ElementType.values()) { schemaManager.removeTypeDefinition(elementType, typeName); } } for (String propertyName : schemaManager.getDefinedProperties()) { for (ElementType elementType : ElementType.values()) { schemaManager.removePropertyDefinition(elementType, propertyName); } } assertEquals(DuctileDBGraphImpl.class, graph.getClass()); new DuctileDBHealthCheck((DuctileDBGraphImpl) graph).runCheck(); logger.info("Ductile graph deleted."); } }
public static void addStarWarsFiguresData(DuctileDBGraph graph) throws IOException { logger.info("Add Star Wars figures test data..."); DuctileDBVertex lukeSkywalker = graph.addVertex(); lukeSkywalker.addType(PERSON_TYPE); lukeSkywalker.addType(YETI_TYPE); DuctileDBVertex leiaOrgana = graph.addVertex(); leiaOrgana.addType(PERSON_TYPE); leiaOrgana.addType(PRINCESS_TYPE); DuctileDBVertex hanSolo = graph.addVertex(); hanSolo.addType(PERSON_TYPE); hanSolo.setProperty(FIRST_NAME_PROPERTY, "Han"); hanSolo.setProperty(LAST_NAME_PROPERTY, "Solo"); DuctileDBVertex bobaFett = graph.addVertex(); bobaFett.addType(PERSON_TYPE); bobaFett.setProperty(FIRST_NAME_PROPERTY, "Boba"); bobaFett.setProperty(LAST_NAME_PROPERTY, "Fett"); DuctileDBVertex obiWanKenobi = graph.addVertex(); obiWanKenobi.addType(PERSON_TYPE); obiWanKenobi.addType(YETI_TYPE); DuctileDBVertex r2D2 = graph.addVertex(); r2D2.addType(ROBOT_TYPE); r2D2.setProperty(FIRST_NAME_PROPERTY, "R2-D2"); DuctileDBVertex c3PO = graph.addVertex(); c3PO.addType(ROBOT_TYPE);
public static Consumer<DuctileDBGraph> assertVertexEdgeCounts(final int expectedVertexCount, final int expectedEdgeCount) { return (g) -> { assertEquals(expectedVertexCount, DuctileDBTestHelper.count(g.getVertices())); assertEquals(expectedEdgeCount, DuctileDBTestHelper.count(g.getEdges())); }; }
@Override public Iterator<Vertex> vertices(Object... vertexIds) { List<Vertex> vertices = new ArrayList<>(); if (vertexIds.length > 0) { for (Object vertexId : vertexIds) { DuctileDBVertex baseVertex = baseGraph.getVertex(convertId(vertexId)); if (baseVertex != null) { vertices.add(new DuctileVertex(baseVertex, this)); } } } else { baseGraph.getVertices().forEach(vertex -> vertices.add(new DuctileVertex(vertex, this))); } return vertices.iterator(); }
@Override protected void doCommit() throws TransactionException { try { graph.getBaseGraph().commit(); } catch (Exception ex) { throw new TransactionException(ex); } finally { open.set(false); } }
private <T extends Serializable> void checkAndCreatePropertyIndex(String name, Class<T> dataType, ElementType type, boolean unique) { try (DuctileDBGraph graph = DuctileDBGraphFactory.createGraph(connection)) { DuctileDBSchemaManager schemaManager = graph.createSchemaManager(); PropertyDefinition<T> propertyDefinition = schemaManager.getPropertyDefinition(type, name); if (propertyDefinition == null) { logger.info("Create index for property '" + name + "'."); propertyDefinition = new PropertyDefinition<T>(type, name, dataType, unique ? UniqueConstraint.TYPE : UniqueConstraint.NONE); schemaManager.defineProperty(propertyDefinition); } } catch (IOException e) { throw new XOException("Could not create property defintion.", e); } }
@Override public DuctileVertex addVertex(Object... keyValues) { ElementHelper.legalPropertyKeyValueArray(keyValues); if (ElementHelper.getIdValue(keyValues).isPresent()) throw Vertex.Exceptions.userSuppliedIdsNotSupported(); tx().readWrite(); DuctileDBVertex vertex = baseGraph.addVertex(); String[] labels = ElementHelper.getLabelValue(keyValues).orElse("").split(DuctileVertex.LABEL_DELIMINATOR); for (String label : labels) { if (!label.isEmpty()) { vertex.addType(label); } } DuctileVertex ductileVertex = new DuctileVertex(vertex, this); ElementHelper.attachProperties(ductileVertex, keyValues); return ductileVertex; }
@Override public void close() throws IOException { tx().close(); if (baseGraph != null) { baseGraph.close(); } }
@Override public DuctileDBVertex getBaseVertex() { if ((!baseVertex.getTransaction().isOpen()) && (baseVertex.getTransaction().getTransactionType() == TransactionType.THREAD_LOCAL)) { /* * The transaction is closed already, so we reconnect this vertex to * a new base vertex. This is requested by Tinkerpop tests. */ baseVertex = graph().getBaseGraph().getVertex(baseVertex.getId()); } return baseVertex; }
@Override public DuctileDBEdge getBaseEdge() { if ((!baseEdge.getTransaction().isOpen()) && (baseEdge.getTransaction().getTransactionType() == TransactionType.THREAD_LOCAL)) { /* * The transaction is closed already, so we reconnect this edge to a * new base edge. This is requested by Tinkerpop tests. */ baseEdge = graph().getBaseGraph().getEdge(baseEdge.getId()); } return baseEdge; }
@Override public void remove(String key) { DuctileDBGraph baseGraph = ductileGraph.getBaseGraph(); DuctileDBGraphManager graphManager = baseGraph.createGraphManager(); graphManager.removeVariable(key); }
@Override public <R> Optional<R> get(String key) { DuctileDBGraph baseGraph = ductileGraph.getBaseGraph(); DuctileDBGraphManager graphManager = baseGraph.createGraphManager(); return graphManager.getVariable(key); }
@Override public void set(String key, Object value) { DuctileDBGraph baseGraph = ductileGraph.getBaseGraph(); DuctileDBGraphManager graphManager = baseGraph.createGraphManager(); graphManager.setVariable(key, (Serializable) value); }