rename onos.util to onos.graph
diff --git a/src/main/java/net/onrc/onos/graph/GraphDBConnection.java b/src/main/java/net/onrc/onos/graph/GraphDBConnection.java
new file mode 100644
index 0000000..53235ab
--- /dev/null
+++ b/src/main/java/net/onrc/onos/graph/GraphDBConnection.java
@@ -0,0 +1,158 @@
+package net.onrc.onos.graph;
+
+import java.util.Set;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.thinkaurelius.titan.core.TitanFactory;
+import com.thinkaurelius.titan.core.TitanGraph;
+import com.tinkerpop.blueprints.TransactionalGraph;
+import com.tinkerpop.blueprints.Vertex;
+import com.tinkerpop.blueprints.util.wrappers.event.EventTransactionalGraph;
+import com.tinkerpop.frames.FramedGraph;
+
+public class GraphDBConnection implements IDBConnection {
+ public enum Transaction {
+ COMMIT, ROLLBACK
+ }
+
+ public enum GenerateEvent {
+ TRUE, FALSE
+ }
+
+ class TransactionHandle {
+ protected TransactionalGraph tr;
+
+ public void create() {
+ tr = graph.newTransaction();
+ }
+ }
+
+ protected static Logger log = LoggerFactory
+ .getLogger(GraphDBConnection.class);
+ private static GraphDBConnection singleton = new GraphDBConnection();
+ private static TitanGraph graph;
+ private static EventTransactionalGraph<TitanGraph> eg;
+ private static String configFile;
+
+ /*
+ * A private Constructor prevents any other class from instantiating.
+ */
+ private GraphDBConnection() {
+ }
+
+ /* Static 'instance' method */
+ /**
+ * Get the instance of GraphDBConnection class.
+ * @param conf the path to the database configuration file.
+ * @return GraphDBConnection instance.
+ */
+ public static synchronized GraphDBConnection getInstance(final String conf) {
+ if (GraphDBConnection.configFile == null
+ || GraphDBConnection.configFile.isEmpty()) {
+ GraphDBConnection.configFile = conf;
+ log.debug("GraphDBConnection::Setting Config File {}",
+ GraphDBConnection.configFile);
+ }
+ if (!GraphDBConnection.configFile.isEmpty()
+ && (graph == null || graph.isOpen() == Boolean.FALSE)) {
+ graph = TitanFactory.open(GraphDBConnection.configFile);
+ // 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);
+ }
+ if (!s.contains("switch_state")) {
+ graph.createKeyIndex("switch_state", Vertex.class);
+ }
+ graph.commit();
+ eg = new EventTransactionalGraph<TitanGraph>(graph);
+ }
+ return singleton;
+ }
+
+ /**
+ * Get a FramedGraph instance of the graph.
+ */
+ public FramedGraph<TitanGraph> getFramedGraph() {
+ if (isValid()) {
+ FramedGraph<TitanGraph> fg = new FramedGraph<TitanGraph>(graph);
+ return fg;
+ } else {
+ log.error("new FramedGraph failed");
+ return null;
+ }
+ }
+
+ /**
+ * Get EventTransactionalGraph of the titan graph.
+ * @return EventTransactionalGraph of the titan graph
+ */
+ protected EventTransactionalGraph<TitanGraph> getEventGraph() {
+ if (isValid()) {
+ return eg;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Add LocalGraphChangedLister for the graph.
+ */
+ public void addEventListener(final LocalGraphChangedListener listener) {
+ EventTransactionalGraph<TitanGraph> eg = this.getEventGraph();
+ eg.addListener(listener);
+ log.debug("Registered listener {}", listener.getClass());
+ }
+
+ /**
+ * Return whether this connection is valid.
+ */
+ public Boolean isValid() {
+ return (graph != null || graph.isOpen());
+ }
+
+ /**
+ * Commit changes for the graph operations.
+ */
+ public void commit() {
+ try {
+ graph.commit();
+ }
+ catch (Exception e) {
+ log.error("{}", e.toString());
+ }
+ }
+
+ /**
+ * Rollback changes for the graph operations.
+ */
+ public void rollback() {
+ try {
+ graph.rollback();
+ }
+ catch (Exception e) {
+ log.error("{}", e.toString());
+ }
+ }
+
+ /**
+ * Close this database connection.
+ */
+ public void close() {
+ commit();
+ }
+}