ONOS-6258: UiTopo2Overlay et al.
 - initial support for topo-2 highlighting.

Change-Id: I71c61b902047153ea420a8b2ecd89f6950daa4a9
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 00295c4..c302c6b 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
@@ -28,9 +28,12 @@
 import org.onosproject.ui.UiExtensionService;
 import org.onosproject.ui.UiMessageHandler;
 import org.onosproject.ui.UiMessageHandlerFactory;
+import org.onosproject.ui.UiTopo2OverlayFactory;
 import org.onosproject.ui.UiTopoLayoutService;
 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.Topo2ViewMessageHandler;
 import org.onosproject.ui.impl.topo.UiTopoSession;
 import org.onosproject.ui.impl.topo.model.UiSharedTopologyModel;
 import org.onosproject.ui.model.topo.UiTopoLayout;
@@ -50,7 +53,6 @@
     private static final Logger log = LoggerFactory.getLogger(UiWebSocket.class);
 
     private static final String EVENT = "event";
-    private static final String SID = "sid";
     private static final String PAYLOAD = "payload";
     private static final String UNKNOWN = "unknown";
 
@@ -81,6 +83,7 @@
 
     private Map<String, UiMessageHandler> handlers;
     private TopoOverlayCache overlayCache;
+    private Topo2OverlayCache overlay2Cache;
 
     /**
      * Creates a new web-socket for serving data to the Web UI.
@@ -190,7 +193,7 @@
         topoSession.destroy();
         destroyHandlersAndOverlays();
         log.info("GUI client disconnected [close-code={}, message={}]",
-                closeCode, message);
+                 closeCode, message);
     }
 
     @Override
@@ -244,6 +247,7 @@
         log.debug("Creating handlers and overlays...");
         handlers = new HashMap<>();
         overlayCache = new TopoOverlayCache();
+        overlay2Cache = new Topo2OverlayCache();
 
         UiExtensionService service = directory.get(UiExtensionService.class);
         service.getExtensions().forEach(ext -> {
@@ -255,10 +259,13 @@
                         handler.messageTypes().forEach(type -> handlers.put(type, handler));
 
                         // need to inject the overlay cache into topology message handler
-                        // TODO: code for Topo2ViewMessageHandler required here
                         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);
                     }
@@ -269,9 +276,14 @@
             if (overlayFactory != null) {
                 overlayFactory.newOverlays().forEach(overlayCache::add);
             }
+
+            UiTopo2OverlayFactory overlay2Factory = ext.topo2OverlayFactory();
+            if (overlay2Factory != null) {
+                overlay2Factory.newOverlays().forEach(overlay2Cache::add);
+            }
         });
         log.debug("#handlers = {}, #overlays = {}", handlers.size(),
-                overlayCache.size());
+                  overlayCache.size());
     }
 
     // Destroys message handlers.
@@ -298,7 +310,7 @@
                     .put(ID, node.id().toString())
                     .put(IP, node.ip().toString())
                     .put(GlyphConstants.UI_ATTACHED,
-                            node.equals(service.getLocalNode()));
+                         node.equals(service.getLocalNode()));
             instances.add(instance);
         }