GUI Topo -- added NodeBadge field to NodeHighlight.
 - updated TopoJson to include device badge in JSON output.

Change-Id: I7fc0ec226c378a0395cd1eec765cb7bc867f9100
diff --git a/core/api/src/main/java/org/onosproject/ui/topo/DeviceHighlight.java b/core/api/src/main/java/org/onosproject/ui/topo/DeviceHighlight.java
index 0ce6592..0cc1547 100644
--- a/core/api/src/main/java/org/onosproject/ui/topo/DeviceHighlight.java
+++ b/core/api/src/main/java/org/onosproject/ui/topo/DeviceHighlight.java
@@ -17,16 +17,16 @@
 package org.onosproject.ui.topo;
 
 /**
- * Denotes the highlighting to apply to a device.
+ * Denotes the highlighting to be applied to a device.
  */
 public class DeviceHighlight extends NodeHighlight {
 
+    /**
+     * Constructs a device highlight entity.
+     *
+     * @param deviceId the device identifier
+     */
     public DeviceHighlight(String deviceId) {
         super(TopoElementType.DEVICE, deviceId);
     }
-
-    // TODO: implement device highlighting:
-    //   - visual highlight
-    //   - badging
-
 }
diff --git a/core/api/src/main/java/org/onosproject/ui/topo/NodeHighlight.java b/core/api/src/main/java/org/onosproject/ui/topo/NodeHighlight.java
index 61e10c5..6923508 100644
--- a/core/api/src/main/java/org/onosproject/ui/topo/NodeHighlight.java
+++ b/core/api/src/main/java/org/onosproject/ui/topo/NodeHighlight.java
@@ -20,7 +20,34 @@
  * Parent class of {@link DeviceHighlight} and {@link HostHighlight}.
  */
 public abstract class NodeHighlight extends AbstractHighlight {
+
+    private NodeBadge badge;
+
+    /**
+     * Constructs a node highlight entity.
+     *
+     * @param type element type
+     * @param elementId element identifier
+     */
     public NodeHighlight(TopoElementType type, String elementId) {
         super(type, elementId);
     }
+
+    /**
+     * Sets the badge for this node.
+     *
+     * @param badge badge to apply
+     */
+    public void setBadge(NodeBadge badge) {
+        this.badge = badge;
+    }
+
+    /**
+     * Returns the badge for this node, if any.
+     *
+     * @return badge, or null
+     */
+    public NodeBadge badge() {
+        return badge;
+    }
 }
diff --git a/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java b/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java
index 8df0316..d4990f3 100644
--- a/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java
+++ b/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java
@@ -37,6 +37,8 @@
     static final String ID = "id";
     static final String LABEL = "label";
     static final String CSS = "css";
+    static final String BADGE = "badge";
+    static final String MSG = "msg";
 
     static final String TITLE = "title";
     static final String TYPE = "type";
@@ -103,6 +105,13 @@
         if (dh.subdued()) {
             n.put(SUBDUE, true);
         }
+        NodeBadge badge = dh.badge();
+        if (badge != null) {
+            ObjectNode b = objectNode()
+                    .put(TYPE, badge.type().code())
+                    .put(MSG, badge.message());
+            n.set(BADGE, b);
+        }
         return n;
     }