ONOS-1479 - GUI Topology Overlay Work - (WIP)
- created TopoOverlayService to allow registration of topology overlays
- modified topoToolbar to include a radio button set for each registered overlay
- created seed traffic overlay

Change-Id: I70770cb1c691730914c81e497823ea08703587f1
diff --git a/web/gui/src/main/webapp/app/view/topo/topoToolbar.js b/web/gui/src/main/webapp/app/view/topo/topoToolbar.js
index 8fec8cb..342e108 100644
--- a/web/gui/src/main/webapp/app/view/topo/topoToolbar.js
+++ b/web/gui/src/main/webapp/app/view/topo/topoToolbar.js
@@ -23,7 +23,7 @@
     'use strict';
 
     // injected references
-    var $log, fs, tbs, ps, api;
+    var $log, fs, tbs, ps, tov, api;
 
     // internal state
     var toolbar, keyData, cachedState;
@@ -142,13 +142,50 @@
         addToggle('B');
         addToggle('S', true);
     }
+
     function addSecondRow() {
         //addToggle('X');
         addToggle('Z');
         addButton('N');
         addButton('L');
         addButton('R');
+        toolbar.addSeparator();
+        addButton('E');
     }
+
+    function setOverlay(overlayId) {
+        if (!overlayId) {
+            $log.debug('CLEAR overlay');
+        } else {
+            $log.debug('SET overlay', overlayId);
+        }
+    }
+
+    function addOverlays() {
+        toolbar.addSeparator();
+
+        // generate radio button set for overlays; start with 'none'
+        var rset = [{
+                gid: 'unknown',
+                tooltip: 'No Overlay',
+                cb: function () { setOverlay(); }
+            }];
+
+        tov.list().forEach(function (key) {
+            var ov = tov.overlay(key);
+            rset.push({
+                gid: ov._glyphId,
+                tooltip: (ov.tooltip || '(no tooltip)'),
+                cb: function () {
+                    setOverlay(ov.overlayId);
+                }
+            });
+        });
+
+        toolbar.addRadioSet('topo-overlays', rset);
+    }
+
+    // TODO: 3rd row needs to be swapped in/out based on selected overlay
     function addThirdRow() {
         addButton('V');
         addButton('leftArrow');
@@ -156,8 +193,6 @@
         addButton('W');
         addButton('A');
         addButton('F');
-        toolbar.addSeparator();
-        addButton('E');
     }
 
     function createToolbar() {
@@ -166,8 +201,10 @@
         addFirstRow();
         toolbar.addRow();
         addSecondRow();
+        addOverlays();
         toolbar.addRow();
         addThirdRow();
+
         if (cachedState.toolbar) {
             toolbar.show();
         } else {
@@ -199,12 +236,14 @@
     angular.module('ovTopo')
         .factory('TopoToolbarService',
         ['$log', 'FnService', 'ToolbarService', 'PrefsService',
+            'TopoOverlayService',
 
-        function (_$log_, _fs_, _tbs_, _ps_) {
+        function (_$log_, _fs_, _tbs_, _ps_, _tov_) {
             $log = _$log_;
             fs = _fs_;
             tbs = _tbs_;
             ps = _ps_;
+            tov = _tov_;
 
             return {
                 init: init,