blob: bcb4a8eb4e5a8abad3072d8ea00dd0e26b6cf792 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.tinkerpop.gremlin.server;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
import org.apache.tinkerpop.gremlin.structure.Graph;
import javax.script.Bindings;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
/**
* The {@link GraphManager} interface allows for reference tracking of Graph references through
* a {@code Map<String, Graph>}; the interface plugs into the lifeline of gremlin script
* executions, meaning that commit() and rollback() will be called on all graphs stored in the
* graph reference tracker at the end of the script executions; you may want to implement
* this interface if you want to define a custom graph instantiation/closing mechanism; note that
* the interface also defines similar features for {@link TraversalSource} objects.
*/
public interface GraphManager {
/**
* Get a list of the {@link Graph} instances and their binding names.
*
* @return a {@code Map} where the key is the name of the {@link Graph} and the value is the {@link Graph} itself
* @deprecated As of release 3.2.5, replaced by a combination of {@link #getGraphNames()} and
* {@link #getGraph(String)} - note that the expectation is this method return an immutable {@code Map} which was
* not the expectation prior to 3.2.5.
*/
@Deprecated
public Map<String, Graph> getGraphs();
/**
* Get a {@link Set} of {@link String} graphNames corresponding to names stored in the graph's
* reference tracker.
*/
public Set<String> getGraphNames();
/**
* Get {@link Graph} instance whose name matches {@code graphName}.
*
* @return {@link Graph} if exists, else null
*/
public Graph getGraph(final String graphName);
/**
* Add or update the specified {@link Graph} with the specified name to {@code Map<String, Graph>} .
*/
public void putGraph(final String graphName, final Graph g);
/**
* Get a list of the {@link TraversalSource} instances and their binding names
*
* @return a {@link Map} where the key is the name of the {@link TraversalSource} and the value is the
* {@link TraversalSource} itself
* @deprecated As of release 3.2.5, replaced by a combination of {@link #getTraversalSourceNames()} and
* {@link #getTraversalSource(String)} - note that the expectation is this method return an immutable
* {@code Map} which was not the expectation prior to 3.2.5.
*/
@Deprecated
public Map<String, TraversalSource> getTraversalSources();
/**
* Get a {@code Set} of the names of the the stored {@link TraversalSource} instances.
*/
public Set<String> getTraversalSourceNames();
/**
* Get {@link TraversalSource} instance whose name matches {@code traversalSourceName}
*
* @return {@link TraversalSource} if exists, else null
*/
public TraversalSource getTraversalSource(final String traversalSourceName);
/**
* Add or update the specified {@link TraversalSource} with the specified name.
*/
public void putTraversalSource(final String tsName, final TraversalSource ts);
/**
* Remove {@link TraversalSource} by name.
*/
public TraversalSource removeTraversalSource(final String tsName);
/**
* Get the {@link Graph} and {@link TraversalSource} list as a set of bindings.
*/
public Bindings getAsBindings();
/**
* Rollback transactions across all {@link Graph} objects.
*/
public void rollbackAll();
/**
* Selectively rollback transactions on the specified graphs or the graphs of traversal sources.
*/
public void rollback(final Set<String> graphSourceNamesToCloseTxOn);
/**
* Commit transactions across all {@link Graph} objects.
*/
public void commitAll();
/**
* Selectively commit transactions on the specified graphs or the graphs of traversal sources.
*/
public void commit(final Set<String> graphSourceNamesToCloseTxOn);
/**
* Implementation that allows for custom graph-opening implementations; if the {@code Map}
* tracking graph references has a {@link Graph} object corresponding to the graph name, then we return that
* {@link Graph}-- otherwise, we use the custom {@code Function} to instantiate a new {@link Graph}, add it to
* the {@link Map} tracking graph references, and return said {@link Graph}.
*/
public Graph openGraph(final String graphName, final Function<String, Graph> supplier);
/**
* Implementation that allows for custom graph closing implementations; this method should remove the {@link Graph}
* from the {@code GraphManager}.
*/
public Graph removeGraph(final String graphName) throws Exception;
}