ONOS-3182 Adding device badges and bug fixes
Change-Id: I84a0e8ec4e968ad80d08d086fa951cc4800aa70b
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 ca9d668..de7826c 100644
--- a/apps/pathpainter/src/main/java/org/onosproject/pathpainter/PathPainterTopovMessageHandler.java
+++ b/apps/pathpainter/src/main/java/org/onosproject/pathpainter/PathPainterTopovMessageHandler.java
@@ -30,7 +30,10 @@
import org.onosproject.ui.RequestHandler;
import org.onosproject.ui.UiConnection;
import org.onosproject.ui.UiMessageHandler;
+import org.onosproject.ui.topo.DeviceHighlight;
import org.onosproject.ui.topo.Highlights;
+import org.onosproject.ui.topo.HostHighlight;
+import org.onosproject.ui.topo.NodeBadge;
import org.onosproject.ui.topo.TopoJson;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -54,6 +57,11 @@
private static final String ID = "id";
private static final String MODE = "mode";
+ private static final String TYPE = "type";
+ private static final String SWITCH = "switch";
+ private static final String ENDSTATION = "endstation";
+ public static final String DST = "Dst";
+ public static final String SRC = "Src";
private Set<Link> allPathLinks;
@@ -66,6 +74,7 @@
private PathService pathService;
private ElementId src, dst;
+ private String srcType, dstType;
private Mode currentMode = Mode.SHORTEST;
private List<Path> paths;
private int pathIndex;
@@ -96,6 +105,7 @@
// === Handler classes
private final class SetSrcHandler extends RequestHandler {
+
public SetSrcHandler() {
super(PAINTER_SET_SRC);
}
@@ -104,10 +114,15 @@
public void process(long sid, ObjectNode payload) {
String id = string(payload, ID);
src = elementId(id);
+ srcType = string(payload, TYPE);
if (src.equals(dst)) {
dst = null;
}
- findAndSendPaths();
+ sendMessage(TopoJson.highlightsMessage(addBadge(new Highlights(),
+ srcType,
+ src.toString(),
+ SRC)));
+ findAndSendPaths(currentMode);
}
}
@@ -120,10 +135,16 @@
public void process(long sid, ObjectNode payload) {
String id = string(payload, ID);
dst = elementId(id);
+ dstType = string(payload, TYPE);
if (src.equals(dst)) {
src = null;
}
- findAndSendPaths();
+
+ sendMessage(TopoJson.highlightsMessage(addBadge(new Highlights(),
+ dstType,
+ dst.toString(),
+ DST)));
+ findAndSendPaths(currentMode);
}
}
@@ -137,7 +158,10 @@
ElementId temp = src;
src = dst;
dst = temp;
- findAndSendPaths();
+ String s = srcType;
+ srcType = dstType;
+ dstType = s;
+ findAndSendPaths(currentMode);
}
}
@@ -177,11 +201,7 @@
Mode.SHORTEST : (mode.equals("disjoint") ?
Mode.DISJOINT : Mode.SRLG));
//TODO: add support for SRLG
- if (currentMode.equals(Mode.SHORTEST)) {
- findAndSendPaths();
- } else {
- findAndSendDisjointPaths();
- }
+ findAndSendPaths(currentMode);
}
}
@@ -195,40 +215,40 @@
}
}
- private void findAndSendPaths() {
- if (src != null && dst != null) {
- paths = ImmutableList.copyOf(pathService.getPaths(src, dst));
- 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 findAndSendDisjointPaths() {
+ private void findAndSendPaths(Mode mode) {
log.info("src={}; dst={}; mode={}", src, dst, currentMode);
if (src != null && dst != null) {
- log.info("test" + src + dst);
- paths = ImmutableList.copyOf(pathService.getDisjointPaths(src, dst));
pathIndex = 0;
-
ImmutableSet.Builder<Link> builder = ImmutableSet.builder();
- paths.forEach(path -> {
- DisjointPath dp = (DisjointPath) path;
- builder.addAll(dp.primary().links());
- builder.addAll(dp.backup().links());
- });
- allPathLinks = builder.build();
+ if (mode.equals(Mode.SHORTEST)) {
+ paths = ImmutableList.copyOf(pathService.getPaths(src, dst));
+ allPathLinks = buildPaths(builder).build();
+ } else if (mode.equals(Mode.DISJOINT)) {
+ paths = ImmutableList.copyOf(pathService.getDisjointPaths(src, dst));
+ allPathLinks = buildDisjointPaths(builder).build();
+ } else {
+ log.info("Unsupported MODE");
+ }
} else {
paths = ImmutableList.of();
allPathLinks = ImmutableSet.of();
}
hilightAndSendPaths();
+
+ }
+
+ private ImmutableSet.Builder<Link> buildPaths(ImmutableSet.Builder<Link> pathBuilder) {
+ paths.forEach(path -> path.links().forEach(pathBuilder::add));
+ return pathBuilder;
+ }
+
+ private ImmutableSet.Builder<Link> buildDisjointPaths(ImmutableSet.Builder<Link> pathBuilder) {
+ paths.forEach(path -> {
+ DisjointPath dp = (DisjointPath) path;
+ pathBuilder.addAll(dp.primary().links());
+ pathBuilder.addAll(dp.backup().links());
+ });
+ return pathBuilder;
}
private void hilightAndSendPaths() {
@@ -240,9 +260,9 @@
// Prepare two working sets; one containing selected path links and
// the other containing all paths links.
if (currentMode.equals(Mode.DISJOINT)) {
- DisjointPath dp = (DisjointPath) paths.get(pathIndex);
+ DisjointPath dp = (DisjointPath) paths.get(pathIndex);
selectedPathLinks = paths.isEmpty() ?
- ImmutableSet.of() : Sets.newHashSet(dp.primary().links());
+ ImmutableSet.of() : Sets.newHashSet(dp.primary().links());
selectedPathLinks.addAll(dp.backup().links());
} else {
selectedPathLinks = paths.isEmpty() ?
@@ -253,23 +273,40 @@
plink.computeHilight(selectedPathLinks, allPathLinks);
highlights.add(plink.highlight(null));
}
-
+ if (src != null) {
+ highlights = addBadge(highlights, srcType, src.toString(), SRC);
+ }
+ if (dst != null) {
+ highlights = addBadge(highlights, dstType, dst.toString(), DST);
+ }
sendMessage(TopoJson.highlightsMessage(highlights));
}
- /*
- private void addDeviceBadge(Highlights h, DeviceId devId, int n) {
- DeviceHighlight dh = new DeviceHighlight(devId.toString());
- dh.setBadge(createBadge(n));
- h.add(dh);
+ private Highlights addBadge(Highlights highlights, String type, String elemId, String src) {
+ if (SWITCH.equals(type)) {
+ highlights = addDeviceBadge(highlights, elemId, src);
+ } else if (ENDSTATION.equals(type)) {
+ highlights = addHostBadge(highlights, elemId, src);
+ }
+ return highlights;
}
- private NodeBadge createBadge(int n) {
- Status status = n > 3 ? Status.ERROR : Status.WARN;
- String noun = n > 3 ? "(critical)" : "(problematic)";
- String msg = "Egress links: " + n + " " + noun;
- return NodeBadge.number(status, n, msg);
+ private Highlights addDeviceBadge(Highlights h, String elemId, String type) {
+ DeviceHighlight dh = new DeviceHighlight(elemId);
+ dh.setBadge(createBadge(type));
+ h.add(dh);
+ return h;
}
- */
+
+ private Highlights addHostBadge(Highlights h, String elemId, String type) {
+ HostHighlight hh = new HostHighlight(elemId);
+ hh.setBadge(createBadge(type));
+ h.add(hh);
+ return h;
+ }
+
+ private NodeBadge createBadge(String type) {
+ return NodeBadge.text(type);
+ }
}
\ No newline at end of file