blob: ee50cd0b444730380aed7f225a4017aaa787816a [file] [log] [blame]
package net.onrc.onos.util;
import java.util.Set;
import com.thinkaurelius.titan.core.TitanFactory;
import com.thinkaurelius.titan.core.TitanGraph;
import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.blueprints.TransactionalGraph.Conclusion;
import com.tinkerpop.frames.FramedGraph;
public class GraphDBConnection {
public enum Transaction {
COMMIT,
ROLLBACK
}
private static GraphDBConnection singleton = new GraphDBConnection( );
private static TitanGraph graph;
private static GraphDBUtils utils;
/* A private Constructor prevents any other
* class from instantiating.
*/
private GraphDBConnection(){ }
/* Static 'instance' method */
public static GraphDBConnection getInstance(String conf) {
if (graph == null||graph.isOpen() == Boolean.FALSE) {
graph = TitanFactory.open(conf);
// FIXME: Creation on Indexes should be done only once
Set<String> s = graph.getIndexedKeys(Vertex.class);
if (!s.contains("dpid")) {
graph.createKeyIndex("dpid", Vertex.class);
}
if (!s.contains("type")) {
graph.createKeyIndex("type", Vertex.class);
}
if (!s.contains("dl_address")) {
graph.createKeyIndex("dl_address", Vertex.class);
}
if (!s.contains("flow_id")) {
graph.createKeyIndex("flow_id", Vertex.class);
}
if (!s.contains("flow_entry_id")) {
graph.createKeyIndex("flow_entry_id",
Vertex.class);
}
}
graph.stopTransaction(Conclusion.SUCCESS);
if (utils == null) {
utils = new GraphDBUtils();
}
return singleton;
}
public IDBUtils utils() {
return utils;
}
protected FramedGraph<TitanGraph> getFramedGraph() {
if (isValid()) {
FramedGraph<TitanGraph> fg = new FramedGraph<TitanGraph>(graph);
return fg;
} else {
return null;
}
}
public Boolean isValid() {
return (graph != null||graph.isOpen());
}
public void startTx() {
}
public void endTx(Transaction tx) {
switch (tx) {
case COMMIT:
graph.stopTransaction(Conclusion.SUCCESS);
case ROLLBACK:
graph.stopTransaction(Conclusion.FAILURE);
}
}
public void close() {
graph.stopTransaction(Conclusion.SUCCESS);
}
}