ONOS-1479 - GUI Topology Overlay Work - (WIP)
- Implemented initial ability to have overlay modify the summary panel data.

Change-Id: I0d6bd6d62f0e0d5ba9d901a47271044e0c8d0c89
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 336d6f2..42dcd9f 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,6 +72,7 @@
 import org.onosproject.ui.JsonUtils;
 import org.onosproject.ui.UiConnection;
 import org.onosproject.ui.UiMessageHandler;
+import org.onosproject.ui.topo.PropertyPanel;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -443,19 +444,20 @@
     }
 
     // Returns summary response.
-    protected ObjectNode summmaryMessage(long sid) {
+    protected PropertyPanel summmaryMessage(long sid) {
         Topology topology = topologyService.currentTopology();
-        return JsonUtils.envelope("showSummary", sid,
-                                  json("ONOS Summary", "node",
-                                       new Prop("Devices", format(topology.deviceCount())),
-                                       new Prop("Links", format(topology.linkCount())),
-                                       new Prop("Hosts", format(hostService.getHostCount())),
-                                       new Prop("Topology SCCs", format(topology.clusterCount())),
-                                       new Separator(),
-                                       new Prop("Intents", format(intentService.getIntentCount())),
-                                       new Prop("Tunnels", format(tunnelService.tunnelCount())),
-                                       new Prop("Flows", format(flowService.getFlowRuleCount())),
-                                       new Prop("Version", version)));
+        PropertyPanel pp = new PropertyPanel("ONOS Summary", "node")
+            .add(new PropertyPanel.Prop("Devices", format(topology.deviceCount())))
+            .add(new PropertyPanel.Prop("Links", format(topology.linkCount())))
+            .add(new PropertyPanel.Prop("Hosts", format(hostService.getHostCount())))
+            .add(new PropertyPanel.Prop("Topology SCCs", format(topology.clusterCount())))
+            .add(new PropertyPanel.Separator())
+            .add(new PropertyPanel.Prop("Intents", format(intentService.getIntentCount())))
+            .add(new PropertyPanel.Prop("Tunnels", format(tunnelService.tunnelCount())))
+            .add(new PropertyPanel.Prop("Flows", format(flowService.getFlowRuleCount())))
+            .add(new PropertyPanel.Prop("Version", version));
+
+        return pp;
     }
 
     // Returns device details response.
@@ -840,6 +842,20 @@
                              link.dst().elementId(), link.dst().port());
     }
 
+    protected ObjectNode json(PropertyPanel pp) {
+        ObjectNode result = objectNode()
+                .put("title", pp.title()).put("type", pp.typeId());
+        ObjectNode pnode = objectNode();
+        ArrayNode porder = arrayNode();
+        for (PropertyPanel.Prop p : pp.properties()) {
+            porder.add(p.key());
+            pnode.put(p.key(), p.value());
+        }
+        result.set("propOrder", porder);
+        result.set("props", pnode);
+        return result;
+    }
+
     // Produces JSON property details.
     private ObjectNode json(String id, String type, Prop... props) {
         ObjectNode result = objectNode()