ONOS-1479 -- GUI - augmenting topology view for extensibility: WIP.

Change-Id: I11820a9ff8f446c0d10a0311cee5ce448c15f402
diff --git a/web/gui/src/main/webapp/app/view/topo/topoTrafficNew.js b/web/gui/src/main/webapp/app/view/topo/topoTrafficNew.js
index 71cb94c..be91f0c 100644
--- a/web/gui/src/main/webapp/app/view/topo/topoTrafficNew.js
+++ b/web/gui/src/main/webapp/app/view/topo/topoTrafficNew.js
@@ -16,7 +16,7 @@
  */
 
 /*
- ONOS GUI -- Topology Traffic Module.
+ ONOS GUI -- Topology Traffic Overlay Module.
  Defines behavior for viewing different traffic modes.
  Installed as a Topology Overlay.
  */
@@ -24,7 +24,13 @@
     'use strict';
 
     // injected refs
-    var $log;
+    var $log, tov, tts;
+
+    // NOTE: no internal state here -- see TopoTrafficService for that
+
+    // NOTE: providing button disabling requires too big a refactoring of
+    //       the button factory etc. Will have to be done another time.
+
 
     // traffic overlay definition
     var overlay = {
@@ -32,26 +38,112 @@
         glyphId: 'allTraffic',
         tooltip: 'Traffic Overlay',
 
-        activate: activateTraffic,
-        deactivate: deactivateTraffic
+        // NOTE: Traffic glyphs already installed as part of the base ONOS set.
+
+        activate: function () {
+            $log.debug("Traffic overlay ACTIVATED");
+        },
+
+        deactivate: function () {
+            tts.cancelTraffic();
+            $log.debug("Traffic overlay DEACTIVATED");
+        },
+
+        // detail panel button definitions
+        // (keys match button identifiers, also defined in TrafficOverlay.java)
+        buttons: {
+            showDeviceFlows: {
+                gid: 'flows',
+                tt: 'Show Device Flows',
+                cb: function (data) { tts.showDeviceLinkFlows(); }
+            },
+
+            showRelatedTraffic: {
+                gid: 'relatedIntents',
+                tt: 'Show Related Traffic',
+                cb: function (data) { tts.showRelatedIntents(); }
+            }
+        },
+
+        // key bindings for traffic overlay toolbar buttons
+        // NOTE: fully qual. button ID is derived from overlay-id and key-name
+        keyBindings: {
+            0: {
+                cb: function () { tts.cancelTraffic(); },
+                tt: 'Cancel traffic monitoring',
+                gid: 'xMark'
+            },
+
+            A: {
+                cb: function () { tts.showAllFlowTraffic(); },
+                tt: 'Monitor all traffic using flow stats',
+                gid: 'allTraffic'
+            },
+            Q: {
+                cb: function () { tts.showAllPortTraffic(); },
+                tt: 'Monitor all traffic using port stats',
+                gid: 'allTraffic'
+            },
+            F: {
+                cb: function () { tts.showDeviceLinkFlows(); },
+                tt: 'Show device link flows',
+                gid: 'flows'
+            },
+            V: {
+                cb: function () { tts.showRelatedIntents(); },
+                tt: 'Show all related intents',
+                gid: 'relatedIntents'
+            },
+            leftArrow: {
+                cb: function () { tts.showPrevIntent(); },
+                tt: 'Show previous related intent',
+                gid: 'prevIntent'
+            },
+            rightArrow: {
+                cb: function () { tts.showNextIntent(); },
+                tt: 'Show next related intent',
+                gid: 'nextIntent'
+            },
+            W: {
+                cb: function () { tts.showSelectedIntentTraffic(); },
+                tt: 'Monitor traffic of selected intent',
+                gid: 'intentTraffic'
+            },
+
+            _keyOrder: [
+                '0', 'A', 'Q', 'F', 'V', 'leftArrow', 'rightArrow', 'W'
+            ]
+        },
+
+        hooks: {
+            // hook for handling escape key
+            escape: function () {
+                // Must return true to consume ESC, false otherwise.
+                return tts.cancelTraffic();
+            },
+
+            // hooks for when the selection changes...
+            empty: function () {
+                tts.cancelTraffic();
+            },
+            single: function (data) {
+                tts.requestTrafficForMode();
+            },
+            multi: function (selectOrder) {
+                tts.requestTrafficForMode();
+                tov.addDetailButton('showRelatedTraffic');
+            }
+        }
     };
 
-    // === implementation of overlay API (essentially callbacks)
-    function activateTraffic() {
-        $log.debug("Topology traffic overlay ACTIVATED");
-    }
-
-    function deactivateTraffic() {
-        $log.debug("Topology traffic overlay DEACTIVATED");
-    }
-
-
     // invoke code to register with the overlay service
     angular.module('ovTopo')
-        .run(['$log', 'TopoOverlayService',
+        .run(['$log', 'TopoOverlayService', 'TopoTrafficService',
 
-        function (_$log_, tov) {
+        function (_$log_, _tov_, _tts_) {
             $log = _$log_;
+            tov = _tov_;
+            tts = _tts_;
             tov.register(overlay);
         }]);