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

Change-Id: I11820a9ff8f446c0d10a0311cee5ce448c15f402
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java
index 9a360bf..b88ee4f 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java
@@ -214,6 +214,8 @@
                 new UpdateMeta(),
                 new EqMasters(),
 
+                // TODO: implement "showHighlights" event (replaces "showTraffic")
+
                 // TODO: migrate traffic related to separate app
                 new AddHostIntent(),
                 new AddMultiSourceIntent(),
@@ -965,6 +967,14 @@
 
         @Override
         public void processItems(List<Event> items) {
+            // Start-of-Debugging
+            long now = System.currentTimeMillis();
+            String me = this.toString();
+            String miniMe = me.replaceAll("^.*@", "me@");
+            log.debug("Time: {}; this: {}, processing items ({} events)",
+                      now, miniMe, items.size());
+            // End-of-Debugging
+
             try {
                 if (summaryRunning) {
                     msgSender.execute(() -> requestSummary(0));
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java
index 8dbb111..9265e5f 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandlerBase.java
@@ -72,7 +72,7 @@
 import org.onosproject.ui.JsonUtils;
 import org.onosproject.ui.UiConnection;
 import org.onosproject.ui.UiMessageHandler;
-import org.onosproject.ui.topo.ButtonDescriptor;
+import org.onosproject.ui.topo.ButtonId;
 import org.onosproject.ui.topo.PropertyPanel;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -123,6 +123,8 @@
             new ProviderId("core", "org.onosproject.core", true);
     private static final String COMPACT = "%s/%s-%s/%s";
 
+    private static final String SHOW_HIGHLIGHTS = "showHighlights";
+
     private static final double KILO = 1024;
     private static final double MEGA = 1024 * KILO;
     private static final double GIGA = 1024 * MEGA;
@@ -642,7 +644,7 @@
                 labelsN.add("");
             }
         }
-        return JsonUtils.envelope("showTraffic", 0, payload);
+        return JsonUtils.envelope(SHOW_HIGHLIGHTS, 0, payload);
     }
 
     private Load getLinkLoad(Link link) {
@@ -679,7 +681,7 @@
                 addLinkFlows(link, paths, counts.get(link));
             }
         }
-        return JsonUtils.envelope("showTraffic", 0, payload);
+        return JsonUtils.envelope(SHOW_HIGHLIGHTS, 0, payload);
     }
 
     private void addLinkFlows(Link link, ArrayNode paths, Integer count) {
@@ -723,7 +725,7 @@
             ((ArrayNode) pathNode.path("labels")).add(hasTraffic ? formatBytes(biLink.bytes) : "");
         }
 
-        return JsonUtils.envelope("showTraffic", 0, payload);
+        return JsonUtils.envelope(SHOW_HIGHLIGHTS, 0, payload);
     }
 
     // Classifies the link traffic according to the specified classes.
@@ -870,21 +872,13 @@
         result.set("props", pnode);
 
         ArrayNode buttons = arrayNode();
-        for (ButtonDescriptor b : pp.buttons()) {
-            buttons.add(json(b));
+        for (ButtonId b : pp.buttons()) {
+            buttons.add(b.id());
         }
         result.set("buttons", buttons);
         return result;
     }
 
-    // translates the button descriptor into JSON
-    private ObjectNode json(ButtonDescriptor bdesc) {
-        return objectNode()
-                .put("id", bdesc.id())
-                .put("gid", bdesc.glyphId())
-                .put("tt", bdesc.tooltip());
-    }
-
 
     // Produces canonical link key, i.e. one that will match link and its inverse.
     static LinkKey canonicalLinkKey(Link link) {
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/TrafficOverlay.java b/web/gui/src/main/java/org/onosproject/ui/impl/TrafficOverlay.java
index 3c09bb4..6eec92f 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/TrafficOverlay.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/TrafficOverlay.java
@@ -18,6 +18,8 @@
 package org.onosproject.ui.impl;
 
 import org.onosproject.ui.UiTopoOverlay;
+import org.onosproject.ui.topo.ButtonId;
+import org.onosproject.ui.topo.PropertyPanel;
 
 /**
  * Topology Overlay for network traffic.
@@ -25,12 +27,21 @@
 public class TrafficOverlay extends UiTopoOverlay {
     private static final String TRAFFIC_ID = "traffic";
 
-    /**
-     * Constructs the traffic overlay.
-     */
+    private static final String SDF_ID = "showDeviceFlows";
+    private static final String SRT_ID = "showRelatedTraffic";
+
+    private static final ButtonId SHOW_DEVICE_FLOWS = new ButtonId(SDF_ID);
+    private static final ButtonId SHOW_RELATED_TRAFFIC = new ButtonId(SRT_ID);
+
+
     public TrafficOverlay() {
         super(TRAFFIC_ID);
     }
 
-    // TODO : override init(), activate(), deactivate(), destroy()
+    @Override
+    public void modifyDeviceDetails(PropertyPanel pp) {
+        pp.addButton(SHOW_DEVICE_FLOWS)
+            .addButton(SHOW_RELATED_TRAFFIC);
+    }
+
 }