Reduced graph handles and thread locals
diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/TopoLinkServiceImpl.java b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/TopoLinkServiceImpl.java
index c452fcd..c493887 100644
--- a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/TopoLinkServiceImpl.java
+++ b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/TopoLinkServiceImpl.java
@@ -1,33 +1,76 @@
 package net.floodlightcontroller.linkdiscovery.internal;
 
+import java.util.ArrayList;
 import java.util.List;
 
+import net.floodlightcontroller.core.INetMapTopologyObjects.ISwitchObject;
 import net.floodlightcontroller.core.INetMapTopologyService.ITopoLinkService;
+import net.floodlightcontroller.linkdiscovery.internal.LinkStorageImpl.ExtractLink;
 import net.floodlightcontroller.routing.Link;
+import net.onrc.onos.util.GraphDBConnection;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.tinkerpop.blueprints.Vertex;
+import com.tinkerpop.gremlin.java.GremlinPipeline;
 
 public class TopoLinkServiceImpl implements ITopoLinkService {
 	
-	ThreadLocal<LinkStorageImpl> store = new ThreadLocal<LinkStorageImpl>() {
-		@Override
-		protected LinkStorageImpl initialValue() {
-			LinkStorageImpl inStore = new LinkStorageImpl();
-			//TODO: Get the file path from global properties
-			inStore.init("/tmp/cassandra.titan");
-			return inStore;
-		}
-	};
+	public GraphDBConnection conn;
+	protected static Logger log = LoggerFactory.getLogger(TopoLinkServiceImpl.class);
+
+
+	public void finalize() {
+		close();
+	}
+	
+	@Override
+	public void close() {
+		conn.close();
+	}
  
-	LinkStorageImpl linkStore = store.get();
 	@Override
 	public List<Link> getActiveLinks() {
 		// TODO Auto-generated method stub
-		List<Link> retval = linkStore.getActiveLinks();
-		return retval;
+		conn = GraphDBConnection.getInstance("");
+		Iterable<ISwitchObject> switches = conn.utils().getActiveSwitches(conn);
+		List<Link> links = new ArrayList<Link>(); 
+		for (ISwitchObject sw : switches) {
+			GremlinPipeline<Vertex, Link> pipe = new GremlinPipeline<Vertex, Link>();
+			ExtractLink extractor = new ExtractLink();
+
+			pipe.start(sw.asVertex());
+			pipe.enablePath(true);
+			pipe.out("on").out("link").in("on").path().step(extractor);
+					
+			while (pipe.hasNext() ) {
+				Link l = pipe.next();
+				links.add(l);
+			}
+						
+		}
+		return links;
 	}
 
 	@Override
 	public List<Link> getLinksOnSwitch(String dpid) {
 		// TODO Auto-generated method stub
-		return linkStore.getLinks(dpid);
+		List<Link> links = new ArrayList<Link>(); 
+		ISwitchObject sw = conn.utils().searchSwitch(conn, dpid);
+		GremlinPipeline<Vertex, Link> pipe = new GremlinPipeline<Vertex, Link>();
+		ExtractLink extractor = new ExtractLink();
+
+		pipe.start(sw.asVertex());
+		pipe.enablePath(true);
+		pipe.out("on").out("link").in("on").path().step(extractor);
+			
+		while (pipe.hasNext() ) {
+			Link l = pipe.next();
+			links.add(l);
+		}
+		return links;
+
 	}
+	
 }