Class TinkerGraph

  • All Implemented Interfaces:
    AutoCloseable, Graph, Host

    public final class TinkerGraph
    extends Object
    implements Graph
    An in-memory (with optional persistence on calls to close()), reference implementation of the property graph interfaces provided by TinkerPop.
    Author:
    Marko A. Rodriguez (http://markorodriguez.com), Stephen Mallette (http://stephen.genoprime.com)
    • Method Detail

      • open

        public static TinkerGraph open()
        Open a new TinkerGraph instance.

        Reference Implementation Help: If a Graph implementation does not require a Configuration (or perhaps has a default configuration) it can choose to implement a zero argument open() method. This is an optional constructor method for TinkerGraph. It is not enforced by the Gremlin Test Suite.

      • open

        public static TinkerGraph open​(org.apache.commons.configuration2.Configuration configuration)
        Open a new TinkerGraph instance.

        Reference Implementation Help: This method is the one use by the GraphFactory to instantiate Graph instances. This method must be overridden for the Structure Test Suite to pass. Implementers have latitude in terms of how exceptions are handled within this method. Such exceptions will be considered implementation specific by the test suite as all test generate graph instances by way of GraphFactory. As such, the exceptions get generalized behind that facade and since GraphFactory is the preferred method to opening graphs it will be consistent at that level.

        Parameters:
        configuration - the configuration for the instance
        Returns:
        a newly opened Graph
      • addVertex

        public Vertex addVertex​(Object... keyValues)
        Description copied from interface: Graph
        Add a Vertex to the graph given an optional series of key/value pairs. These key/values must be provided in an even number where the odd numbered arguments are String property keys and the even numbered arguments are the related property values.
        Specified by:
        addVertex in interface Graph
        Parameters:
        keyValues - The key/value pairs to turn into vertex properties
        Returns:
        The newly created vertex
      • compute

        public <C extends GraphComputer> C compute​(Class<C> graphComputerClass)
        Description copied from interface: Graph
        Declare the GraphComputer to use for OLAP operations on the graph. If the graph does not support graph computer then an UnsupportedOperationException is thrown.
        Specified by:
        compute in interface Graph
        Parameters:
        graphComputerClass - The graph computer class to use.
        Returns:
        A graph computer for processing this graph
      • compute

        public GraphComputer compute()
        Description copied from interface: Graph
        Generate a GraphComputer using the default engine of the underlying graph system. This is a shorthand method for the more involved method that uses Graph.compute(Class).
        Specified by:
        compute in interface Graph
        Returns:
        A default graph computer
      • variables

        public Graph.Variables variables()
        Description copied from interface: Graph
        A collection of global Graph.Variables associated with the graph. Variables are used for storing metadata about the graph.
        Specified by:
        variables in interface Graph
        Returns:
        The variables associated with this graph
      • io

        public <I extends Io> I io​(Io.Builder<I> builder)
        Description copied from interface: Graph
        Construct a particular Io implementation for reading and writing the Graph and other data. End-users will "select" the Io implementation that they want to use by supplying the Io.Builder that constructs it. In this way, Graph vendors can supply their IoRegistry to that builder thus allowing for custom serializers to be auto-configured into the Io instance. Registering custom serializers is particularly useful for those graphs that have complex types for Element identifiers.

        For those graphs that do not need to register any custom serializers, the default implementation should suffice. If the default is overridden, take care to register the current graph via the Io.Builder.graph(Graph) method.
        Specified by:
        io in interface Graph
      • clear

        public void clear()
      • close

        public void close()
        This method only has an effect if the GREMLIN_TINKERGRAPH_GRAPH_LOCATION is set, in which case the data in the graph is persisted to that location. This method may be called multiple times and does not release resources.
        Specified by:
        close in interface AutoCloseable
        Specified by:
        close in interface Graph
      • tx

        public Transaction tx()
        Description copied from interface: Graph
        Configure and control the transactions for those graphs that support this feature.
        Specified by:
        tx in interface Graph
      • configuration

        public org.apache.commons.configuration2.Configuration configuration()
        Description copied from interface: Graph
        Get the Configuration associated with the construction of this graph. Whatever configuration was passed to GraphFactory.open(Configuration) is what should be returned by this method.
        Specified by:
        configuration in interface Graph
        Returns:
        the configuration used during graph construction.
      • vertices

        public Iterator<Vertex> vertices​(Object... vertexIds)
        Description copied from interface: Graph
        Get the Vertex objects in this graph with the provided vertex ids or Vertex objects themselves. If no ids are provided, get all vertices. Note that a vertex identifier does not need to correspond to the actual id used in the graph. It needs to be a bit more flexible than that in that given the Graph.Features around id support, multiple arguments might be applicable here.

        If the graph return true for Graph.Features.ElementFeatures.supportsNumericIds() then it should support filters as with:

        • g.vertices(v)
        • g.vertices(v.id())
        • g.vertices(1)
        • g.vertices(1L)
        • g.vertices(1.0d)
        • g.vertices(1.0f)
        • g.vertices("1")

        If the graph return true for Graph.Features.ElementFeatures.supportsCustomIds() ()} then it should support filters as with:

        • g.vertices(v)
        • g.vertices(v.id())
        • g.vertices(v.id().toString())

        If the graph return true for Graph.Features.ElementFeatures.supportsAnyIds() ()} then it should support filters as with:

        • g.vertices(v)
        • g.vertices(v.id())

          If the graph return true for Graph.Features.ElementFeatures.supportsStringIds() ()} then it should support filters as with:

        • g.vertices(v)
        • g.vertices(v.id().toString())
        • g.vertices("id")

        If the graph return true for Graph.Features.ElementFeatures.supportsStringIds() ()} then it should support filters as with:

        • g.vertices(v)
        • g.vertices(v.id().toString())
        • g.vertices("id")
        Specified by:
        vertices in interface Graph
        Parameters:
        vertexIds - the ids of the vertices to get
        Returns:
        an Iterator of vertices that match the provided vertex ids
      • edges

        public Iterator<Edge> edges​(Object... edgeIds)
        Description copied from interface: Graph
        Get the Edge objects in this graph with the provided edge ids or Edge objects. If no ids are provided, get all edges. Note that an edge identifier does not need to correspond to the actual id used in the graph. It needs to be a bit more flexible than that in that given the Graph.Features around id support, multiple arguments might be applicable here.

        If the graph return true for Graph.Features.ElementFeatures.supportsNumericIds() then it should support filters as with:

        • g.edges(e)
        • g.edges(e.id())
        • g.edges(1)
        • g.edges(1L)
        • g.edges(1.0d)
        • g.edges(1.0f)
        • g.edges("1")

        If the graph return true for Graph.Features.ElementFeatures.supportsCustomIds() ()} then it should support filters as with:

        • g.edges(e)
        • g.edges(e.id())
        • g.edges(e.id().toString())

        If the graph return true for Graph.Features.ElementFeatures.supportsAnyIds() ()} then it should support filters as with:

        • g.edges(e)
        • g.edges(e.id())

        If the graph return true for Graph.Features.ElementFeatures.supportsStringIds() ()} then it should support filters as with:

        • g.edges(e)
        • g.edges(e.id().toString())
        • g.edges("id")
        Specified by:
        edges in interface Graph
        Parameters:
        edgeIds - the ids of the edges to get
        Returns:
        an Iterator of edges that match the provided edge ids
      • features

        public Graph.Features features()
        Return TinkerGraph feature set.

        Reference Implementation Help: Implementers only need to implement features for which there are negative or instance configured features. By default, all Graph.Features return true.

        Specified by:
        features in interface Graph
      • createIndex

        public <E extends Element> void createIndex​(String key,
                                                    Class<E> elementClass)
        Create an index for said element class (Vertex or Edge) and said property key. Whenever an element has the specified key mutated, the index is updated. When the index is created, all existing elements are indexed to ensure that they are captured by the index.
        Type Parameters:
        E - The type of the element class
        Parameters:
        key - the property key to index
        elementClass - the element class to index
      • dropIndex

        public <E extends Element> void dropIndex​(String key,
                                                  Class<E> elementClass)
        Drop the index for the specified element class (Vertex or Edge) and key.
        Type Parameters:
        E - The type of the element class
        Parameters:
        key - the property key to stop indexing
        elementClass - the element class of the index to drop
      • getIndexedKeys

        public <E extends ElementSet<String> getIndexedKeys​(Class<E> elementClass)
        Return all the keys currently being index for said element class (Vertex or Edge).
        Type Parameters:
        E - The type of the element class
        Parameters:
        elementClass - the element class to get the indexed keys for
        Returns:
        the set of keys currently being indexed