diff options
Diffstat (limited to 'framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo')
5 files changed, 275 insertions, 6 deletions
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/DeviceHighlight.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/DeviceHighlight.java index 0ce6592c..0cc15475 100644 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/DeviceHighlight.java +++ b/framework/src/onos/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/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/NodeBadge.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/NodeBadge.java new file mode 100644 index 00000000..7b517111 --- /dev/null +++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/NodeBadge.java @@ -0,0 +1,220 @@ +/* + * 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.topo; + +/** + * Designates a badge to be applied to a node in the topology view. + */ +public final class NodeBadge { + + private static final String EMPTY = ""; + + /** Designates the badge status. */ + public enum Status { + INFO("i"), + WARN("w"), + ERROR("e"); + + private String code; + + Status(String code) { + this.code = code; + } + + @Override + public String toString() { + return "{" + code + "}"; + } + + /** Returns the status code in string form. */ + public String code() { + return code; + } + } + + private final Status status; + private final boolean isGlyph; + private final String text; + private final String message; + + // only instantiated through static methods. + private NodeBadge(Status status, boolean isGlyph, String text, String message) { + this.status = status == null ? Status.INFO : status; + this.isGlyph = isGlyph; + this.text = text; + this.message = message; + } + + @Override + public String toString() { + return "{Badge " + status + + " (" + text + ")" + + (isGlyph ? "*G " : " ") + + "\"" + message + "\"}"; + } + + /** + * Returns the badge status. + * + * @return badge status + */ + public Status status() { + return status; + } + + /** + * Returns true if the text for this badge designates a glyph ID. + * + * @return true if badge uses glyph + */ + public boolean isGlyph() { + return isGlyph; + } + + /** + * Returns the text for the badge. + * Note that if {@link #isGlyph} is true, the text is a glyph ID, otherwise + * the text is displayed verbatim in the badge. + * + * @return text for badge + */ + public String text() { + return text; + } + + /** + * Returns the message associated with the badge. + * + * @return associated message + */ + public String message() { + return message; + } + + private static String nonNull(String s) { + return s == null ? EMPTY : s; + } + + /** + * Returns an arbitrary text badge, with default status. + * + * @param txt the text + * @return node badge to display text + */ + public static NodeBadge text(String txt) { + // TODO: consider length constraint on txt (3 chars?) + return new NodeBadge(Status.INFO, false, nonNull(txt), null); + } + + /** + * Returns a glyph badge, with default status. + * + * @param gid the glyph ID + * @return node badge to display glyph + */ + public static NodeBadge glyph(String gid) { + return new NodeBadge(Status.INFO, true, nonNull(gid), null); + } + + /** + * Returns a numeric badge, with default status. + * + * @param n the number + * @return node badge to display a number + */ + public static NodeBadge number(int n) { + // TODO: consider constraints, e.g. 1 <= n <= 999 + return new NodeBadge(Status.INFO, false, Integer.toString(n), null); + } + + /** + * Returns an arbitrary text badge, with the given status. + * + * @param s the status + * @param txt the text + * @return node badge to display text + */ + public static NodeBadge text(Status s, String txt) { + // TODO: consider length constraint on txt (3 chars?) + return new NodeBadge(s, false, nonNull(txt), null); + } + + /** + * Returns a glyph badge, with the given status. + * + * @param s the status + * @param gid the glyph ID + * @return node badge to display glyph + */ + public static NodeBadge glyph(Status s, String gid) { + return new NodeBadge(s, true, nonNull(gid), null); + } + + + /** + * Returns a numeric badge, with the given status and optional message. + * + * @param s the status + * @param n the number + * @return node badge to display a number + */ + public static NodeBadge number(Status s, int n) { + // TODO: consider constraints, e.g. 1 <= n <= 999 + return new NodeBadge(s, false, Integer.toString(n), null); + } + + /** + * Returns an arbitrary text badge, with the given status and optional + * message. + * + * @param s the status + * @param txt the text + * @param msg the optional message + * @return node badge to display text + */ + public static NodeBadge text(Status s, String txt, String msg) { + // TODO: consider length constraint on txt (3 chars?) + return new NodeBadge(s, false, nonNull(txt), msg); + } + + /** + * Returns a glyph badge, with the given status and optional message. + * + * @param s the status + * @param gid the glyph ID + * @param msg the optional message + * @return node badge to display glyph + */ + public static NodeBadge glyph(Status s, String gid, String msg) { + return new NodeBadge(s, true, nonNull(gid), msg); + } + + + /** + * Returns a numeric badge, with the given status and optional message. + * + * @param s the status + * @param n the number + * @param msg the optional message + * @return node badge to display a number + */ + public static NodeBadge number(Status s, int n, String msg) { + // TODO: consider constraints, e.g. 1 <= n <= 999 + return new NodeBadge(s, false, Integer.toString(n), msg); + } + +} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/NodeHighlight.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/NodeHighlight.java index 61e10c56..69235089 100644 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/NodeHighlight.java +++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/NodeHighlight.java @@ -20,7 +20,34 @@ package org.onosproject.ui.topo; * 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/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoConstants.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoConstants.java index 0f42b628..e2034fa7 100644 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoConstants.java +++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoConstants.java @@ -32,14 +32,17 @@ public final class TopoConstants { public static final class Glyphs { public static final String UNKNOWN = "unknown"; public static final String BIRD = "bird"; + public static final String QUERY = "query"; public static final String NODE = "node"; public static final String SWITCH = "switch"; public static final String ROADM = "roadm"; public static final String ENDSTATION = "endstation"; public static final String ROUTER = "router"; public static final String BGP_SPEAKER = "bgpSpeaker"; + public static final String MICROWAVE = "microwave"; public static final String CHAIN = "chain"; public static final String CROWN = "crown"; + public static final String LOCK = "lock"; public static final String TOPO = "topo"; public static final String REFRESH = "refresh"; public static final String GARBAGE = "garbage"; diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java index 8df03169..4030abdc 100644 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java +++ b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java @@ -37,6 +37,11 @@ public final class TopoJson { static final String ID = "id"; static final String LABEL = "label"; static final String CSS = "css"; + static final String BADGE = "badge"; + static final String STATUS = "status"; + static final String TXT = "txt"; + static final String GID = "gid"; + static final String MSG = "msg"; static final String TITLE = "title"; static final String TYPE = "type"; @@ -97,12 +102,26 @@ public final class TopoJson { return payload; } + private static ObjectNode json(NodeBadge b) { + ObjectNode n = objectNode() + .put(STATUS, b.status().code()) + .put(b.isGlyph() ? GID : TXT, b.text()); + if (b.message() != null) { + n.put(MSG, b.message()); + } + return n; + } + private static ObjectNode json(DeviceHighlight dh) { ObjectNode n = objectNode() .put(ID, dh.elementId()); if (dh.subdued()) { n.put(SUBDUE, true); } + NodeBadge badge = dh.badge(); + if (badge != null) { + n.set(BADGE, json(badge)); + } return n; } |