Simon Hunt
Committed by Gerrit Code Review

GUI Topo -- Badges - Enhanced uitopo archetype to also use badges.

Change-Id: I80cd4783a4154a2ccce6054175022b97ef7bc6c1
......@@ -16,6 +16,8 @@
package org.onosproject.ui;
import org.onosproject.net.DeviceId;
import org.onosproject.net.HostId;
import org.onosproject.ui.topo.PropertyPanel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -106,7 +108,7 @@ public class UiTopoOverlay {
*
* @param pp property panel model of summary data
*/
public void modifyDeviceDetails(PropertyPanel pp) {
public void modifyDeviceDetails(PropertyPanel pp, DeviceId deviceId) {
}
/**
......@@ -116,6 +118,6 @@ public class UiTopoOverlay {
*
* @param pp property panel model of summary data
*/
public void modifyHostDetails(PropertyPanel pp) {
public void modifyHostDetails(PropertyPanel pp, HostId hostId) {
}
}
......
......@@ -33,7 +33,10 @@ import org.onosproject.net.link.LinkService;
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.NodeBadge;
import org.onosproject.ui.topo.NodeBadge.Status;
import org.onosproject.ui.topo.TopoJson;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -224,11 +227,26 @@ public class AppUiTopovMessageHandler extends UiMessageHandler {
if (elementOfNote != null && elementOfNote instanceof Device) {
DeviceId devId = (DeviceId) elementOfNote.id();
Set<Link> links = linkService.getDeviceEgressLinks(devId);
sendHighlights(fromLinks(links, devId));
Highlights highlights = fromLinks(links, devId);
addDeviceBadge(highlights, devId, links.size());
sendHighlights(highlights);
}
// Note: could also process Host, if available
}
private void addDeviceBadge(Highlights h, DeviceId devId, int n) {
DeviceHighlight dh = new DeviceHighlight(devId.toString());
dh.setBadge(createBadge(n));
h.add(dh);
}
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 fromLinks(Set<Link> links, DeviceId devId) {
DemoLinkMap linkMap = new DemoLinkMap();
if (links != null) {
......
......@@ -18,13 +18,20 @@
*/
package ${package};
import org.onosproject.net.DeviceId;
import org.onosproject.ui.UiTopoOverlay;
import org.onosproject.ui.topo.ButtonId;
import org.onosproject.ui.topo.PropertyPanel;
import org.onosproject.ui.topo.TopoConstants.CoreButtons;
import org.onosproject.ui.topo.TopoConstants.Glyphs;
import static org.onosproject.ui.topo.TopoConstants.Properties.*;
import static org.onosproject.ui.topo.TopoConstants.Properties.FLOWS;
import static org.onosproject.ui.topo.TopoConstants.Properties.INTENTS;
import static org.onosproject.ui.topo.TopoConstants.Properties.LATITUDE;
import static org.onosproject.ui.topo.TopoConstants.Properties.LONGITUDE;
import static org.onosproject.ui.topo.TopoConstants.Properties.TOPOLOGY_SSCS;
import static org.onosproject.ui.topo.TopoConstants.Properties.TUNNELS;
import static org.onosproject.ui.topo.TopoConstants.Properties.VERSION;
/**
* Our topology overlay.
......@@ -61,7 +68,7 @@ public class AppUiTopovOverlay extends UiTopoOverlay {
}
@Override
public void modifyDeviceDetails(PropertyPanel pp) {
public void modifyDeviceDetails(PropertyPanel pp, DeviceId deviceId) {
pp.title(MY_DEVICE_TITLE);
pp.removeProps(LATITUDE, LONGITUDE);
......
......@@ -33,6 +33,7 @@ import org.onosproject.mastership.MastershipEvent;
import org.onosproject.mastership.MastershipListener;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.Device;
import org.onosproject.net.DeviceId;
import org.onosproject.net.Host;
import org.onosproject.net.HostId;
import org.onosproject.net.HostLocation;
......@@ -344,11 +345,13 @@ public class TopologyViewMessageHandler extends TopologyViewMessageHandlerBase {
PropertyPanel pp = null;
if (type.equals(DEVICE)) {
pp = deviceDetails(deviceId(id), sid);
overlayCache.currentOverlay().modifyDeviceDetails(pp);
DeviceId did = deviceId(id);
pp = deviceDetails(did, sid);
overlayCache.currentOverlay().modifyDeviceDetails(pp, did);
} else if (type.equals(HOST)) {
pp = hostDetails(hostId(id), sid);
overlayCache.currentOverlay().modifyHostDetails(pp);
HostId hid = hostId(id);
pp = hostDetails(hid, sid);
overlayCache.currentOverlay().modifyHostDetails(pp, hid);
}
sendMessage(envelope(SHOW_DETAILS, sid, json(pp)));
......
......@@ -17,6 +17,7 @@
package org.onosproject.ui.impl;
import org.onosproject.net.DeviceId;
import org.onosproject.ui.UiTopoOverlay;
import org.onosproject.ui.topo.ButtonId;
import org.onosproject.ui.topo.PropertyPanel;
......@@ -55,7 +56,7 @@ public class TrafficOverlay extends UiTopoOverlay {
}
@Override
public void modifyDeviceDetails(PropertyPanel pp) {
public void modifyDeviceDetails(PropertyPanel pp, DeviceId deviceId) {
pp.addButton(SHOW_DEVICE_FLOWS)
.addButton(SHOW_RELATED_TRAFFIC);
}
......