ONOS-3182 Modify mode and Icons
Change-Id: Ibcfc1ffb5e91856899b10e7d156b8108653b047a
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 d9b6f76..521507c 100644
--- a/apps/pathpainter/src/main/java/org/onosproject/pathpainter/PathPainterTopovMessageHandler.java
+++ b/apps/pathpainter/src/main/java/org/onosproject/pathpainter/PathPainterTopovMessageHandler.java
@@ -18,6 +18,7 @@
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
import org.onlab.osgi.ServiceDirectory;
import org.onosproject.net.DeviceId;
import org.onosproject.net.ElementId;
@@ -33,6 +34,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Set;
@@ -54,6 +56,7 @@
private static final String MODE = "mode";
private Set<Link> allPathLinks;
+ private Set<Link> selectedPathLinks;
private enum Mode {
SHORTEST, DISJOINT, SRLG
@@ -63,9 +66,8 @@
private PathService pathService;
- private Mode currentMode = Mode.SHORTEST;
private ElementId src, dst;
- private Mode mode = Mode.SHORTEST;
+ private Mode currentMode = Mode.SHORTEST;
private List<Path> paths;
private int pathIndex;
@@ -86,7 +88,8 @@
new SetDstHandler(),
new SwapSrcDstHandler(),
new NextPathHandler(),
- new PrevPathHandler()
+ new PrevPathHandler(),
+ new SetModeHandler()
);
}
@@ -163,6 +166,26 @@
}
}
+ private final class SetModeHandler extends RequestHandler {
+ public SetModeHandler() {
+ super(PAINTER_SET_MODE);
+ }
+
+ @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));
+ //TODO: add support for SRLG
+ if (currentMode.equals(Mode.SHORTEST)) {
+ findAndSendPaths();
+ } else {
+ findAndSendDisjointPaths();
+ }
+ }
+ }
+
// === ------------
private ElementId elementId(String id) {
@@ -174,7 +197,6 @@
}
private void findAndSendPaths() {
- log.info("src={}; dst={}; mode={}", src, dst, mode);
if (src != null && dst != null) {
paths = ImmutableList.copyOf(pathService.getPaths(src, dst));
pathIndex = 0;
@@ -189,15 +211,43 @@
hilightAndSendPaths();
}
+ private void findAndSendDisjointPaths() {
+ log.info("src={}; dst={}; mode={}", src, dst, currentMode);
+ if (src != null && dst != null) {
+ log.info("test" + src + dst);
+ paths = null;
+ paths = new ArrayList<>();
+ pathService.getDisjointPaths(src, dst).forEach(djp -> {
+ paths.add(djp.primary());
+ paths.add(djp.backup());
+ });
+ pathIndex = 0;
+
+ ImmutableSet.Builder<Link> builder = ImmutableSet.builder();
+ paths.forEach(path -> path.links().forEach(builder::add));
+ allPathLinks = builder.build();
+ } else {
+ paths = ImmutableList.of();
+ allPathLinks = ImmutableSet.of();
+ }
+ hilightAndSendPaths();
+ }
+
private void hilightAndSendPaths() {
PathLinkMap linkMap = new PathLinkMap();
allPathLinks.forEach(linkMap::add);
// Prepare two working sets; one containing selected path links and
// the other containing all paths links.
- Set<Link> selectedPathLinks = paths.isEmpty() ?
- ImmutableSet.of() : ImmutableSet.copyOf(paths.get(pathIndex).links());
-
+ if (currentMode.equals(Mode.DISJOINT)) {
+ //FIXME: find a way to skip 2 paths for disjoint
+ selectedPathLinks = paths.isEmpty() ?
+ ImmutableSet.of() : Sets.newHashSet(paths.get(pathIndex * 2).links());
+ selectedPathLinks.addAll(Sets.newHashSet(paths.get(pathIndex * 2 + 1).links()));
+ } else {
+ selectedPathLinks = paths.isEmpty() ?
+ ImmutableSet.of() : Sets.newHashSet(paths.get(pathIndex).links());
+ }
Highlights highlights = new Highlights();
for (PathLink plink : linkMap.biLinks()) {
plink.computeHilight(selectedPathLinks, allPathLinks);