ONOS-6259: Topo2 - Implement server-side highlighting model
- (Still WIP)
- Cleaned up createHandlersAndOverlays() in UiWebSocket.
- Augmented handlerCrossConnects to link Topo2MH to Topo2TrafficMH.
- Topo2Stop event now shuts down background traffic monitoring.
Change-Id: I87e7151ea813b7514521201ecffcf2c9eed22cd7
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java
index 2179f42..8bb6244 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java
@@ -25,6 +25,7 @@
import org.onosproject.cluster.ControllerNode;
import org.onosproject.ui.GlyphConstants;
import org.onosproject.ui.UiConnection;
+import org.onosproject.ui.UiExtension;
import org.onosproject.ui.UiExtensionService;
import org.onosproject.ui.UiMessageHandler;
import org.onosproject.ui.UiMessageHandlerFactory;
@@ -33,6 +34,7 @@
import org.onosproject.ui.UiTopoOverlayFactory;
import org.onosproject.ui.impl.topo.Topo2Jsonifier;
import org.onosproject.ui.impl.topo.Topo2OverlayCache;
+import org.onosproject.ui.impl.topo.Topo2TrafficMessageHandler;
import org.onosproject.ui.impl.topo.Topo2ViewMessageHandler;
import org.onosproject.ui.impl.topo.UiTopoSession;
import org.onosproject.ui.impl.topo.model.UiSharedTopologyModel;
@@ -249,6 +251,8 @@
overlayCache = new TopoOverlayCache();
overlay2Cache = new Topo2OverlayCache();
+ Map<Class<?>, UiMessageHandler> handlerInstances = new HashMap<>();
+
UiExtensionService service = directory.get(UiExtensionService.class);
service.getExtensions().forEach(ext -> {
UiMessageHandlerFactory factory = ext.messageHandlerFactory();
@@ -257,33 +261,55 @@
try {
handler.init(this, directory);
handler.messageTypes().forEach(type -> handlers.put(type, handler));
+ handlerInstances.put(handler.getClass(), handler);
- // need to inject the overlay cache into topology message handler
- if (handler instanceof TopologyViewMessageHandler) {
- ((TopologyViewMessageHandler) handler).setOverlayCache(overlayCache);
- }
-
- if (handler instanceof Topo2ViewMessageHandler) {
- ((Topo2ViewMessageHandler) handler).setOverlayCache(overlay2Cache);
- }
} catch (Exception e) {
log.warn("Unable to setup handler {} due to", handler, e);
}
});
}
- UiTopoOverlayFactory overlayFactory = ext.topoOverlayFactory();
- if (overlayFactory != null) {
- overlayFactory.newOverlays().forEach(overlayCache::add);
- }
-
- UiTopo2OverlayFactory overlay2Factory = ext.topo2OverlayFactory();
- if (overlay2Factory != null) {
- overlay2Factory.newOverlays().forEach(overlay2Cache::add);
- }
+ registerOverlays(ext);
});
- log.debug("#handlers = {}, #overlays = {}", handlers.size(),
- overlayCache.size());
+
+ handlerCrossConnects(handlerInstances);
+
+ log.debug("#handlers = {}, #overlays = {}", handlers.size(), overlayCache.size());
+ }
+
+ private void registerOverlays(UiExtension ext) {
+ UiTopoOverlayFactory overlayFactory = ext.topoOverlayFactory();
+ if (overlayFactory != null) {
+ overlayFactory.newOverlays().forEach(overlayCache::add);
+ }
+
+ UiTopo2OverlayFactory overlay2Factory = ext.topo2OverlayFactory();
+ if (overlay2Factory != null) {
+ overlay2Factory.newOverlays().forEach(overlay2Cache::add);
+ }
+ }
+
+ private void handlerCrossConnects(Map<Class<?>, UiMessageHandler> handlers) {
+ TopologyViewMessageHandler topomh = (TopologyViewMessageHandler)
+ handlers.get(TopologyViewMessageHandler.class);
+ if (topomh != null) {
+ topomh.setOverlayCache(overlayCache);
+ }
+
+ Topo2ViewMessageHandler topo2mh = (Topo2ViewMessageHandler)
+ handlers.get(Topo2ViewMessageHandler.class);
+ if (topo2mh != null) {
+ topo2mh.setOverlayCache(overlay2Cache);
+
+ // We also need a link to Topo2Traffic
+ Topo2TrafficMessageHandler topo2traffic = (Topo2TrafficMessageHandler)
+ handlers.get(Topo2TrafficMessageHandler.class);
+ if (topo2traffic != null) {
+ topo2mh.setTrafficHandler(topo2traffic);
+ } else {
+ log.error("No topo2 traffic handler found");
+ }
+ }
}
// Destroys message handlers.
@@ -325,4 +351,3 @@
}
}
-