tom

Added support to display paths; s= set source; d = set dest; f = cycle between p…

…aths; a = swap src/dst; esc = clear selections
...@@ -4,9 +4,9 @@ import com.fasterxml.jackson.databind.ObjectMapper; ...@@ -4,9 +4,9 @@ import com.fasterxml.jackson.databind.ObjectMapper;
4 import com.fasterxml.jackson.databind.node.ArrayNode; 4 import com.fasterxml.jackson.databind.node.ArrayNode;
5 import com.fasterxml.jackson.databind.node.ObjectNode; 5 import com.fasterxml.jackson.databind.node.ObjectNode;
6 import org.onlab.onos.net.ConnectPoint; 6 import org.onlab.onos.net.ConnectPoint;
7 -import org.onlab.onos.net.Device;
8 import org.onlab.onos.net.ElementId; 7 import org.onlab.onos.net.ElementId;
9 import org.onlab.onos.net.Link; 8 import org.onlab.onos.net.Link;
9 +import org.onlab.onos.net.Path;
10 import org.onlab.onos.net.device.DeviceService; 10 import org.onlab.onos.net.device.DeviceService;
11 import org.onlab.onos.net.host.HostService; 11 import org.onlab.onos.net.host.HostService;
12 import org.onlab.onos.net.link.LinkService; 12 import org.onlab.onos.net.link.LinkService;
...@@ -83,7 +83,6 @@ public class TopologyResource extends BaseResource { ...@@ -83,7 +83,6 @@ public class TopologyResource extends BaseResource {
83 } 83 }
84 84
85 85
86 -
87 /** 86 /**
88 * Returns a JSON array of all paths between the specified hosts. 87 * Returns a JSON array of all paths between the specified hosts.
89 * 88 *
...@@ -97,22 +96,17 @@ public class TopologyResource extends BaseResource { ...@@ -97,22 +96,17 @@ public class TopologyResource extends BaseResource {
97 public Response paths(@PathParam("src") String src, @PathParam("dst") String dst) { 96 public Response paths(@PathParam("src") String src, @PathParam("dst") String dst) {
98 ObjectMapper mapper = new ObjectMapper(); 97 ObjectMapper mapper = new ObjectMapper();
99 98
100 - DeviceService deviceService = get(DeviceService.class);
101 TopologyService topologyService = get(TopologyService.class); 99 TopologyService topologyService = get(TopologyService.class);
102 - Topology topology = topologyService.currentTopology(); 100 + Topology topology = topologyService.currentTopology();
103 101
104 ArrayNode pathsNode = mapper.createArrayNode(); 102 ArrayNode pathsNode = mapper.createArrayNode();
105 - Device srcDevice = deviceService.getDevice(deviceId(src)); 103 + for (Path path : topologyService.getPaths(topology, deviceId(src), deviceId(dst))) {
106 - Device dstDevice = deviceService.getDevice(deviceId(dst)); 104 + pathsNode.add(json(mapper, path));
107 - 105 + }
108 -// if (srcDevice != null && dstDevice != null) {
109 -// for (Path path : topologyService.getPaths(topology, srcDevice, dstDevice))
110 -// pathsNode.add(json(mapper, path));
111 -// }
112 106
113 // Now put the vertexes and edges into a root node and ship them off 107 // Now put the vertexes and edges into a root node and ship them off
114 ObjectNode rootNode = mapper.createObjectNode(); 108 ObjectNode rootNode = mapper.createObjectNode();
115 - rootNode.put("paths", pathsNode); 109 + rootNode.set("paths", pathsNode);
116 return Response.ok(rootNode.toString()).build(); 110 return Response.ok(rootNode.toString()).build();
117 } 111 }
118 112
...@@ -134,14 +128,11 @@ public class TopologyResource extends BaseResource { ...@@ -134,14 +128,11 @@ public class TopologyResource extends BaseResource {
134 } 128 }
135 129
136 130
137 -
138 -
139 -
140 // Produces JSON for a graph vertex. 131 // Produces JSON for a graph vertex.
141 private ObjectNode json(ObjectMapper mapper, ElementId id, int group, 132 private ObjectNode json(ObjectMapper mapper, ElementId id, int group,
142 boolean isOnline) { 133 boolean isOnline) {
143 return mapper.createObjectNode() 134 return mapper.createObjectNode()
144 - .put("name", id.uri().getSchemeSpecificPart()) 135 + .put("name", id.uri().toString())
145 .put("group", group) 136 .put("group", group)
146 .put("online", isOnline); 137 .put("online", isOnline);
147 } 138 }
...@@ -158,6 +149,19 @@ public class TopologyResource extends BaseResource { ...@@ -158,6 +149,19 @@ public class TopologyResource extends BaseResource {
158 .put("source", src).put("target", dst).put("value", count); 149 .put("source", src).put("target", dst).put("value", count);
159 } 150 }
160 151
152 + // Produces JSON representation of a network path.
153 + private ArrayNode json(ObjectMapper mapper, Path path) {
154 + ArrayNode pathNode = mapper.createArrayNode();
155 + for (Link link : path.links()) {
156 + ObjectNode linkNode = mapper.createObjectNode()
157 + .put("src", id(link.src()))
158 + .put("dst", id(link.dst()));
159 + pathNode.add(linkNode);
160 + }
161 + return pathNode;
162 + }
163 +
164 +
161 // Aggregate link of all links between the same devices regardless of 165 // Aggregate link of all links between the same devices regardless of
162 // their direction. 166 // their direction.
163 private class AggLink { 167 private class AggLink {
...@@ -188,7 +192,7 @@ public class TopologyResource extends BaseResource { ...@@ -188,7 +192,7 @@ public class TopologyResource extends BaseResource {
188 // Returns a formatted string for the element associated with the given 192 // Returns a formatted string for the element associated with the given
189 // connection point. 193 // connection point.
190 private static String id(ConnectPoint cp) { 194 private static String id(ConnectPoint cp) {
191 - return cp.elementId().uri().getSchemeSpecificPart(); 195 + return cp.elementId().uri().toString();
192 } 196 }
193 197
194 } 198 }
......