Java源码示例:com.arangodb.model.GraphCreateOptions

示例1
@Test
public void smartGraph() throws InterruptedException, ExecutionException {
    assumeTrue(isCluster());
    assumeTrue(isEnterprise());
    for (final String collection : new String[]{EDGE_COL_1, EDGE_COL_2, VERTEX_COL_1, VERTEX_COL_2,
            VERTEX_COL_3, VERTEX_COL_4}) {
        if (db.collection(collection).exists().get()) {
            db.collection(collection).drop().get();
        }
    }
    final Collection<EdgeDefinition> edgeDefinitions = new ArrayList<>();
    edgeDefinitions.add(new EdgeDefinition().collection(EDGE_COL_1).from(VERTEX_COL_1).to(VERTEX_COL_2));
    edgeDefinitions
            .add(new EdgeDefinition().collection(EDGE_COL_2).from(VERTEX_COL_2).to(VERTEX_COL_1, VERTEX_COL_3));
    final GraphEntity graph = db.createGraph(GRAPH_NAME + "_smart", edgeDefinitions,
            new GraphCreateOptions().isSmart(true).smartGraphAttribute("test").replicationFactor(REPLICATION_FACTOR)
                    .numberOfShards(NUMBER_OF_SHARDS))
            .get();
    assertThat(graph, is(notNullValue()));
    assertThat(graph.getIsSmart(), is(true));
    assertThat(graph.getSmartGraphAttribute(), is("test"));
    assertThat(graph.getNumberOfShards(), is(2));
    if (db.graph(GRAPH_NAME + "_smart").exists().get()) {
        db.graph(GRAPH_NAME + "_smart").drop().get();
    }
}
 
示例2
@Test
public void smartGraph() {
    assumeTrue(isEnterprise());
    assumeTrue(isCluster());

    final Collection<EdgeDefinition> edgeDefinitions = new ArrayList<>();
    edgeDefinitions.add(new EdgeDefinition().collection("smartGraph-edge-" + rnd()).from("smartGraph-vertex-" + rnd()).to("smartGraph-vertex-" + rnd()));

    String graphId = GRAPH_NAME + rnd();
    final GraphEntity g = db.createGraph(graphId, edgeDefinitions, new GraphCreateOptions().isSmart(true).smartGraphAttribute("test").numberOfShards(2));

    assertThat(g, is(notNullValue()));
    assertThat(g.getIsSmart(), is(true));
    assertThat(g.getSmartGraphAttribute(), is("test"));
    assertThat(g.getNumberOfShards(), is(2));
}
 
示例3
@Test
public void smartGraph() throws InterruptedException, ExecutionException {
    assumeTrue(isCluster());
    assumeTrue(isEnterprise());
    for (final String collection : new String[]{EDGE_COL_1, EDGE_COL_2, VERTEX_COL_1, VERTEX_COL_2,
            VERTEX_COL_3, VERTEX_COL_4}) {
        if (db.collection(collection).exists().get()) {
            db.collection(collection).drop().get();
        }
    }
    final Collection<EdgeDefinition> edgeDefinitions = new ArrayList<>();
    edgeDefinitions.add(new EdgeDefinition().collection(EDGE_COL_1).from(VERTEX_COL_1).to(VERTEX_COL_2));
    edgeDefinitions
            .add(new EdgeDefinition().collection(EDGE_COL_2).from(VERTEX_COL_2).to(VERTEX_COL_1, VERTEX_COL_3));
    final GraphEntity graph = db.createGraph(GRAPH_NAME + "_smart", edgeDefinitions,
            new GraphCreateOptions().isSmart(true).smartGraphAttribute("test").replicationFactor(REPLICATION_FACTOR)
                    .numberOfShards(NUMBER_OF_SHARDS))
            .get();
    assertThat(graph, is(notNullValue()));
    assertThat(graph.getIsSmart(), is(true));
    assertThat(graph.getSmartGraphAttribute(), is("test"));
    assertThat(graph.getNumberOfShards(), is(2));
    if (db.graph(GRAPH_NAME + "_smart").exists().get()) {
        db.graph(GRAPH_NAME + "_smart").drop().get();
    }
}
 
示例4
/**
 * Create a new graph.
 *
 * @param name 						the name of the new graph
 * @param edgeDefinitions			the edge definitions for the graph
 * @param options 					additional graph options
 * @return the arango graph
 * @throws ArangoDBGraphException 	If the graph can not be created
 */

public ArangoGraph createGraph(String name,
       List<EdgeDefinition> edgeDefinitions,
	GraphCreateOptions options)
	throws ArangoDBGraphException {
	logger.info("Creating graph {}", name);
	try {
		logger.info("Creating graph in database.");
		db.createGraph(name, edgeDefinitions, options);
	} catch (ArangoDBException e) {
           logger.info("Error creating graph in database.", e);
           throw ArangoDBExceptions.getArangoDBException(e);
       }
	ArangoGraph g = db.graph(name);
	return g;
}
 
示例5
@BeforeClass
public static void setup() throws InterruptedException, ExecutionException {
    if (db.graph(GRAPH_NAME).exists().get()) {
        db.graph(GRAPH_NAME).drop().get();
    }
    final Collection<EdgeDefinition> edgeDefinitions = new ArrayList<>();
    edgeDefinitions.add(new EdgeDefinition().collection(EDGE_COL_1).from(VERTEX_COL_1).to(VERTEX_COL_2));
    edgeDefinitions
            .add(new EdgeDefinition().collection(EDGE_COL_2).from(VERTEX_COL_2).to(VERTEX_COL_1, VERTEX_COL_3));
    final GraphCreateOptions options = new GraphCreateOptions();
    if (arangoDB.getRole().get() != ServerRole.SINGLE) {
        options.replicationFactor(REPLICATION_FACTOR).numberOfShards(NUMBER_OF_SHARDS);
    }
    db.createGraph(GRAPH_NAME, edgeDefinitions, options).get();
}
 
示例6
@Test
public void createWithReplicationAndMinReplicationFactor() throws ExecutionException, InterruptedException {
    assumeTrue(isAtLeastVersion(3, 5));
    assumeTrue(isCluster());
    final Collection<EdgeDefinition> edgeDefinitions = new ArrayList<>();
    final GraphEntity graph = db.createGraph(GRAPH_NAME + "_1", edgeDefinitions, new GraphCreateOptions().isSmart(true).replicationFactor(2).minReplicationFactor(2)).get();
    assertThat(graph, is(notNullValue()));
    assertThat(graph.getName(), is(GRAPH_NAME + "_1"));
    assertThat(graph.getMinReplicationFactor(), is(2));
    assertThat(graph.getReplicationFactor(), is(2));
    db.graph(GRAPH_NAME + "_1").drop();
}
 
示例7
@BeforeClass
public static void init() {
    final Collection<EdgeDefinition> edgeDefinitions = Arrays.asList(ed1, ed2);

    final GraphCreateOptions options = new GraphCreateOptions()
            .replicationFactor(REPLICATION_FACTOR)
            .numberOfShards(NUMBER_OF_SHARDS);

    BaseTest.initGraph(GRAPH_NAME, edgeDefinitions, options);
}
 
示例8
@Test
public void createWithReplicationAndMinReplicationFactor() {
    assumeTrue(isAtLeastVersion(3, 5));
    assumeTrue(isCluster());

    final Collection<EdgeDefinition> edgeDefinitions = new ArrayList<>();
    final GraphEntity graph = db.createGraph(GRAPH_NAME + "_1", edgeDefinitions, new GraphCreateOptions().isSmart(true).replicationFactor(2).minReplicationFactor(2));
    assertThat(graph, is(notNullValue()));
    assertThat(graph.getName(), is(GRAPH_NAME + "_1"));
    assertThat(graph.getMinReplicationFactor(), is(2));
    assertThat(graph.getReplicationFactor(), is(2));
    db.graph(GRAPH_NAME + "_1").drop();
}
 
示例9
@BeforeClass
public static void setup() throws InterruptedException, ExecutionException {
    if (db.graph(GRAPH_NAME).exists().get()) {
        db.graph(GRAPH_NAME).drop().get();
    }
    final Collection<EdgeDefinition> edgeDefinitions = new ArrayList<>();
    edgeDefinitions.add(new EdgeDefinition().collection(EDGE_COL_1).from(VERTEX_COL_1).to(VERTEX_COL_2));
    edgeDefinitions
            .add(new EdgeDefinition().collection(EDGE_COL_2).from(VERTEX_COL_2).to(VERTEX_COL_1, VERTEX_COL_3));
    final GraphCreateOptions options = new GraphCreateOptions();
    if (arangoDB.getRole().get() != ServerRole.SINGLE) {
        options.replicationFactor(REPLICATION_FACTOR).numberOfShards(NUMBER_OF_SHARDS);
    }
    db.createGraph(GRAPH_NAME, edgeDefinitions, options).get();
}
 
示例10
@Test
public void createWithReplicationAndMinReplicationFactor() throws ExecutionException, InterruptedException {
    assumeTrue(isAtLeastVersion(3, 5));
    assumeTrue(isCluster());
    final Collection<EdgeDefinition> edgeDefinitions = new ArrayList<>();
    final GraphEntity graph = db.createGraph(GRAPH_NAME + "_1", edgeDefinitions, new GraphCreateOptions().isSmart(true).replicationFactor(2).minReplicationFactor(2)).get();
    assertThat(graph, is(notNullValue()));
    assertThat(graph.getName(), is(GRAPH_NAME + "_1"));
    assertThat(graph.getMinReplicationFactor(), is(2));
    assertThat(graph.getReplicationFactor(), is(2));
    db.graph(GRAPH_NAME + "_1").drop();
}
 
示例11
private static void checkGraphVertexCollections(List<String> verticesCollectionNames, ArangoGraph graph, GraphCreateOptions options) {
	List<String> allVertexCollections = new ArrayList<>(verticesCollectionNames);
	final Collection<String> orphanCollections = options.getOrphanCollections();
	if (orphanCollections != null) {
		allVertexCollections.addAll(orphanCollections);
	}
	if (!graph.getVertexCollections().containsAll(allVertexCollections)) {
		Set<String> avc = new HashSet<>(allVertexCollections);
		avc.removeAll(graph.getVertexCollections());
		throw new ArangoDBGraphException("Not all declared vertex names appear in the graph. Missing " + avc);
	}
}
 
示例12
@Override
public CompletableFuture<GraphEntity> createGraph(
	final Collection<EdgeDefinition> edgeDefinitions,
	final GraphCreateOptions options) {
	return db().createGraph(name(), edgeDefinitions, options);
}
 
示例13
@Override
public GraphEntity create(final Collection<EdgeDefinition> edgeDefinitions, final GraphCreateOptions options)
        throws ArangoDBException {
    return db().createGraph(name(), edgeDefinitions, options);
}
 
示例14
@Override
public CompletableFuture<GraphEntity> createGraph(
        final Collection<EdgeDefinition> edgeDefinitions,
        final GraphCreateOptions options) {
    return db().createGraph(name(), edgeDefinitions, options);
}
 
示例15
static void initGraph(String name, Collection<EdgeDefinition> edgeDefinitions, GraphCreateOptions options) {
    ArangoDatabase db = initDB();
    db.createGraph(name, edgeDefinitions, options);
}
 
示例16
/**
 * Creates a Graph (simple configuration).
 *
 * @param configuration 	the Apache Commons configuration
 */

public ArangoDBGraph(Configuration configuration) {

	logger.info("Creating new ArangoDB Graph from configuration");
	Configuration arangoConfig = configuration.subset(PROPERTY_KEY_PREFIX);
	vertexCollections = arangoConfig.getList(PROPERTY_KEY_VERTICES).stream()
			.map(String.class::cast)
			.collect(Collectors.toList());
	edgeCollections = arangoConfig.getList(PROPERTY_KEY_EDGES).stream()
			.map(String.class::cast)
			.collect(Collectors.toList());
	relations = arangoConfig.getList(PROPERTY_KEY_RELATIONS).stream()
			.map(String.class::cast)
			.collect(Collectors.toList());
	name = arangoConfig.getString(PROPERTY_KEY_GRAPH_NAME);
	checkValues(arangoConfig.getString(PROPERTY_KEY_DB_NAME), name, vertexCollections, edgeCollections, relations);
	if (CollectionUtils.isEmpty(vertexCollections)) {
		schemaless = true;
		vertexCollections.add(DEFAULT_VERTEX_COLLECTION);
	}
	if (CollectionUtils.isEmpty(edgeCollections)) {
		edgeCollections.add(DEFAULT_EDGE_COLLECTION);
	}
	shouldPrefixCollectionNames = arangoConfig.getBoolean(PROPERTY_KEY_SHOULD_PREFIX_COLLECTION_NAMES, true);

	Properties arangoProperties = ConfigurationConverter.getProperties(arangoConfig);
	int batchSize = 0;
	client = new ArangoDBGraphClient(this, arangoProperties, arangoConfig.getString(PROPERTY_KEY_DB_NAME),
			batchSize, shouldPrefixCollectionNames);

	ArangoGraph graph = client.getArangoGraph();
       GraphCreateOptions options = new  GraphCreateOptions();
       // FIXME Cant be in orphan collections because it will be deleted with graph?
       // options.orphanCollections(GRAPH_VARIABLES_COLLECTION);
	final List<String> prefVCols = vertexCollections.stream().map(this::getPrefixedCollectioName).collect(Collectors.toList());
	final List<String> prefECols = edgeCollections.stream().map(this::getPrefixedCollectioName).collect(Collectors.toList());
	final List<EdgeDefinition> edgeDefinitions = new ArrayList<>();
	if (relations.isEmpty()) {
		logger.info("No relations, creating default ones.");
		edgeDefinitions.addAll(ArangoDBUtil.createDefaultEdgeDefinitions(prefVCols, prefECols));
	} else {
		for (String value : relations) {
			EdgeDefinition ed = ArangoDBUtil.relationPropertyToEdgeDefinition(this, value);
			edgeDefinitions.add(ed);
		}
	}
	edgeDefinitions.add(ArangoDBUtil.createPropertyEdgeDefinitions(this, prefVCols, prefECols));

       if (graph.exists()) {
           ArangoDBUtil.checkGraphForErrors(prefVCols, prefECols, edgeDefinitions, graph, options);
           ArangoDBGraphVariables iter = client.getGraphVariables();
           if (iter == null) {
           	throw new ArangoDBGraphException("Existing graph does not have a Variables collection");
           }
       }
       else {
       	graph = client.createGraph(name, edgeDefinitions, options);
       	this.name = graph.name();
		ArangoDBGraphVariables variables = new ArangoDBGraphVariables(name, GRAPH_VARIABLES_COLLECTION, this);
		client.insertGraphVariables(variables);
	}
	this.configuration = configuration;
}
 
示例17
/**
 * Validate if an existing graph is correctly configured to handle the desired vertex, edges 
 * and relations.
 *
 * @param verticesCollectionNames    The names of collections for nodes
 * @param edgesCollectionNames        The names of collections for edges
 * @param requiredDefinitions                The description of edge definitions
 * @param graph                    the graph
 * @param options                    The options used to create the graph
 * @throws ArangoDBGraphException 	If the graph settings do not match the configuration information
 */

public static void checkGraphForErrors(
	List<String> verticesCollectionNames,
	List<String> edgesCollectionNames,
	List<EdgeDefinition> requiredDefinitions,
	ArangoGraph graph,
	GraphCreateOptions options) throws ArangoDBGraphException {

	checkGraphVertexCollections(verticesCollectionNames, graph, options);

	GraphEntity ge = graph.getInfo();
       Collection<EdgeDefinition> graphEdgeDefinitions = ge.getEdgeDefinitions();
       if (CollectionUtils.isEmpty(requiredDefinitions)) {
       	// If no relations are defined, vertices and edges can only have one value
       	if ((verticesCollectionNames.size() != 1) || (edgesCollectionNames.size() != 1)) {
       		throw new ArangoDBGraphException("No relations where specified but more than one vertex/edge where defined.");
       	}
       	if (graphEdgeDefinitions.size() != 2) {		// There is always a edgeDefinition for ELEMENT_HAS_PROPERTIES
       		throw new ArangoDBGraphException("No relations where specified but the graph has more than one EdgeDefinition.");
   		}
       }
	Map<String, EdgeDefinition> eds = requiredDefinitions.stream().collect(Collectors.toMap(EdgeDefinition::getCollection, ed -> ed));

       Iterator<EdgeDefinition> it = graphEdgeDefinitions.iterator();
       while (it.hasNext()) {
       	EdgeDefinition existing = it.next();
       	if (eds.containsKey(existing.getCollection())) {
       		EdgeDefinition requiredEdgeDefinition = eds.remove(existing.getCollection());
       		HashSet<String> existingSet = new HashSet<String>(existing.getFrom());
       		HashSet<String> requiredSet = new HashSet<String>(requiredEdgeDefinition.getFrom());
       		if (!existingSet.equals(requiredSet)) {
       			throw new ArangoDBGraphException(String.format("The from collections dont match for edge definition %s", existing.getCollection()));
       		}
       		existingSet.clear();
       		existingSet.addAll(existing.getTo());
       		requiredSet.clear();
       		requiredSet.addAll(requiredEdgeDefinition.getTo());
       		if (!existingSet.equals(requiredSet)) {
       			throw new ArangoDBGraphException(String.format("The to collections dont match for edge definition %s", existing.getCollection()));
       		}
       	} else {
       		throw new ArangoDBGraphException(String.format("The graph has a surplus edge definition %s", edgeDefinitionString(existing)));
       	}
       }
}
 
示例18
/**
 * Creates the graph in the graph module. The creation of a graph requires the name of the graph and a definition of
 * its edges.
 * 
 * @see <a href="https://docs.arangodb.com/current/HTTP/Gharial/Management.html#create-a-graph">API
 *      Documentation</a>
 * @param edgeDefinitions
 *            An array of definitions for the edge
 * @param options
 *            Additional options, can be null
 * @return information about the graph
 */
CompletableFuture<GraphEntity> createGraph(
	final Collection<EdgeDefinition> edgeDefinitions,
	final GraphCreateOptions options);
 
示例19
/**
 * Creates the graph in the graph module. The creation of a graph requires the name of the graph and a definition of
 * its edges.
 *
 * @param edgeDefinitions An array of definitions for the edge
 * @param options         Additional options, can be null
 * @return information about the graph
 * @throws ArangoDBException
 * @see <a href="https://www.arangodb.com/docs/stable/http/gharial-management.html#create-a-graph">API
 * Documentation</a>
 */
GraphEntity create(Collection<EdgeDefinition> edgeDefinitions, GraphCreateOptions options) throws ArangoDBException;
 
示例20
/**
 * Creates the graph in the graph module. The creation of a graph requires the name of the graph and a definition of
 * its edges.
 *
 * @param edgeDefinitions An array of definitions for the edge
 * @param options         Additional options, can be null
 * @return information about the graph
 * @see <a href="https://www.arangodb.com/docs/stable/http/gharial-management.html#create-a-graph">API
 * Documentation</a>
 */
CompletableFuture<GraphEntity> createGraph(
        final Collection<EdgeDefinition> edgeDefinitions,
        final GraphCreateOptions options);