* Fix a bug in the Shortest-path computation: ignore switches that
  are not in ACTIVE state.

* Remove unnecessary Titan-related initializations.
diff --git a/src/main/java/net/floodlightcontroller/routing/TopoRouteService.java b/src/main/java/net/floodlightcontroller/routing/TopoRouteService.java
index fd7c364..773083b 100644
--- a/src/main/java/net/floodlightcontroller/routing/TopoRouteService.java
+++ b/src/main/java/net/floodlightcontroller/routing/TopoRouteService.java
@@ -13,6 +13,7 @@
 
 import net.floodlightcontroller.core.INetMapTopologyObjects.ISwitchObject;
 import net.floodlightcontroller.core.INetMapTopologyService.ITopoRouteService;
+import net.floodlightcontroller.core.ISwitchStorage.SwitchState;
 import net.floodlightcontroller.core.module.FloodlightModuleContext;
 import net.floodlightcontroller.core.module.FloodlightModuleException;
 import net.floodlightcontroller.core.module.IFloodlightModule;
@@ -23,14 +24,12 @@
 import net.floodlightcontroller.util.Port;
 import net.floodlightcontroller.util.SwitchPort;
 import net.onrc.onos.util.GraphDBConnection;
+import net.onrc.onos.util.GraphDBConnection.Transaction;
 
 import org.openflow.util.HexString;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.thinkaurelius.titan.core.TitanFactory;
-import com.thinkaurelius.titan.core.TitanGraph;
-import com.thinkaurelius.titan.core.TitanTransaction;
 import com.tinkerpop.blueprints.Direction;
 import com.tinkerpop.blueprints.TransactionalGraph.Conclusion;
 import com.tinkerpop.blueprints.Vertex;
@@ -194,17 +193,15 @@
      */
     
     public void prepareShortestPathTopo() {
-	TitanGraph titanGraph = TitanFactory.open("/tmp/cassandra.titan");
-	TitanTransaction titanTransaction = titanGraph.startTransaction();
 	shortestPathTopo = new HashMap<Long, Node>();
 
 	//
 	// Fetch the relevant info from the Switch and Port vertices
 	// from the Titan Graph.
 	//
-	Iterable<Vertex> nodes = titanTransaction.getVertices("type", "switch");
-	for (Vertex nodeVertex : nodes) {
-	
+	Iterable<ISwitchObject> nodes = conn.utils().getActiveSwitches(conn);
+	for (ISwitchObject switchObj : nodes) {
+	    Vertex nodeVertex = switchObj.asVertex();
 	    //
 	    // The Switch info
 	    //
@@ -245,6 +242,11 @@
 		    // The neighbor Switch info
 		    //
 		    for (Vertex neighborVertex : neighborPortVertex.getVertices(Direction.IN, "on")) {
+			// Ignore inactive switches
+			String state = neighborVertex.getProperty("state").toString();
+			if (! state.equals(SwitchState.ACTIVE.toString()))
+			    continue;
+
 			String neighborDpid = neighborVertex.getProperty("dpid").toString();
 			long neighborId = HexString.toLong(neighborDpid);
 			Node neighbor = shortestPathTopo.get(neighborId);
@@ -257,8 +259,7 @@
 		}
 	    }
 	}
-
-	titanTransaction.stopTransaction(Conclusion.SUCCESS);
+	conn.endTx(Transaction.COMMIT);
     }
 
     /**
@@ -409,12 +410,17 @@
 	result_data_path.setSrcPort(src);
 	result_data_path.setDstPort(dest);
 
-	TitanGraph titanGraph = TitanFactory.open("/tmp/cassandra.titan");
-	TitanTransaction titanTransaction = titanGraph.startTransaction();
-
 	String dpid_src = src.dpid().toString();
 	String dpid_dest = dest.dpid().toString();
 
+	// Get the source and destination switches
+	ISwitchObject srcSwitch =
+	    conn.utils().searchActiveSwitch(conn, dpid_src);
+	ISwitchObject destSwitch =
+	    conn.utils().searchActiveSwitch(conn, dpid_dest);
+	if (srcSwitch == null || destSwitch == null) {
+	    return null;
+	}
 
 	//
 	// Test whether we are computing a path from/to the same DPID.
@@ -426,22 +432,10 @@
 	    flowEntry.setInPort(src.port());
 	    flowEntry.setOutPort(dest.port());
 	    result_data_path.flowEntries().add(flowEntry);
-	    titanTransaction.stopTransaction(Conclusion.SUCCESS);
-	    // titanTransaction.shutdown();
+	    conn.endTx(Transaction.COMMIT);
 	    return result_data_path;
 	}
 
-
-	// Get the source vertex
-
-	ISwitchObject srcSwitch = conn.utils().searchSwitch(conn, dpid_src);
-	ISwitchObject destSwitch = conn.utils().searchSwitch(conn, dpid_dest);
-
-	if (srcSwitch == null || destSwitch == null) {
-		return null;
-	}
-
-
 	Vertex v_src = srcSwitch.asVertex();	
 	Vertex v_dest = destSwitch.asVertex();
 
@@ -464,6 +458,11 @@
 	    for (Vertex parentPort : nextVertex.getVertices(Direction.OUT, "on")) {
 		for (Vertex childPort : parentPort.getVertices(Direction.OUT, "link")) {
 		    for (Vertex child : childPort.getVertices(Direction.IN, "on")) {
+			// Ignore inactive switches
+			String state = child.getProperty("state").toString();
+			if (! state.equals(SwitchState.ACTIVE.toString()))
+			    continue;
+
 			if (! visitedSet.contains(child)) {
 			    previousVertexMap.put(parentPort, nextVertex);
 			    previousVertexMap.put(childPort, parentPort);
@@ -489,7 +488,6 @@
 	Collections.reverse(resultPath);
 
 
-
 	//
 	// Loop through the result and prepare the return result
 	// as a list of Flow Entries.
@@ -553,8 +551,7 @@
 	    result_data_path.flowEntries().add(flowEntry);
 	}
 
-	titanTransaction.stopTransaction(Conclusion.SUCCESS);
-	// titanTransaction.shutdown();
+	conn.endTx(Transaction.COMMIT);
 	if (result_data_path.flowEntries().size() > 0)
 	    return result_data_path;