Add GeoLink Path support
Change-Id: If2a849ce7e687fed7e11079697eaeb0010bc64a0
diff --git a/apps/pathpainter/src/main/java/org/onosproject/pathpainter/PathPainterTopovMessageHandler.java b/apps/pathpainter/src/main/java/org/onosproject/pathpainter/PathPainterTopovMessageHandler.java
index de7826c..8ead8be 100644
--- a/apps/pathpainter/src/main/java/org/onosproject/pathpainter/PathPainterTopovMessageHandler.java
+++ b/apps/pathpainter/src/main/java/org/onosproject/pathpainter/PathPainterTopovMessageHandler.java
@@ -26,6 +26,9 @@
import org.onosproject.net.HostId;
import org.onosproject.net.Link;
import org.onosproject.net.Path;
+import org.onosproject.net.device.DeviceService;
+import org.onosproject.net.topology.GeoDistanceLinkWeight;
+import org.onosproject.net.topology.LinkWeight;
import org.onosproject.net.topology.PathService;
import org.onosproject.ui.RequestHandler;
import org.onosproject.ui.UiConnection;
@@ -62,11 +65,12 @@
private static final String ENDSTATION = "endstation";
public static final String DST = "Dst";
public static final String SRC = "Src";
+ private static LinkWeight linkData;
private Set<Link> allPathLinks;
private enum Mode {
- SHORTEST, DISJOINT, SRLG
+ SHORTEST, DISJOINT, GEODATA, SRLG, INVALID
}
private final Logger log = LoggerFactory.getLogger(getClass());
@@ -87,6 +91,7 @@
public void init(UiConnection connection, ServiceDirectory directory) {
super.init(connection, directory);
pathService = directory.get(PathService.class);
+ linkData = new GeoDistanceLinkWeight(directory.get(DeviceService.class));
}
@Override
@@ -165,6 +170,8 @@
}
}
+
+
private final class NextPathHandler extends RequestHandler {
public NextPathHandler() {
super(PAINTER_NEXT_PATH);
@@ -197,9 +204,23 @@
@Override
public void process(long sid, ObjectNode payload) {
String mode = string(payload, MODE);
- currentMode = (mode.equals("shortest") ?
- Mode.SHORTEST : (mode.equals("disjoint") ?
- Mode.DISJOINT : Mode.SRLG));
+ switch (mode) {
+ case "shortest":
+ currentMode = Mode.SHORTEST;
+ break;
+ case "disjoint":
+ currentMode = Mode.DISJOINT;
+ break;
+ case "geodata":
+ currentMode = Mode.GEODATA;
+ break;
+ case "srlg":
+ currentMode = Mode.SRLG;
+ break;
+ default:
+ currentMode = Mode.INVALID;
+ break;
+ }
//TODO: add support for SRLG
findAndSendPaths(currentMode);
}
@@ -226,6 +247,9 @@
} else if (mode.equals(Mode.DISJOINT)) {
paths = ImmutableList.copyOf(pathService.getDisjointPaths(src, dst));
allPathLinks = buildDisjointPaths(builder).build();
+ } else if (mode.equals(Mode.GEODATA)) {
+ paths = ImmutableList.copyOf(pathService.getPaths(src, dst, linkData));
+ allPathLinks = buildPaths(builder).build();
} else {
log.info("Unsupported MODE");
}