blob: f8c439406bd0b4132557342ef4d79293257d1a41 [file] [log] [blame]
/*
* Copyright 2015-present 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);
}
}