// Path: src/main/java/co/indexia/antiquity/graph/identifierBehavior/GraphIdentifierBehavior.java
// public interface GraphIdentifierBehavior<V extends Comparable<V>> {
//     /**
//      * Get the latest(current) graph version.
//      * 
//      * <p>
//      * Graph latest version is stored in the root historic vertex.
//      * <p>
//      * 
//      * @see co.indexia.antiquity.graph.ActiveVersionedGraph#getRootVertex()
//      * 
//      * @return The latest graph version.
//      */
//     public V getLatestGraphVersion();
// 
//     /**
//      * Get the next graph version.
//      * 
//      * @param currentVersion The current version of the graph.
//      */
//     public V getNextGraphVersion(V currentVersion);
// 
//     /**
//      * Get the minimum possible graph version.
//      * 
//      * @return The minimum possible graph version.
//      */
//     public V getMinPossibleGraphVersion();
// 
//     /**
//      * Get the maximum possible graph version.
//      * 
//      * @return The maximum possible graph version
//      */
//     public V getMaxPossibleGraphVersion();
// 
//     /**
//      * Set the {@link co.indexia.antiquity.graph.VersionedGraphBase}
//      * instance associated with this behavior
//      */
//     public void setGraph(VersionedGraphBase<?, V> graph);
// }


import com.tinkerpop.blueprints.Element;
import com.tinkerpop.blueprints.Index;
import com.tinkerpop.blueprints.IndexableGraph;
import com.tinkerpop.blueprints.KeyIndexableGraph;
import com.tinkerpop.blueprints.Parameter;
import com.tinkerpop.blueprints.TransactionalGraph;
import com.tinkerpop.blueprints.util.wrappers.id.IdGraph;
import co.indexia.antiquity.graph.identifierBehavior.GraphIdentifierBehavior;
/**
 * Copyright (c) 2012-2014 "Indexia Technologies, ltd."
 * 
 * This file is part of Antiquity.
 * 
 * Antiquity is free software: you can redistribute it and/or modify it under
 * the terms of the GNU Affero General Public License as published by the Free
 * Software Foundation, either version 3 of the License, or (at your option) any
 * later version.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
 * details.
 * 
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
package co.indexia.antiquity.graph;


/**
 * TODO: This is a starting point of having a flavor of transactional graph that supports manual indexing as this
 * commit removed the native support for IndexableGraph since it's not supported by Titan and others
 *
 * To make it work, it still needs impl of another EventableGraph that implements IndexableGraph
 */
public class IndexableTransactionalVersionedGraphImpl<T extends TransactionalGraph & KeyIndexableGraph & IndexableGraph, V extends Comparable<V>>
        extends TransactionalVersionedGraph<T, V> implements IndexableGraph {

    IndexableTransactionalVersionedGraphImpl(T baseGraph, GraphIdentifierBehavior<V> identifierBehavior) {
        super(baseGraph, identifierBehavior);
    }

// Path: src/main/java/co/indexia/antiquity/graph/identifierBehavior/GraphIdentifierBehavior.java
// public interface GraphIdentifierBehavior<V extends Comparable<V>> {
//     /**
//      * Get the latest(current) graph version.
//      * 
//      * <p>
//      * Graph latest version is stored in the root historic vertex.
//      * <p>
//      * 
//      * @see co.indexia.antiquity.graph.ActiveVersionedGraph#getRootVertex()
//      * 
//      * @return The latest graph version.
//      */
//     public V getLatestGraphVersion();
// 
//     /**
//      * Get the next graph version.
//      * 
//      * @param currentVersion The current version of the graph.
//      */
//     public V getNextGraphVersion(V currentVersion);
// 
//     /**
//      * Get the minimum possible graph version.
//      * 
//      * @return The minimum possible graph version.
//      */
//     public V getMinPossibleGraphVersion();
// 
//     /**
//      * Get the maximum possible graph version.
//      * 
//      * @return The maximum possible graph version
//      */
//     public V getMaxPossibleGraphVersion();
// 
//     /**
//      * Set the {@link co.indexia.antiquity.graph.VersionedGraphBase}
//      * instance associated with this behavior
//      */
//     public void setGraph(VersionedGraphBase<?, V> graph);
// }


// Path: src/main/java/co/indexia/antiquity/graph/IndexableTransactionalVersionedGraphImpl.java
import com.tinkerpop.blueprints.Element;
import com.tinkerpop.blueprints.Index;
import com.tinkerpop.blueprints.IndexableGraph;
import com.tinkerpop.blueprints.KeyIndexableGraph;
import com.tinkerpop.blueprints.Parameter;
import com.tinkerpop.blueprints.TransactionalGraph;
import com.tinkerpop.blueprints.util.wrappers.id.IdGraph;
import co.indexia.antiquity.graph.identifierBehavior.GraphIdentifierBehavior;

/**
 * Copyright (c) 2012-2014 "Indexia Technologies, ltd."
 * 
 * This file is part of Antiquity.
 * 
 * Antiquity is free software: you can redistribute it and/or modify it under
 * the terms of the GNU Affero General Public License as published by the Free
 * Software Foundation, either version 3 of the License, or (at your option) any
 * later version.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
 * details.
 * 
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
package co.indexia.antiquity.graph;


/**
 * TODO: This is a starting point of having a flavor of transactional graph that supports manual indexing as this
 * commit removed the native support for IndexableGraph since it's not supported by Titan and others
 *
 * To make it work, it still needs impl of another EventableGraph that implements IndexableGraph
 */
public class IndexableTransactionalVersionedGraphImpl<T extends TransactionalGraph & KeyIndexableGraph & IndexableGraph, V extends Comparable<V>>
        extends TransactionalVersionedGraph<T, V> implements IndexableGraph {

    IndexableTransactionalVersionedGraphImpl(T baseGraph, GraphIdentifierBehavior<V> identifierBehavior) {
        super(baseGraph, identifierBehavior);
    }

    IndexableTransactionalVersionedGraphImpl(T baseGraph, GraphIdentifierBehavior<V> identifierBehavior, Configuration configuration,