GUI Topo -- added NodeBadge model object.
Change-Id: Ic6c04429f81162f6e4c15836b342d21864e2387d
diff --git a/core/api/src/main/java/org/onosproject/ui/topo/NodeBadge.java b/core/api/src/main/java/org/onosproject/ui/topo/NodeBadge.java
new file mode 100644
index 0000000..d19b9be
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/ui/topo/NodeBadge.java
@@ -0,0 +1,149 @@
+/*
+ * 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 type of badge. */
+ public enum Type {
+ INFO("i"),
+ WARN("w"),
+ ERROR("e"),
+ CHECK_MARK("/"),
+ X_MARK("X"),
+ NUMBER("n");
+
+ private String code;
+
+ Type(String code) {
+ this.code = code;
+ }
+
+ @Override
+ public String toString() {
+ return "{" + code + "}";
+ }
+
+ /** Returns the type's code in string form. */
+ public String code() {
+ return code;
+ }
+ }
+
+ private final Type type;
+ private final String message;
+
+ // only instantiated through static methods.
+ private NodeBadge(Type type, String message) {
+ this.type = type;
+ this.message = message;
+ }
+
+ @Override
+ public String toString() {
+ return "{Badge " + type + " \"" + message + "\"}";
+ }
+
+ /**
+ * Returns the badge type.
+ *
+ * @return badge type
+ */
+ public Type type() {
+ return type;
+ }
+
+ /**
+ * 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 informational badge, with associated message.
+ *
+ * @param message the message
+ * @return INFO type node badge
+ */
+ public static NodeBadge info(String message) {
+ return new NodeBadge(Type.INFO, nonNull(message));
+ }
+
+ /**
+ * Returns a warning badge, with associated message.
+ *
+ * @param message the message
+ * @return WARN type node badge
+ */
+ public static NodeBadge warn(String message) {
+ return new NodeBadge(Type.WARN, nonNull(message));
+ }
+
+ /**
+ * Returns an error badge, with associated message.
+ *
+ * @param message the message
+ * @return ERROR type node badge
+ */
+ public static NodeBadge error(String message) {
+ return new NodeBadge(Type.ERROR, nonNull(message));
+ }
+
+ /**
+ * Returns a check-mark badge, with associated message.
+ *
+ * @param message the message
+ * @return CHECK_MARK type node badge
+ */
+ public static NodeBadge checkMark(String message) {
+ return new NodeBadge(Type.CHECK_MARK, nonNull(message));
+ }
+
+ /**
+ * Returns an X-mark badge, with associated message.
+ *
+ * @param message the message
+ * @return X_MARK type node badge
+ */
+ public static NodeBadge xMark(String message) {
+ return new NodeBadge(Type.X_MARK, nonNull(message));
+ }
+
+ /**
+ * Returns a numeric badge.
+ *
+ * @param n the number
+ * @return NUMBER type node badge
+ */
+ public static NodeBadge number(int n) {
+ // TODO: consider constraints, e.g. 1 <= n <= 99
+ return new NodeBadge(Type.NUMBER, Integer.toString(n));
+ }
+
+}
diff --git a/core/api/src/test/java/org/onosproject/ui/topo/NodeBadgeTest.java b/core/api/src/test/java/org/onosproject/ui/topo/NodeBadgeTest.java
new file mode 100644
index 0000000..12b0db6
--- /dev/null
+++ b/core/api/src/test/java/org/onosproject/ui/topo/NodeBadgeTest.java
@@ -0,0 +1,116 @@
+/*
+ * 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;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Unit tests for {@link NodeBadge}.
+ */
+public class NodeBadgeTest {
+
+ private static final String SOME_MSG = "a msg";
+ private static final String WR_T = "wrong type";
+ private static final String WR_M = "wrong message";
+ private static final String WR_SF = "wrong string format";
+
+ private NodeBadge badge;
+
+ private String expStr(String t) {
+ return "{Badge {" + t + "} \"" + SOME_MSG + "\"}";
+ }
+
+ private String expNumStr(String n) {
+ return "{Badge {n} \"" + n + "\"}";
+ }
+
+ @Test
+ public void info() {
+ badge = NodeBadge.info(SOME_MSG);
+ assertEquals(WR_T, NodeBadge.Type.INFO, badge.type());
+ assertEquals(WR_M, SOME_MSG, badge.message());
+ assertEquals(WR_SF, expStr("i"), badge.toString());
+ }
+
+ @Test
+ public void warn() {
+ badge = NodeBadge.warn(SOME_MSG);
+ assertEquals(WR_T, NodeBadge.Type.WARN, badge.type());
+ assertEquals(WR_M, SOME_MSG, badge.message());
+ assertEquals(WR_SF, expStr("w"), badge.toString());
+ }
+
+ @Test
+ public void error() {
+ badge = NodeBadge.error(SOME_MSG);
+ assertEquals(WR_T, NodeBadge.Type.ERROR, badge.type());
+ assertEquals(WR_M, SOME_MSG, badge.message());
+ assertEquals(WR_SF, expStr("e"), badge.toString());
+ }
+
+ @Test
+ public void checkMark() {
+ badge = NodeBadge.checkMark(SOME_MSG);
+ assertEquals(WR_T, NodeBadge.Type.CHECK_MARK, badge.type());
+ assertEquals(WR_M, SOME_MSG, badge.message());
+ assertEquals(WR_SF, expStr("/"), badge.toString());
+ }
+
+ @Test
+ public void xMark() {
+ badge = NodeBadge.xMark(SOME_MSG);
+ assertEquals(WR_T, NodeBadge.Type.X_MARK, badge.type());
+ assertEquals(WR_M, SOME_MSG, badge.message());
+ assertEquals(WR_SF, expStr("X"), badge.toString());
+ }
+
+ @Test
+ public void number0() {
+ badge = NodeBadge.number(0);
+ assertEquals(WR_T, NodeBadge.Type.NUMBER, badge.type());
+ assertEquals(WR_M, "0", badge.message());
+ assertEquals(WR_SF, expNumStr("0"), badge.toString());
+ }
+
+ @Test
+ public void number5() {
+ badge = NodeBadge.number(5);
+ assertEquals(WR_T, NodeBadge.Type.NUMBER, badge.type());
+ assertEquals(WR_M, "5", badge.message());
+ assertEquals(WR_SF, expNumStr("5"), badge.toString());
+ }
+
+ @Test
+ public void number99() {
+ badge = NodeBadge.number(99);
+ assertEquals(WR_T, NodeBadge.Type.NUMBER, badge.type());
+ assertEquals(WR_M, "99", badge.message());
+ assertEquals(WR_SF, expNumStr("99"), badge.toString());
+ }
+
+ @Test
+ public void badgeTypes() {
+ assertEquals(WR_SF, "i", NodeBadge.Type.INFO.code());
+ assertEquals(WR_SF, "w", NodeBadge.Type.WARN.code());
+ assertEquals(WR_SF, "e", NodeBadge.Type.ERROR.code());
+ assertEquals(WR_SF, "/", NodeBadge.Type.CHECK_MARK.code());
+ assertEquals(WR_SF, "X", NodeBadge.Type.X_MARK.code());
+ assertEquals(WR_SF, "n", NodeBadge.Type.NUMBER.code());
+ }
+}