Added support to display paths; s= set source; d = set dest; f = cycle between paths; a = swap src/dst; esc = clear selections
diff --git a/apps/tvue/src/main/java/org/onlab/onos/tvue/TopologyResource.java b/apps/tvue/src/main/java/org/onlab/onos/tvue/TopologyResource.java
index b15e80c..4c9b581 100644
--- a/apps/tvue/src/main/java/org/onlab/onos/tvue/TopologyResource.java
+++ b/apps/tvue/src/main/java/org/onlab/onos/tvue/TopologyResource.java
@@ -4,9 +4,9 @@
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.onlab.onos.net.ConnectPoint;
-import org.onlab.onos.net.Device;
 import org.onlab.onos.net.ElementId;
 import org.onlab.onos.net.Link;
+import org.onlab.onos.net.Path;
 import org.onlab.onos.net.device.DeviceService;
 import org.onlab.onos.net.host.HostService;
 import org.onlab.onos.net.link.LinkService;
@@ -83,7 +83,6 @@
     }
 
 
-
     /**
      * Returns a JSON array of all paths between the specified hosts.
      *
@@ -97,22 +96,17 @@
     public Response paths(@PathParam("src") String src, @PathParam("dst") String dst) {
         ObjectMapper mapper = new ObjectMapper();
 
-        DeviceService deviceService = get(DeviceService.class);
         TopologyService topologyService = get(TopologyService.class);
-        Topology topology  = topologyService.currentTopology();
+        Topology topology = topologyService.currentTopology();
 
         ArrayNode pathsNode = mapper.createArrayNode();
-        Device srcDevice = deviceService.getDevice(deviceId(src));
-        Device dstDevice = deviceService.getDevice(deviceId(dst));
-
-//        if (srcDevice != null && dstDevice != null) {
-//            for (Path path : topologyService.getPaths(topology, srcDevice, dstDevice))
-//                pathsNode.add(json(mapper, path));
-//        }
+        for (Path path : topologyService.getPaths(topology, deviceId(src), deviceId(dst))) {
+            pathsNode.add(json(mapper, path));
+        }
 
         // Now put the vertexes and edges into a root node and ship them off
         ObjectNode rootNode = mapper.createObjectNode();
-        rootNode.put("paths", pathsNode);
+        rootNode.set("paths", pathsNode);
         return Response.ok(rootNode.toString()).build();
     }
 
@@ -134,14 +128,11 @@
     }
 
 
-
-
-
     // Produces JSON for a graph vertex.
     private ObjectNode json(ObjectMapper mapper, ElementId id, int group,
                             boolean isOnline) {
         return mapper.createObjectNode()
-                .put("name", id.uri().getSchemeSpecificPart())
+                .put("name", id.uri().toString())
                 .put("group", group)
                 .put("online", isOnline);
     }
@@ -158,6 +149,19 @@
                 .put("source", src).put("target", dst).put("value", count);
     }
 
+    // Produces JSON representation of a network path.
+    private ArrayNode json(ObjectMapper mapper, Path path) {
+        ArrayNode pathNode = mapper.createArrayNode();
+        for (Link link : path.links()) {
+            ObjectNode linkNode = mapper.createObjectNode()
+                    .put("src", id(link.src()))
+                    .put("dst", id(link.dst()));
+            pathNode.add(linkNode);
+        }
+        return pathNode;
+    }
+
+
     // Aggregate link of all links between the same devices regardless of
     // their direction.
     private class AggLink {
@@ -188,7 +192,7 @@
     // Returns a formatted string for the element associated with the given
     // connection point.
     private static String id(ConnectPoint cp) {
-        return cp.elementId().uri().getSchemeSpecificPart();
+        return cp.elementId().uri().toString();
     }
 
 }