ONOS-1479 - GUI Topology Overlay Work - (WIP)
- UiExtension now uses Builder Pattern; added topology overlay factory.
- Refactored UiExtensionTest (and other classes) to use builder.
- Created UiTopoOverlayFactory, UiTopoOverlay, and TopoOverlayCache.
- Started implementation of TrafficOverlay.
- Inject TopoOverlayCache into TopologyViewMessageHandler; added TopoSelectOverlay request handler.
- Modified UiExtensionManager to create traffic overlay.
- Augmented UiWebSocket to create overlays on demand, and inject overlay cache into topo view message handler.
- added client side wiring to switch overlays.

Change-Id: I6f99596aefb3b87382517ce929d268a2447545ee
diff --git a/web/gui/src/main/webapp/app/view/topo/topoOverlay.js b/web/gui/src/main/webapp/app/view/topo/topoOverlay.js
index e1efe47..fd704a6 100644
--- a/web/gui/src/main/webapp/app/view/topo/topoOverlay.js
+++ b/web/gui/src/main/webapp/app/view/topo/topoOverlay.js
@@ -30,10 +30,11 @@
     var tos = 'TopoOverlayService: ';
 
     // injected refs
-    var $log, fs, gs;
+    var $log, fs, gs, wss;
 
     // internal state
-    var overlays = {};
+    var overlays = {},
+        current = null;
 
     function error(fn, msg) {
         $log.error(tos + fn + '(): ' + msg);
@@ -108,20 +109,42 @@
         return overlays[id];
     }
 
+    // an overlay was selected via toolbar radio button press from user
+    function tbSelection(id) {
+        var same = current && current.overlayId === id,
+            payload = {};
+
+        function doop(op) {
+            var oid = current.overlayId;
+            $log.debug('Overlay:', op, oid);
+            current[op]();
+            payload[op] = oid;
+        }
+
+        if (!same) {
+            current && doop('deactivate');
+            current = overlay(id);
+            current && doop('activate');
+            wss.sendEvent('topoSelectOverlay', payload);
+        }
+    }
+
     angular.module('ovTopo')
     .factory('TopoOverlayService',
-        ['$log', 'FnService', 'GlyphService',
+        ['$log', 'FnService', 'GlyphService', 'WebSocketService',
 
-        function (_$log_, _fs_, _gs_) {
+        function (_$log_, _fs_, _gs_, _wss_) {
             $log = _$log_;
             fs = _fs_;
             gs = _gs_;
+            wss = _wss_;
 
             return {
                 register: register,
                 unregister: unregister,
                 list: list,
-                overlay: overlay
+                overlay: overlay,
+                tbSelection: tbSelection
             }
         }]);