GUI2 Added intents to Traffic2 Monitor

Change-Id: I92744f214b96b6abcb09fac3afa9c497780065e5
diff --git a/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/traffic.service.ts b/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/traffic.service.ts
index 6864414..74afe35 100644
--- a/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/traffic.service.ts
+++ b/web/gui2-topo-lib/projects/gui2-topo-lib/src/lib/traffic.service.ts
@@ -17,25 +17,42 @@
 import {LogService, WebSocketService} from 'gui2-fw-lib';
 import {ForceSvgComponent} from './layer/forcesvg/forcesvg.component';
 
-export enum TrafficType {
-    IDLE,
-    FLOWSTATSBYTES = 'flowStatsBytes',
-    PORTSTATSBITSEC = 'portStatsBitSec',
-    PORTSTATSPKTSEC = 'portStatsPktSec',
+export namespace TrafficType {
+    /**
+     * Toggle state for how the traffic should be displayed
+     */
+    export enum Enum { // Do not add an alias - they need to be number indexed
+        FLOWSTATSBYTES, // 0 flowStatsBytes
+        PORTSTATSBITSEC, // 1 portStatsBitSec
+        PORTSTATSPKTSEC // 2 portStatsPktSec
+    }
+
+    /**
+     * Add the method 'next()' to the TrafficType enum above
+     */
+    export function next(current: Enum) {
+        if (current === Enum.FLOWSTATSBYTES) {
+            return Enum.PORTSTATSBITSEC;
+        } else if (current === Enum.PORTSTATSBITSEC) {
+            return Enum.PORTSTATSPKTSEC;
+        } else if (current === Enum.PORTSTATSPKTSEC) {
+            return Enum.FLOWSTATSBYTES;
+        } else { // e.g. undefined
+            return Enum.PORTSTATSBITSEC;
+        }
+    }
+
+    export function literal(type: Enum) {
+        if (type === Enum.FLOWSTATSBYTES) {
+            return 'flowStatsBytes';
+        } else if (type === Enum.PORTSTATSBITSEC) {
+            return 'portStatsBitSec';
+        } else if (type === Enum.PORTSTATSPKTSEC) {
+            return 'portStatsPktSec';
+        }
+    }
 }
 
-const ALL_TRAFFIC_TYPES = [
-    TrafficType.FLOWSTATSBYTES,
-    TrafficType.PORTSTATSBITSEC,
-    TrafficType.PORTSTATSPKTSEC
-];
-
-const ALL_TRAFFIC_MSGS = [
-    'Flow Stats (bytes)',
-    'Port Stats (bits / second)',
-    'Port Stats (packets / second)',
-];
-
 /**
  * ONOS GUI -- Traffic Service Module.
  */
@@ -43,6 +60,7 @@
 export class TrafficService {
     private handlers: string[] = [];
     private openListener: any;
+    private trafficType: TrafficType.Enum;
 
     constructor(
         protected log: LogService,
@@ -64,26 +82,31 @@
         // in case we fail over to a new server,
         // listen for wsock-open events
         this.openListener = this.wss.addOpenListener(() => this.wsOpen);
-
-        // tell the server we are ready to receive topology events
-        this.wss.sendEvent('topo2RequestAllTraffic', {
-            trafficType: TrafficType.FLOWSTATSBYTES
-        });
-        this.log.debug('Topo2Traffic: Show All Traffic');
     }
 
     destroy() {
-        this.wss.sendEvent('topo2CancelTraffic', {});
         this.wss.unbindHandlers(this.handlers);
         this.handlers.pop();
-        this.log.debug('Traffic monitoring canceled');
     }
 
     wsOpen(host: string, url: string) {
         this.log.debug('topo2RequestAllTraffic: WSopen - cluster node:', host, 'URL:', url);
         // tell the server we are ready to receive topo events
         this.wss.sendEvent('topo2RequestAllTraffic', {
-            trafficType: TrafficType.FLOWSTATSBYTES
+            trafficType: TrafficType.literal(this.trafficType)
         });
     }
+
+    requestTraffic(trafficType: TrafficType.Enum) {
+        // tell the server we are ready to receive topology events
+        this.wss.sendEvent('topo2RequestAllTraffic', {
+            trafficType: TrafficType.literal(trafficType)
+        });
+        this.log.debug('Topo2Traffic: Show', trafficType);
+    }
+
+    cancelTraffic() {
+        this.wss.sendEvent('topo2CancelTraffic', {});
+        this.log.debug('Traffic monitoring canceled');
+    }
 }