GUI - Fixed link labels - now they update correctly.
- Fixed repositioning of icon underlay rectangle on label cycle.
- updateInstance() event handler started (WIP)

Change-Id: Icd1d4bd35369ccbe9b6a5f6e92d95016f0e475d8
diff --git a/web/gui/src/main/webapp/json/ev/links/ev_23_onos.json b/web/gui/src/main/webapp/json/ev/links/ev_23_onos.json
index 2c42f2d..1fd53cd 100644
--- a/web/gui/src/main/webapp/json/ev/links/ev_23_onos.json
+++ b/web/gui/src/main/webapp/json/ev/links/ev_23_onos.json
@@ -12,9 +12,9 @@
           "of:0000ffffffff0007/1-0E:2A:69:30:13:89/-1/0"
         ],
         "labels": [
-          "Load{rate=20, latest=20000}",
-          "Load{rate=10, latest=20000}",
-          ""
+          "123 bytes",
+          "10 bytes",
+          "0 bytes"
         ]
       }
     ]
diff --git a/web/gui/src/main/webapp/json/ev/links/ev_24_onos.json b/web/gui/src/main/webapp/json/ev/links/ev_24_onos.json
index 00702ea..b797752 100644
--- a/web/gui/src/main/webapp/json/ev/links/ev_24_onos.json
+++ b/web/gui/src/main/webapp/json/ev/links/ev_24_onos.json
@@ -12,9 +12,9 @@
           "of:0000ffffffff0007/1-0E:2A:69:30:13:89/-1/0"
         ],
         "labels": [
-          "",
-          "Load{rate=98, latest=38456}",
-          "Load{rate=98, latest=38789}"
+          "99997 bytes",
+          "200 bytes",
+          "3.1415926 bytes"
         ]
       }
     ]
diff --git a/web/gui/src/main/webapp/topo2.js b/web/gui/src/main/webapp/topo2.js
index e6bea48..3cd4d2e 100644
--- a/web/gui/src/main/webapp/topo2.js
+++ b/web/gui/src/main/webapp/topo2.js
@@ -643,6 +643,21 @@
     }
 
     // TODO: fold updateX(...) methods into one base method; remove duplication
+
+    function updateInstance(data) {
+        evTrace(data);
+        var inst = data.payload,
+            id = inst.id,
+            instData = onosInstances[id];
+        if (instData) {
+            $.extend(instData, inst);
+            updateInstances();
+            //updateInstanceState(instData);
+        } else {
+            logicError('updateInstance lookup fail. ID = "' + id + '"');
+        }
+    }
+
     function updateDevice(data) {
         evTrace(data);
         var device = data.payload,
@@ -1082,7 +1097,15 @@
         linkLabel = linkLabelG.selectAll('.linkLabel')
             .data(data, function (d) { return d.id; });
 
-        linkLabel.text(function (d) { return d.label; });
+        // for elements already existing, we need to update the text
+        // and adjust the rectangle size to fit
+        linkLabel.each(function (d) {
+            var el = d3.select(this),
+                rect = el.select('rect'),
+                text = el.select('text');
+            text.text(d.label);
+            rect.attr(rectAroundText(el));
+        });
 
         entering = linkLabel.enter().append('g')
             .classed('linkLabel', true)
@@ -1302,10 +1325,15 @@
             .transition()
             .attr(box);
 
-        node.select('image')
+        node.select('rect.iconUnderlay')
             .transition()
             .attr('x', box.x + config.icons.xoff)
             .attr('y', box.y + config.icons.yoff);
+
+        node.select('image')
+            .transition()
+            .attr('x', box.x + config.icons.xoff + 2)
+            .attr('y', box.y + config.icons.yoff + 2);
     }
 
     function updateHostLabel(d) {
@@ -1410,6 +1438,7 @@
                 var cfg = config.icons;
                 node.append('rect')
                     .attr({
+                        class: 'iconUnderlay',
                         x: box.x + config.icons.xoff,
                         y: box.y + config.icons.yoff,
                         width: cfg.w,