ONOS-2186 - GUI Topo Overlay - (WIP)
- Moved TopoJson to core ui API, so it is accessible to external apps
- Added highlightsMessage() to TopoJson
- Pulled sendMessage() up to UiMessageHandler

Change-Id: Iacab5b69e3b2a6db98be8391274695247ba5526d
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 1e8f403..8acdc2c 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
@@ -80,7 +80,8 @@
 import static org.onosproject.net.host.HostEvent.Type.HOST_ADDED;
 import static org.onosproject.net.link.LinkEvent.Type.LINK_ADDED;
 import static org.onosproject.ui.JsonUtils.envelope;
-import static org.onosproject.ui.impl.topo.TopoJson.json;
+import static org.onosproject.ui.topo.TopoJson.highlightsMessage;
+import static org.onosproject.ui.topo.TopoJson.json;
 
 /**
  * Web socket capable of interacting with the GUI topology view.
@@ -538,15 +539,7 @@
 
     // Converts highlights to JSON format and sends the message to the client
     protected void sendHighlights(Highlights highlights) {
-        sendMessage(envelope(SHOW_HIGHLIGHTS, json(highlights)));
-    }
-
-    // Sends the specified data to the client.
-    protected synchronized void sendMessage(ObjectNode data) {
-        UiConnection connection = connection();
-        if (connection != null) {
-            connection.sendMessage(data);
-        }
+        sendMessage(highlightsMessage(highlights));
     }
 
     // Subscribes for summary messages.
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/TopoJson.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/TopoJson.java
deleted file mode 100644
index 91cbc05..0000000
--- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/TopoJson.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.onosproject.ui.impl.topo;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import org.onosproject.ui.topo.ButtonId;
-import org.onosproject.ui.topo.DeviceHighlight;
-import org.onosproject.ui.topo.Highlights;
-import org.onosproject.ui.topo.HostHighlight;
-import org.onosproject.ui.topo.LinkHighlight;
-import org.onosproject.ui.topo.PropertyPanel;
-
-/**
- * JSON utilities for the Topology View.
- */
-public final class TopoJson {
-    // package-private for unit test access
-    static final String DEVICES = "devices";
-    static final String HOSTS = "hosts";
-    static final String LINKS = "links";
-    static final String SUBDUE = "subdue";
-
-    static final String ID = "id";
-    static final String LABEL = "label";
-    static final String CSS = "css";
-
-    static final String TITLE = "title";
-    static final String TYPE = "type";
-    static final String PROP_ORDER = "propOrder";
-    static final String PROPS = "props";
-    static final String BUTTONS = "buttons";
-
-
-    private static final ObjectMapper MAPPER = new ObjectMapper();
-
-    private static ObjectNode objectNode() {
-        return MAPPER.createObjectNode();
-    }
-
-    private static ArrayNode arrayNode() {
-        return MAPPER.createArrayNode();
-    }
-
-    // non-instantiable
-    private TopoJson() { }
-
-    /**
-     * Transforms the given highlights model into a JSON message payload.
-     *
-     * @param highlights the model to transform
-     * @return JSON payload
-     */
-    public static ObjectNode json(Highlights highlights) {
-        ObjectNode payload = objectNode();
-
-        ArrayNode devices = arrayNode();
-        ArrayNode hosts = arrayNode();
-        ArrayNode links = arrayNode();
-
-        payload.set(DEVICES, devices);
-        payload.set(HOSTS, hosts);
-        payload.set(LINKS, links);
-
-        highlights.devices().forEach(dh -> devices.add(json(dh)));
-        highlights.hosts().forEach(hh -> hosts.add(json(hh)));
-        highlights.links().forEach(lh -> links.add(json(lh)));
-
-        Highlights.Amount toSubdue = highlights.subdueLevel();
-        if (!toSubdue.equals(Highlights.Amount.ZERO)) {
-            payload.put(SUBDUE, toSubdue.toString());
-        }
-        return payload;
-    }
-
-    private static ObjectNode json(DeviceHighlight dh) {
-        ObjectNode n = objectNode()
-                .put(ID, dh.elementId());
-        if (dh.subdued()) {
-            n.put(SUBDUE, true);
-        }
-        return n;
-    }
-
-    private static ObjectNode json(HostHighlight hh) {
-        ObjectNode n = objectNode()
-                .put(ID, hh.elementId());
-        if (hh.subdued()) {
-            n.put(SUBDUE, true);
-        }
-        return n;
-    }
-
-    private static ObjectNode json(LinkHighlight lh) {
-        ObjectNode n = objectNode()
-                .put(ID, lh.elementId())
-                .put(LABEL, lh.label())
-                .put(CSS, lh.cssClasses());
-        if (lh.subdued()) {
-            n.put(SUBDUE, true);
-        }
-        return n;
-    }
-
-    /**
-     * Translates the given property panel into JSON, for returning
-     * to the client.
-     *
-     * @param pp the property panel model
-     * @return JSON payload
-     */
-    public static ObjectNode json(PropertyPanel pp) {
-        ObjectNode result = objectNode()
-                .put(TITLE, pp.title())
-                .put(TYPE, pp.typeId())
-                .put(ID, pp.id());
-
-        ObjectNode pnode = objectNode();
-        ArrayNode porder = arrayNode();
-        for (PropertyPanel.Prop p : pp.properties()) {
-            porder.add(p.key());
-            pnode.put(p.key(), p.value());
-        }
-        result.set(PROP_ORDER, porder);
-        result.set(PROPS, pnode);
-
-        ArrayNode buttons = arrayNode();
-        for (ButtonId b : pp.buttons()) {
-            buttons.add(b.id());
-        }
-        result.set(BUTTONS, buttons);
-        return result;
-    }
-
-}