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;
- }
-
-}