diff options
Diffstat (limited to 'framework/src/onos/core/api/src/main/java/org/onosproject/ui')
50 files changed, 0 insertions, 4586 deletions
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/JsonUtils.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/JsonUtils.java deleted file mode 100644 index 2ebb5545..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/JsonUtils.java +++ /dev/null @@ -1,143 +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; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; - -/** - * Provides convenience methods for dealing with JSON nodes, arrays etc. - */ -public final class JsonUtils { - - private static final ObjectMapper MAPPER = new ObjectMapper(); - - // non-instantiable - private JsonUtils() { } - - /** - * Wraps a message payload into an event structure for the given event - * type and sequence ID. Generally, the sequence ID should be a copy of - * the ID from the client request event. - * - * @param type event type - * @param sid sequence ID - * @param payload event payload - * @return the object node representation - */ - public static ObjectNode envelope(String type, long sid, ObjectNode payload) { - ObjectNode event = MAPPER.createObjectNode(); - event.put("event", type); - if (sid > 0) { - event.put("sid", sid); - } - event.set("payload", payload); - return event; - } - - /** - * Composes a message structure for the given message type and payload. - * - * @param type message type - * @param payload message payload - * @return the object node representation - */ - public static ObjectNode envelope(String type, ObjectNode payload) { - ObjectNode event = MAPPER.createObjectNode(); - event.put("event", type); - event.set("payload", payload); - return event; - } - - /** - * Returns the event type from the specified event. - * If the node does not have an "event" property, "unknown" is returned. - * - * @param event message event - * @return extracted event type - */ - public static String eventType(ObjectNode event) { - return string(event, "event", "unknown"); - } - - /** - * Returns the sequence identifier from the specified event, or 0 (zero) - * if the "sid" property does not exist. - * - * @param event message event - * @return extracted sequence identifier - */ - public static long sid(ObjectNode event) { - return number(event, "sid"); - } - - /** - * Returns the payload from the specified event. - * - * @param event message event - * @return extracted payload object - */ - public static ObjectNode payload(ObjectNode event) { - return (ObjectNode) event.path("payload"); - } - - /** - * Returns the specified node property as a number. - * - * @param node message event - * @param name property name - * @return property as number - */ - public static long number(ObjectNode node, String name) { - return node.path(name).asLong(); - } - - /** - * Returns the specified node property as a string. - * - * @param node message event - * @param name property name - * @return property as a string - */ - public static String string(ObjectNode node, String name) { - return node.path(name).asText(); - } - - /** - * Returns the specified node property as a string, with a default fallback. - * - * @param node object node - * @param name property name - * @param defaultValue fallback value if property is absent - * @return property as a string - */ - public static String string(ObjectNode node, String name, String defaultValue) { - return node.path(name).asText(defaultValue); - } - - /** - * Returns the specified node property as an object node. - * - * @param node object node - * @param name property name - * @return property as a node - */ - public static ObjectNode node(ObjectNode node, String name) { - return (ObjectNode) node.path(name); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/RequestHandler.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/RequestHandler.java deleted file mode 100644 index 1678923d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/RequestHandler.java +++ /dev/null @@ -1,142 +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; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; - -/** - * Abstraction of an entity that handles a specific request from the - * user interface client. - * - * @see UiMessageHandler - */ -public abstract class RequestHandler { - - protected static final ObjectMapper MAPPER = new ObjectMapper(); - - private final String eventType; - private UiMessageHandler parent; - - - public RequestHandler(String eventType) { - this.eventType = eventType; - } - - // package private - void setParent(UiMessageHandler parent) { - this.parent = parent; - } - - /** - * Returns the event type that this handler handles. - * - * @return event type - */ - public String eventType() { - return eventType; - } - - /** - * Processes the incoming message payload from the client. - * - * @param sid message sequence identifier - * @param payload request message payload - */ - // TODO: remove sid from signature - public abstract void process(long sid, ObjectNode payload); - - - - // =================================================================== - // === Convenience methods... - - /** - * Returns implementation of the specified service class. - * - * @param serviceClass service class - * @param <T> type of service - * @return implementation class - * @throws org.onlab.osgi.ServiceNotFoundException if no implementation found - */ - protected <T> T get(Class<T> serviceClass) { - return parent.directory().get(serviceClass); - } - - /** - * Sends a message back to the client. - * - * @param eventType message event type - * @param sid message sequence identifier - * @param payload message payload - */ - // TODO: remove sid from signature - protected void sendMessage(String eventType, long sid, ObjectNode payload) { - parent.connection().sendMessage(eventType, sid, payload); - } - - /** - * Sends a message back to the client. - * Here, the message is preformatted; the assumption is it has its - * eventType, sid and payload attributes already filled in. - * - * @param message the message to send - */ - protected void sendMessage(ObjectNode message) { - parent.connection().sendMessage(message); - } - - /** - * Allows one request handler to pass the event on to another for - * further processing. - * Note that the message handlers must be defined in the same parent. - * - * @param eventType event type - * @param sid sequence identifier - * @param payload message payload - */ - // TODO: remove sid from signature - protected void chain(String eventType, long sid, ObjectNode payload) { - parent.exec(eventType, sid, payload); - } - - // =================================================================== - - - /** - * Returns the specified node property as a string. - * - * @param node message event - * @param key property name - * @return property as a string - */ - protected String string(ObjectNode node, String key) { - return JsonUtils.string(node, key); - } - - /** - * Returns the specified node property as a string, with a default fallback. - * - * @param node object node - * @param key property name - * @param defValue fallback value if property is absent - * @return property as a string - */ - protected String string(ObjectNode node, String key, String defValue) { - return JsonUtils.string(node, key, defValue); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiConnection.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiConnection.java deleted file mode 100644 index ead7b0dc..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiConnection.java +++ /dev/null @@ -1,42 +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; - -import com.fasterxml.jackson.databind.node.ObjectNode; - -/** - * Abstraction of a user interface session connection. - */ -public interface UiConnection { - - /** - * Sends the specified JSON message to the user interface client. - * - * @param message message to send - */ - void sendMessage(ObjectNode message); - - /** - * Composes a message into JSON and sends it to the user interface client. - * - * @param type message type - * @param sid message sequence number - * @param payload message payload - */ - // TODO: remove sid parameter - void sendMessage(String type, long sid, ObjectNode payload); - -}
\ No newline at end of file diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiExtension.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiExtension.java deleted file mode 100644 index 1f5fbd48..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiExtension.java +++ /dev/null @@ -1,200 +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; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * User interface extension. - */ -public final class UiExtension { - - private final Logger log = LoggerFactory.getLogger(getClass()); - - private static final String VIEW_PREFIX = "app/view/"; - private static final String EMPTY = ""; - private static final String SLASH = "/"; - private static final String CSS_HTML = "css.html"; - private static final String JS_HTML = "js.html"; - - private final ClassLoader classLoader; - private final String resourcePath; - private final List<UiView> views; - private final UiMessageHandlerFactory messageHandlerFactory; - private final UiTopoOverlayFactory topoOverlayFactory; - - - // private constructor - only the builder calls this - private UiExtension(ClassLoader cl, String path, List<UiView> views, - UiMessageHandlerFactory mhFactory, - UiTopoOverlayFactory toFactory) { - this.classLoader = cl; - this.resourcePath = path; - this.views = views; - this.messageHandlerFactory = mhFactory; - this.topoOverlayFactory = toFactory; - } - - - /** - * Returns input stream containing CSS inclusion statements. - * - * @return CSS inclusion statements - */ - public InputStream css() { - return getStream(resourcePath + CSS_HTML); - } - - /** - * Returns input stream containing JavaScript inclusion statements. - * - * @return JavaScript inclusion statements - */ - public InputStream js() { - return getStream(resourcePath + JS_HTML); - } - - /** - * Returns list of user interface views contributed by this extension. - * - * @return contributed view descriptors - */ - public List<UiView> views() { - return views; - } - - /** - * Returns input stream containing specified view-specific resource. - * - * @param viewId view identifier - * @param path resource path, relative to the view directory - * @return resource input stream - */ - public InputStream resource(String viewId, String path) { - return getStream(VIEW_PREFIX + viewId + SLASH + path); - } - - /** - * Returns message handler factory, if one was defined. - * - * @return message handler factory - */ - public UiMessageHandlerFactory messageHandlerFactory() { - return messageHandlerFactory; - } - - /** - * Returns the topology overlay factory, if one was defined. - * - * @return topology overlay factory - */ - public UiTopoOverlayFactory topoOverlayFactory() { - return topoOverlayFactory; - } - - - // Returns the resource input stream from the specified class-loader. - private InputStream getStream(String path) { - InputStream stream = classLoader.getResourceAsStream(path); - if (stream == null) { - log.warn("Unable to find resource {}", path); - } - return stream; - } - - - /** - * UI Extension Builder. - */ - public static class Builder { - private ClassLoader classLoader; - - private String resourcePath = EMPTY; - private List<UiView> views = new ArrayList<>(); - private UiMessageHandlerFactory messageHandlerFactory = null; - private UiTopoOverlayFactory topoOverlayFactory = null; - - /** - * Create a builder with the given class loader. - * Resource path defaults to "". - * Views defaults to an empty list. - * Both Message and TopoOverlay factories default to null. - * - * @param cl the class loader - * @param views list of views contributed by this extension - */ - public Builder(ClassLoader cl, List<UiView> views) { - checkNotNull(cl, "Must provide a class loader"); - checkArgument(views.size() > 0, "Must provide at least one view"); - this.classLoader = cl; - this.views = views; - } - - /** - * Set the resource path. That is, path to where the CSS and JS - * files are located. This value should - * - * @param path resource path - * @return self, for chaining - */ - public Builder resourcePath(String path) { - this.resourcePath = path == null ? EMPTY : path + SLASH; - return this; - } - - /** - * Sets the message handler factory for this extension. - * - * @param mhFactory message handler factory - * @return self, for chaining - */ - public Builder messageHandlerFactory(UiMessageHandlerFactory mhFactory) { - this.messageHandlerFactory = mhFactory; - return this; - } - - /** - * Sets the topology overlay factory for this extension. - * - * @param toFactory topology overlay factory - * @return self, for chaining - */ - public Builder topoOverlayFactory(UiTopoOverlayFactory toFactory) { - this.topoOverlayFactory = toFactory; - return this; - } - - /** - * Builds the UI extension. - * - * @return UI extension instance - */ - public UiExtension build() { - return new UiExtension(classLoader, resourcePath, views, - messageHandlerFactory, topoOverlayFactory); - } - - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiExtensionService.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiExtensionService.java deleted file mode 100644 index 330fbb7a..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiExtensionService.java +++ /dev/null @@ -1,53 +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; - -import java.util.List; - -/** - * Service for registering user interface extensions. - */ -public interface UiExtensionService { - - /** - * Registers the specified user interface extension. - * - * @param extension GUI extension to register - */ - void register(UiExtension extension); - - /** - * Unregisters the specified user interface extension. - * - * @param extension GUI extension to unregister - */ - void unregister(UiExtension extension); - - /** - * Returns the list of user interface extensions. - * - * @return list of extensions - */ - List<UiExtension> getExtensions(); - - /** - * Returns the user interface extension that contributed the specified view. - * - * @param viewId view identifier - * @return user interface extension - */ - UiExtension getViewExtension(String viewId); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiMessageHandler.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiMessageHandler.java deleted file mode 100644 index 9b9a406c..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiMessageHandler.java +++ /dev/null @@ -1,207 +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; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; -import org.onlab.osgi.ServiceDirectory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Abstraction of an entity capable of processing JSON messages from the user - * interface client. - * <p> - * The message structure is: - * </p> - * <pre> - * { - * "type": "<em>event-type</em>", - * "payload": { - * <em>arbitrary JSON object structure</em> - * } - * } - * </pre> - * On {@link #init initialization} the handler will create and cache - * {@link RequestHandler} instances, each of which are bound to a particular - * <em>event-type</em>. On {@link #process arrival} of a new message, - * the <em>event-type</em> is determined, and the message dispatched to the - * corresponding <em>RequestHandler</em>'s - * {@link RequestHandler#process process} method. - */ -public abstract class UiMessageHandler { - - private final Logger log = LoggerFactory.getLogger(getClass()); - private final Map<String, RequestHandler> handlerMap = new HashMap<>(); - private final ObjectMapper mapper = new ObjectMapper(); - - private UiConnection connection; - private ServiceDirectory directory; - - - /** - * Subclasses must create and return the collection of request handlers - * for the message types they handle. - * <p> - * Note that request handlers should be stateless. When we are - * {@link #destroy destroyed}, we will simply drop our references to them - * and allow them to be garbage collected. - * - * @return the message handler instances - */ - protected abstract Collection<RequestHandler> createRequestHandlers(); - - /** - * Returns the set of message types which this handler is capable of - * processing. - * - * @return set of message types - */ - public Set<String> messageTypes() { - return Collections.unmodifiableSet(handlerMap.keySet()); - } - - /** - * Processes a JSON message from the user interface client. - * - * @param message JSON message - */ - public void process(ObjectNode message) { - String type = JsonUtils.eventType(message); - ObjectNode payload = JsonUtils.payload(message); - // TODO: remove sid - exec(type, 0, payload); - } - - /** - * Finds the appropriate handler and executes the process method. - * - * @param eventType event type - * @param sid sequence identifier - * @param payload message payload - */ - // TODO: remove sid from signature - void exec(String eventType, long sid, ObjectNode payload) { - RequestHandler requestHandler = handlerMap.get(eventType); - if (requestHandler != null) { - requestHandler.process(sid, payload); - } else { - log.warn("no request handler for event type {}", eventType); - } - } - - /** - * Initializes the handler with the user interface connection and - * service directory context. - * - * @param connection user interface connection - * @param directory service directory - */ - public void init(UiConnection connection, ServiceDirectory directory) { - this.connection = connection; - this.directory = directory; - - Collection<RequestHandler> handlers = createRequestHandlers(); - checkNotNull(handlers, "Handlers cannot be null"); - checkArgument(!handlers.isEmpty(), "Handlers cannot be empty"); - - for (RequestHandler h : handlers) { - h.setParent(this); - handlerMap.put(h.eventType(), h); - } - } - - /** - * Destroys the message handler context. - */ - public void destroy() { - this.connection = null; - this.directory = null; - handlerMap.clear(); - } - - /** - * Returns the user interface connection with which this handler was primed. - * - * @return user interface connection - */ - public UiConnection connection() { - return connection; - } - - /** - * Returns the user interface connection with which this handler was primed. - * - * @return user interface connection - */ - public ServiceDirectory directory() { - return directory; - } - - /** - * Returns implementation of the specified service class. - * - * @param serviceClass service class - * @param <T> type of service - * @return implementation class - * @throws org.onlab.osgi.ServiceNotFoundException if no implementation found - */ - protected <T> T get(Class<T> serviceClass) { - return directory.get(serviceClass); - } - - /** - * Returns a freshly minted object node. - * - * @return new object node - */ - protected ObjectNode objectNode() { - return mapper.createObjectNode(); - } - - /** - * Returns a freshly minted array node. - * - * @return new array node - */ - protected ArrayNode arrayNode() { - return mapper.createArrayNode(); - } - - /** - * Sends the specified data to the client. - * It is expected that the data is in the prescribed JSON format for - * events to the client. - * - * @param data data to be sent - */ - protected synchronized void sendMessage(ObjectNode data) { - UiConnection connection = connection(); - if (connection != null) { - connection.sendMessage(data); - } - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiMessageHandlerFactory.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiMessageHandlerFactory.java deleted file mode 100644 index 522daa8f..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiMessageHandlerFactory.java +++ /dev/null @@ -1,33 +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; - -import java.util.Collection; - -/** - * Abstraction of an entity capable of producing a set of message handlers - * specific to the given user interface connection. - */ -public interface UiMessageHandlerFactory { - - /** - * Produces a collection of new message handlers. - * - * @return collection of new handlers - */ - Collection<UiMessageHandler> newHandlers(); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiTopoOverlay.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiTopoOverlay.java deleted file mode 100644 index 88796de7..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiTopoOverlay.java +++ /dev/null @@ -1,125 +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; - -import org.onosproject.net.DeviceId; -import org.onosproject.net.HostId; -import org.onosproject.ui.topo.PropertyPanel; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Represents user interface topology view overlay. - */ -public class UiTopoOverlay { - - /** - * Logger for this overlay. - */ - protected final Logger log = LoggerFactory.getLogger(getClass()); - - private final String id; - - private boolean isActive = false; - - /** - * Creates a new user interface topology view overlay descriptor. - * - * @param id overlay identifier - */ - public UiTopoOverlay(String id) { - this.id = id; - } - - /** - * Returns the identifier for this overlay. - * - * @return the identifier - */ - public String id() { - return id; - } - - /** - * Callback invoked to initialize this overlay, soon after creation. - * This default implementation does nothing. - */ - public void init() { - } - - /** - * Callback invoked when this overlay is activated. - */ - public void activate() { - isActive = true; - } - - /** - * Callback invoked when this overlay is deactivated. - */ - public void deactivate() { - isActive = false; - } - - /** - * Returns true if this overlay is currently active. - * - * @return true if overlay active - */ - public boolean isActive() { - return isActive; - } - - /** - * Callback invoked to destroy this instance by cleaning up any - * internal state ready for garbage collection. - * This default implementation holds no state and does nothing. - */ - public void destroy() { - } - - /** - * Callback to modify the contents of the summary panel. - * This default implementation does nothing. - * - * @param pp property panel model of summary data - */ - public void modifySummary(PropertyPanel pp) { - } - - /** - * Callback to modify the contents of the details panel for - * a selected device. - * This default implementation does nothing. - * - * @param pp property panel model of summary data - * @param deviceId device id - */ - public void modifyDeviceDetails(PropertyPanel pp, DeviceId deviceId) { - } - - /** - * Callback to modify the contents of the details panel for - * a selected host. - * This default implementation does nothing. - * - * @param pp property panel model of summary data - * @param hostId host id - */ - public void modifyHostDetails(PropertyPanel pp, HostId hostId) { - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiTopoOverlayFactory.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiTopoOverlayFactory.java deleted file mode 100644 index 61bc0c23..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiTopoOverlayFactory.java +++ /dev/null @@ -1,33 +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; - -import java.util.Collection; - -/** - * Abstraction of an entity capable of producing one or more topology - * overlay handlers specific to a given user interface connection. - */ -public interface UiTopoOverlayFactory { - - /** - * Produces a collection of new overlay handlers. - * - * @return collection of new overlay handlers - */ - Collection<UiTopoOverlay> newOverlays(); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiView.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiView.java deleted file mode 100644 index c8671159..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiView.java +++ /dev/null @@ -1,165 +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; - -import com.google.common.base.MoreObjects; - -import java.util.Objects; - -/** - * Represents user interface view addition. - */ -public class UiView { - - /** - * Designates navigation menu category. - */ - public enum Category { - /** - * Represents platform related views. - */ - PLATFORM("Platform"), - - /** - * Represents network-control related views. - */ - NETWORK("Network"), - - /** - * Represents miscellaneous views. - */ - OTHER("Other"), - - /** - * Represents views that do not show in the navigation menu. - * This category should not be specified directly; rather, use - * the {@link UiViewHidden} constructor instead of {@link UiView}. - */ - HIDDEN("(hidden)"); - - private final String label; - - Category(String label) { - this.label = label; - } - - /** - * Returns display label for the category. - * - * @return display label - */ - public String label() { - return label; - } - } - - private final Category category; - private final String id; - private final String label; - private final String iconId; - - /** - * Creates a new user interface view descriptor. The navigation item - * will appear in the navigation menu under the specified category. - * - * @param category view category - * @param id view identifier - * @param label view label - */ - public UiView(Category category, String id, String label) { - this(category, id, label, null); - } - - /** - * Creates a new user interface view descriptor. The navigation item - * will appear in the navigation menu under the specified category, - * with the specified icon adornment. - * - * @param category view category - * @param id view identifier - * @param label view label - * @param iconId icon id - */ - public UiView(Category category, String id, String label, String iconId) { - this.category = category; - this.id = id; - this.label = label; - this.iconId = iconId; - } - - /** - * Returns the navigation category. - * - * @return navigation category - */ - public Category category() { - return category; - } - - /** - * Returns the view identifier. - * - * @return view id - */ - public String id() { - return id; - } - - /** - * Returns the view label. - * - * @return view label - */ - public String label() { - return label; - } - - /** - * Returns the icon ID. - * - * @return icon ID - */ - public String iconId() { - return iconId; - } - - @Override - public int hashCode() { - return id.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - final UiView other = (UiView) obj; - return Objects.equals(this.id, other.id); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("category", category) - .add("id", id) - .add("label", label) - .add("iconId", iconId) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiViewHidden.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiViewHidden.java deleted file mode 100644 index b7fea8fe..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/UiViewHidden.java +++ /dev/null @@ -1,41 +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; - -import com.google.common.base.MoreObjects; - -/** - * Represents user interface view addition, except that this one should not - * have an entry in the navigation panel. - */ -public class UiViewHidden extends UiView { - - /** - * Creates a new user interface hidden view descriptor. - * - * @param id view identifier - */ - public UiViewHidden(String id) { - super(Category.HIDDEN, id, null); - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("id", id()) - .toString(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/package-info.java deleted file mode 100644 index dd832a59..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/package-info.java +++ /dev/null @@ -1,20 +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. - */ - -/** - * Mechanism for managing dynamically registered user interface extensions. - */ -package org.onosproject.ui; diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/CellComparator.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/CellComparator.java deleted file mode 100644 index 1c42c97a..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/CellComparator.java +++ /dev/null @@ -1,45 +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.table; - -/** - * Defines a comparator for cell values. - */ -public interface CellComparator { - - /** - * Compares its two arguments for order. Returns a negative integer, - * zero, or a positive integer as the first argument is less than, equal - * to, or greater than the second.<p> - * - * Note that nulls are permitted, and should be sorted to the beginning - * of an ascending sort; i.e. null is considered to be "smaller" than - * non-null values. - * - * @see java.util.Comparator#compare(Object, Object) - * - * @param o1 the first object to be compared. - * @param o2 the second object to be compared. - * @return a negative integer, zero, or a positive integer as the - * first argument is less than, equal to, or greater than the - * second. - * @throws ClassCastException if the arguments' types prevent them from - * being compared by this comparator. - */ - int compare(Object o1, Object o2); - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/CellFormatter.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/CellFormatter.java deleted file mode 100644 index 895c9d93..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/CellFormatter.java +++ /dev/null @@ -1,33 +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.table; - -/** - * Defines a formatter for cell values. - */ -public interface CellFormatter { - - /** - * Formats the specified value into a string appropriate for displaying - * in a table cell. Note that null values are acceptable, and will result - * in the empty string. - * - * @param value the value - * @return the formatted string - */ - String format(Object value); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/TableModel.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/TableModel.java deleted file mode 100644 index d0fccb65..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/TableModel.java +++ /dev/null @@ -1,304 +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.table; - -import com.google.common.collect.Sets; -import org.onosproject.ui.table.cell.DefaultCellComparator; -import org.onosproject.ui.table.cell.DefaultCellFormatter; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * A simple model of table data. - * <p> - * Note that this is not a full MVC type model; the expected usage pattern - * is to create an empty table, add rows (by consulting the business model), - * sort rows (based on client request parameters), and finally produce the - * sorted list of rows. - * <p> - * The table also provides a mechanism for defining how cell values for a - * particular column should be formatted into strings, to help facilitate - * the encoding of the table data into a JSON structure. - * <p> - * Note that it is expected that all values for a particular column will - * be the same class. - */ -public class TableModel { - - private static final CellComparator DEF_CMP = DefaultCellComparator.INSTANCE; - private static final CellFormatter DEF_FMT = DefaultCellFormatter.INSTANCE; - - private final String[] columnIds; - private final Set<String> idSet; - private final Map<String, CellComparator> comparators = new HashMap<>(); - private final Map<String, CellFormatter> formatters = new HashMap<>(); - private final List<Row> rows = new ArrayList<>(); - - - /** - * Constructs a table (devoid of data) with the given column IDs. - * - * @param columnIds column identifiers - */ - public TableModel(String... columnIds) { - checkNotNull(columnIds, "columnIds cannot be null"); - checkArgument(columnIds.length > 0, "must be at least one column"); - - idSet = Sets.newHashSet(columnIds); - if (idSet.size() != columnIds.length) { - throw new IllegalArgumentException("duplicate column ID(s) detected"); - } - - this.columnIds = Arrays.copyOf(columnIds, columnIds.length); - } - - private void checkId(String id) { - checkNotNull(id, "must provide a column ID"); - if (!idSet.contains(id)) { - throw new IllegalArgumentException("unknown column id: " + id); - } - } - - /** - * Returns the number of rows in this table model. - * - * @return number of rows - */ - public int rowCount() { - return rows.size(); - } - - /** - * Returns the number of columns in this table model. - * - * @return number of columns - */ - public int columnCount() { - return columnIds.length; - } - - /** - * Returns the array of column IDs for this table model. - * <p> - * Implementation note: we are knowingly passing you a reference to - * our internal array to avoid copying. Don't mess with it. It's your - * table you'll break if you do! - * - * @return the column identifiers - */ - public String[] getColumnIds() { - return columnIds; - } - - /** - * Returns the raw {@link Row} representation of the rows in this table. - * - * @return raw table rows - */ - public Row[] getRows() { - return rows.toArray(new Row[rows.size()]); - } - - /** - * Sets a cell comparator for the specified column. - * - * @param columnId column identifier - * @param comparator comparator to use - */ - public void setComparator(String columnId, CellComparator comparator) { - checkNotNull(comparator, "must provide a comparator"); - checkId(columnId); - comparators.put(columnId, comparator); - } - - /** - * Returns the cell comparator to use on values in the specified column. - * - * @param columnId column identifier - * @return an appropriate cell comparator - */ - private CellComparator getComparator(String columnId) { - checkId(columnId); - CellComparator cmp = comparators.get(columnId); - return cmp == null ? DEF_CMP : cmp; - } - - /** - * Sets a cell formatter for the specified column. - * - * @param columnId column identifier - * @param formatter formatter to use - */ - public void setFormatter(String columnId, CellFormatter formatter) { - checkNotNull(formatter, "must provide a formatter"); - checkId(columnId); - formatters.put(columnId, formatter); - } - - /** - * Returns the cell formatter to use on values in the specified column. - * - * @param columnId column identifier - * @return an appropriate cell formatter - */ - public CellFormatter getFormatter(String columnId) { - checkId(columnId); - CellFormatter fmt = formatters.get(columnId); - return fmt == null ? DEF_FMT : fmt; - } - - /** - * Adds a row to the table model. - * - * @return the row, for chaining - */ - public Row addRow() { - Row r = new Row(); - rows.add(r); - return r; - } - - /** - * Sorts the table rows based on the specified column, in the - * specified direction. - * - * @param columnId column identifier - * @param dir sort direction - */ - public void sort(String columnId, SortDir dir) { - Collections.sort(rows, new RowComparator(columnId, dir)); - } - - - /** Designates sorting direction. */ - public enum SortDir { - /** Designates an ascending sort. */ - ASC, - /** Designates a descending sort. */ - DESC - } - - /** - * Row comparator. - */ - private class RowComparator implements Comparator<Row> { - private final String columnId; - private final SortDir dir; - private final CellComparator cellComparator; - - /** - * Constructs a row comparator based on the specified - * column identifier and sort direction. - * - * @param columnId column identifier - * @param dir sort direction - */ - public RowComparator(String columnId, SortDir dir) { - this.columnId = columnId; - this.dir = dir; - cellComparator = getComparator(columnId); - } - - @Override - public int compare(Row a, Row b) { - Object cellA = a.get(columnId); - Object cellB = b.get(columnId); - int result = cellComparator.compare(cellA, cellB); - return dir == SortDir.ASC ? result : -result; - } - } - - /** - * Model of a row. - */ - public class Row { - private final Map<String, Object> cells = new HashMap<>(); - - /** - * Sets the cell value for the given column of this row. - * - * @param columnId column identifier - * @param value value to set - * @return self, for chaining - */ - public Row cell(String columnId, Object value) { - checkId(columnId); - cells.put(columnId, value); - return this; - } - - /** - * Returns the value of the cell in the given column for this row. - * - * @param columnId column identifier - * @return cell value - */ - public Object get(String columnId) { - return cells.get(columnId); - } - - /** - * Returns the value of the cell as a string, using the - * formatter appropriate for the column. - * - * @param columnId column identifier - * @return formatted cell value - */ - String getAsString(String columnId) { - return getFormatter(columnId).format(get(columnId)); - } - - /** - * Returns the row as an array of formatted strings. - * - * @return the formatted row data - */ - public String[] getAsFormattedStrings() { - List<String> formatted = new ArrayList<>(columnCount()); - for (String c : columnIds) { - formatted.add(getAsString(c)); - } - return formatted.toArray(new String[formatted.size()]); - } - } - - private static final String DESC = "desc"; - - /** - * Returns the appropriate sort direction for the given string. - * <p> - * The expected strings are "asc" for {@link SortDir#ASC ascending} and - * "desc" for {@link SortDir#DESC descending}. Any other value will - * default to ascending. - * - * @param s sort direction string encoding - * @return sort direction - */ - public static SortDir sortDir(String s) { - return !DESC.equals(s) ? SortDir.ASC : SortDir.DESC; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/TableRequestHandler.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/TableRequestHandler.java deleted file mode 100644 index b8d48575..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/TableRequestHandler.java +++ /dev/null @@ -1,111 +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.table; - -import com.fasterxml.jackson.databind.node.ObjectNode; -import org.onosproject.ui.JsonUtils; -import org.onosproject.ui.RequestHandler; - -/** - * Message handler specifically for table views. - */ -public abstract class TableRequestHandler extends RequestHandler { - - private final String respType; - private final String nodeName; - - /** - * Constructs a table request handler for a specific table view. When - * table requests come in, the handler will generate the appropriate - * table rows, sort them according the the request sort parameters, and - * send back the response to the client. - * - * @param reqType type of the request event - * @param respType type of the response event - * @param nodeName name of JSON node holding row data - */ - public TableRequestHandler(String reqType, String respType, String nodeName) { - super(reqType); - this.respType = respType; - this.nodeName = nodeName; - } - - @Override - public void process(long sid, ObjectNode payload) { - TableModel tm = createTableModel(); - populateTable(tm, payload); - - String sortCol = JsonUtils.string(payload, "sortCol", defaultColumnId()); - String sortDir = JsonUtils.string(payload, "sortDir", "asc"); - tm.sort(sortCol, TableModel.sortDir(sortDir)); - - ObjectNode rootNode = MAPPER.createObjectNode(); - rootNode.set(nodeName, TableUtils.generateArrayNode(tm)); - sendMessage(respType, 0, rootNode); - } - - /** - * Creates the table model (devoid of data) using {@link #getColumnIds()} - * to initialize it, ready to be populated. - * <p> - * This default implementation returns a table model with default - * formatters and comparators for all columns. - * - * @return an empty table model - */ - protected TableModel createTableModel() { - return new TableModel(getColumnIds()); - } - - /** - * Returns the default column ID to be used when one is not supplied in - * the payload as the column on which to sort. - * <p> - * This default implementation returns "id". - * - * @return default sort column identifier - */ - protected String defaultColumnId() { - return "id"; - } - - /** - * Subclasses should return the array of column IDs with which - * to initialize their table model. - * - * @return the column IDs - */ - protected abstract String[] getColumnIds(); - - /** - * Subclasses should populate the table model by adding - * {@link TableModel.Row rows}. - * <pre> - * tm.addRow() - * .cell(COL_ONE, ...) - * .cell(COL_TWO, ...) - * ... ; - * </pre> - * The request payload is provided in case there are request filtering - * parameters (other than sort column and sort direction) that are required - * to generate the appropriate data. - * - * @param tm the table model - * @param payload request payload - */ - protected abstract void populateTable(TableModel tm, ObjectNode payload); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/TableUtils.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/TableUtils.java deleted file mode 100644 index eb2dff78..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/TableUtils.java +++ /dev/null @@ -1,58 +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.table; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; - -/** - * Provides static utility methods for dealing with tables. - */ -public final class TableUtils { - - private static final ObjectMapper MAPPER = new ObjectMapper(); - - // non-instantiable - private TableUtils() { } - - /** - * Generates a JSON array node from a table model. - * - * @param tm the table model - * @return the array node representation - */ - public static ArrayNode generateArrayNode(TableModel tm) { - ArrayNode array = MAPPER.createArrayNode(); - for (TableModel.Row r : tm.getRows()) { - array.add(toJsonNode(r, tm)); - } - return array; - } - - private static JsonNode toJsonNode(TableModel.Row row, TableModel tm) { - ObjectNode result = MAPPER.createObjectNode(); - String[] keys = tm.getColumnIds(); - String[] cells = row.getAsFormattedStrings(); - int n = keys.length; - for (int i = 0; i < n; i++) { - result.put(keys[i], cells[i]); - } - return result; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/AbstractCellComparator.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/AbstractCellComparator.java deleted file mode 100644 index 31d9f634..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/AbstractCellComparator.java +++ /dev/null @@ -1,60 +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.table.cell; - -import org.onosproject.ui.table.CellComparator; - -/** - * Base implementation of a {@link CellComparator}. This class takes care - * of dealing with null inputs; subclasses should implement their comparison - * knowing that both inputs are guaranteed to be non-null. - */ -public abstract class AbstractCellComparator implements CellComparator { - - @Override - public int compare(Object o1, Object o2) { - if (o1 == null && o2 == null) { - return 0; // o1 == o2 - } - if (o1 == null) { - return -1; // o1 < o2 - } - if (o2 == null) { - return 1; // o1 > o2 - } - return nonNullCompare(o1, o2); - } - - /** - * Compares its two arguments for order. Returns a negative integer, - * zero, or a positive integer as the first argument is less than, equal - * to, or greater than the second.<p> - * - * Note that both objects are guaranteed to be non-null. - * - * @see java.util.Comparator#compare(Object, Object) - * - * @param o1 the first object to be compared. - * @param o2 the second object to be compared. - * @return a negative integer, zero, or a positive integer as the - * first argument is less than, equal to, or greater than the - * second. - * @throws ClassCastException if the arguments' types prevent them from - * being compared by this comparator. - */ - protected abstract int nonNullCompare(Object o1, Object o2); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/AbstractCellFormatter.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/AbstractCellFormatter.java deleted file mode 100644 index 08822b7b..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/AbstractCellFormatter.java +++ /dev/null @@ -1,41 +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.table.cell; - -import org.onosproject.ui.table.CellFormatter; - -/** - * Base implementation of a {@link CellFormatter}. This class takes care of - * dealing with null inputs; subclasses should implement their format method - * knowing that the input is guaranteed to be non-null. - */ -public abstract class AbstractCellFormatter implements CellFormatter { - - @Override - public String format(Object value) { - return value == null ? "" : nonNullFormat(value); - } - - /** - * Formats the specified value into a string appropriate for displaying - * in a table cell. Note that value is guaranteed to be non-null. - * - * @param value the value - * @return the formatted string - */ - protected abstract String nonNullFormat(Object value); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/AppIdFormatter.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/AppIdFormatter.java deleted file mode 100644 index f7947a75..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/AppIdFormatter.java +++ /dev/null @@ -1,41 +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.table.cell; - -import org.onosproject.core.ApplicationId; -import org.onosproject.ui.table.CellFormatter; - -/** - * Formats an application identifier as "(app-id) : (app-name)". - */ -public final class AppIdFormatter extends AbstractCellFormatter { - - // non-instantiable - private AppIdFormatter() { } - - // NOTE: do not change this format; we parse it on the client side. - @Override - protected String nonNullFormat(Object value) { - ApplicationId appId = (ApplicationId) value; - return appId.id() + " : " + appId.name(); - } - - /** - * An instance of this class. - */ - public static final CellFormatter INSTANCE = new AppIdFormatter(); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/ConnectPointFormatter.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/ConnectPointFormatter.java deleted file mode 100644 index 4af6fe2f..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/ConnectPointFormatter.java +++ /dev/null @@ -1,40 +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.table.cell; - -import org.onosproject.net.ConnectPoint; -import org.onosproject.ui.table.CellFormatter; - -/** - * Formats a connect point as "(element-id)/(port)". - */ -public final class ConnectPointFormatter extends AbstractCellFormatter { - - // non-instantiable - private ConnectPointFormatter() { } - - @Override - protected String nonNullFormat(Object value) { - ConnectPoint cp = (ConnectPoint) value; - return cp.elementId() + "/" + cp.port(); - } - - /** - * An instance of this class. - */ - public static final CellFormatter INSTANCE = new ConnectPointFormatter(); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/DefaultCellComparator.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/DefaultCellComparator.java deleted file mode 100644 index 2386f8f3..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/DefaultCellComparator.java +++ /dev/null @@ -1,51 +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.table.cell; - -import org.onosproject.ui.table.CellComparator; - -/** - * A default cell comparator. - * <p> - * Verifies that the objects being compared are the same class. - * Looks to see if the objects being compared implement comparable and, if so, - * delegates to that; otherwise, implements a lexicographical compare function - * (i.e. string sorting). Uses the objects' toString() method and then - * compares the resulting strings. Note that null values are acceptable and - * are considered "smaller" than any non-null value. - */ -public final class DefaultCellComparator extends AbstractCellComparator { - - // non-instantiable - private DefaultCellComparator() { } - - @Override - @SuppressWarnings("unchecked") - protected int nonNullCompare(Object o1, Object o2) { - if (o1 instanceof Comparable) { - // if o2 is not the same class as o1, then compareTo will - // throw ClassCastException for us - return ((Comparable) o1).compareTo(o2); - } - return o1.toString().compareTo(o2.toString()); - } - - /** - * An instance of this class. - */ - public static final CellComparator INSTANCE = new DefaultCellComparator(); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/DefaultCellFormatter.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/DefaultCellFormatter.java deleted file mode 100644 index 8309c545..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/DefaultCellFormatter.java +++ /dev/null @@ -1,38 +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.table.cell; - -import org.onosproject.ui.table.CellFormatter; - -/** - * A default cell formatter. Uses the object's toString() method. - */ -public final class DefaultCellFormatter extends AbstractCellFormatter { - - // non-instantiable - private DefaultCellFormatter() { } - - @Override - public String nonNullFormat(Object value) { - return value.toString(); - } - - /** - * An instance of this class. - */ - public static final CellFormatter INSTANCE = new DefaultCellFormatter(); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/EnumFormatter.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/EnumFormatter.java deleted file mode 100644 index 5b89a0b7..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/EnumFormatter.java +++ /dev/null @@ -1,40 +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.table.cell; - -import org.onosproject.ui.table.CellFormatter; - -import static org.apache.commons.lang.WordUtils.capitalizeFully; - -/** - * Formats enum types to be readable strings. - */ -public final class EnumFormatter extends AbstractCellFormatter { - - // non-instantiable - private EnumFormatter() { } - - @Override - protected String nonNullFormat(Object value) { - return capitalizeFully(value.toString().replace("_", " ")); - } - - /** - * An instance of this class. - */ - public static final CellFormatter INSTANCE = new EnumFormatter(); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/HexFormatter.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/HexFormatter.java deleted file mode 100644 index 981a81bb..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/HexFormatter.java +++ /dev/null @@ -1,38 +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.table.cell; - -import org.onosproject.ui.table.CellFormatter; - -/** - * Formats integer values as hex strings with a "0x" prefix. - */ -public final class HexFormatter extends AbstractCellFormatter { - - // non-instantiable - private HexFormatter() { } - - @Override - protected String nonNullFormat(Object value) { - return "0x" + Integer.toHexString((Integer) value); - } - - /** - * An instance of this class. - */ - public static final CellFormatter INSTANCE = new HexFormatter(); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/HostLocationFormatter.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/HostLocationFormatter.java deleted file mode 100644 index 95a7cc23..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/HostLocationFormatter.java +++ /dev/null @@ -1,40 +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.table.cell; - -import org.onosproject.net.HostLocation; -import org.onosproject.ui.table.CellFormatter; - -/** - * Formats a host location as "(device-id)/(port)". - */ -public final class HostLocationFormatter extends AbstractCellFormatter { - - // non-instantiable - private HostLocationFormatter() { } - - @Override - protected String nonNullFormat(Object value) { - HostLocation loc = (HostLocation) value; - return loc.deviceId() + "/" + loc.port(); - } - - /** - * An instance of this class. - */ - public static final CellFormatter INSTANCE = new HostLocationFormatter(); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/NumberFormatter.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/NumberFormatter.java deleted file mode 100644 index 76f42466..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/NumberFormatter.java +++ /dev/null @@ -1,50 +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.table.cell; - -import java.text.DecimalFormat; -import java.text.NumberFormat; - -/** - * Formats number using the specified format string". - */ -public final class NumberFormatter extends AbstractCellFormatter { - - private final NumberFormat format; - - /** - * Creates a formatter using a default decimal format. - */ - public NumberFormatter() { - this(new DecimalFormat("#,##0.00000")); - } - - /** - * Creates a formatter using the specified format. - * - * @param format number format - */ - public NumberFormatter(NumberFormat format) { - this.format = format; - } - - @Override - protected String nonNullFormat(Object value) { - return format.format(value); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/TimeFormatter.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/TimeFormatter.java deleted file mode 100644 index 58c70930..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/TimeFormatter.java +++ /dev/null @@ -1,71 +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.table.cell; - -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; - -import java.util.Locale; - -/** - * Formats time values using {@link DateTimeFormatter}. - */ -public final class TimeFormatter extends AbstractCellFormatter { - - private DateTimeFormatter dtf; - - // NOTE: Unlike other formatters in this package, this one is not - // implemented as a Singleton, because instances may be - // decorated with alternate locale and/or timezone. - - /** - * Constructs a time formatter that uses the default locale and timezone. - */ - public TimeFormatter() { - dtf = DateTimeFormat.longTime(); - } - - /** - * Sets the locale to use for formatting the time. - * - * @param locale locale to use for formatting - * @return self, for chaining - */ - public TimeFormatter withLocale(Locale locale) { - dtf = dtf.withLocale(locale); - return this; - } - - /** - * Sets the time zone to use for formatting the time. - * - * @param zone time zone to use - * @return self, for chaining - */ - public TimeFormatter withZone(DateTimeZone zone) { - dtf = dtf.withZone(zone); - return this; - } - - @Override - protected String nonNullFormat(Object value) { - return dtf.print((DateTime) value); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/package-info.java deleted file mode 100644 index c25bcb06..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/cell/package-info.java +++ /dev/null @@ -1,20 +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. - */ - -/** - * Set of table cell renderers and comparators for use by GUI apps. - */ -package org.onosproject.ui.table.cell;
\ No newline at end of file diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/package-info.java deleted file mode 100644 index ee975d11..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/table/package-info.java +++ /dev/null @@ -1,20 +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. - */ - -/** - * Facilities for creating tabular models of data for the GUI. - */ -package org.onosproject.ui.table;
\ No newline at end of file diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/AbstractHighlight.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/AbstractHighlight.java deleted file mode 100644 index d30ba2f6..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/AbstractHighlight.java +++ /dev/null @@ -1,74 +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.topo; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Partial implementation of the highlighting to apply to topology - * view elements. - */ -public abstract class AbstractHighlight { - private final TopoElementType type; - private final String elementId; - private boolean keepSubdued = false; - - /** - * Constructs the highlight. - * - * @param type highlight element type - * @param elementId element identifier - */ - public AbstractHighlight(TopoElementType type, String elementId) { - this.type = checkNotNull(type); - this.elementId = checkNotNull(elementId); - } - - /** - * Sets a flag to tell the renderer to keep this element subdued. - */ - public void keepSubdued() { - keepSubdued = true; - } - - /** - * Returns the element type. - * - * @return element type - */ - public TopoElementType type() { - return type; - } - - /** - * Returns the element identifier. - * - * @return element identifier - */ - public String elementId() { - return elementId; - } - - /** - * Returns the subdued flag. - * - * @return subdued flag - */ - public boolean subdued() { - return keepSubdued; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BaseLink.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BaseLink.java deleted file mode 100644 index a40383b8..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BaseLink.java +++ /dev/null @@ -1,42 +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.topo; - -import org.onosproject.net.Link; -import org.onosproject.net.LinkKey; - -/** - * A simple concrete implementation of a {@link BiLink}. - * Note that this implementation does not generate any link highlights. - */ -public class BaseLink extends BiLink { - - /** - * Constructs a base link for the given key and initial link. - * - * @param key canonical key for this base link - * @param link first link - */ - public BaseLink(LinkKey key, Link link) { - super(key, link); - } - - @Override - public LinkHighlight highlight(Enum<?> type) { - return null; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BaseLinkMap.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BaseLinkMap.java deleted file mode 100644 index cc2cf4af..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BaseLinkMap.java +++ /dev/null @@ -1,30 +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.topo; - -import org.onosproject.net.Link; -import org.onosproject.net.LinkKey; - -/** - * Collection of {@link BaseLink}s. - */ -public class BaseLinkMap extends BiLinkMap<BaseLink> { - @Override - public BaseLink create(LinkKey key, Link link) { - return new BaseLink(key, link); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BiLink.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BiLink.java deleted file mode 100644 index 1217faae..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BiLink.java +++ /dev/null @@ -1,103 +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.topo; - -import org.onosproject.net.Link; -import org.onosproject.net.LinkKey; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Representation of a link and its inverse, as a partial implementation. - * <p> - * Subclasses will decide how to generate the link highlighting (coloring - * and labeling) for the topology view. - */ -public abstract class BiLink { - - private final LinkKey key; - private final Link one; - private Link two; - - /** - * Constructs a bi-link for the given key and initial link. It is expected - * that the caller will have used {@link TopoUtils#canonicalLinkKey(Link)} - * to generate the key. - * - * @param key canonical key for this bi-link - * @param link first link - */ - public BiLink(LinkKey key, Link link) { - this.key = checkNotNull(key); - this.one = checkNotNull(link); - } - - /** - * Sets the second link for this bi-link. - * - * @param link second link - */ - public void setOther(Link link) { - this.two = checkNotNull(link); - } - - /** - * Returns the link identifier in the form expected on the Topology View - * in the web client. - * - * @return link identifier - */ - public String linkId() { - return TopoUtils.compactLinkString(one); - } - - /** - * Returns the key for this bi-link. - * - * @return the key - */ - public LinkKey key() { - return key; - } - - /** - * Returns the first link in this bi-link. - * - * @return the first link - */ - public Link one() { - return one; - } - - /** - * Returns the second link in this bi-link. - * - * @return the second link - */ - public Link two() { - return two; - } - - /** - * Returns the link highlighting to use, based on this bi-link's current - * state. - * - * @param type optional highlighting type parameter - * @return link highlighting model - */ - public abstract LinkHighlight highlight(Enum<?> type); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BiLinkMap.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BiLinkMap.java deleted file mode 100644 index 9a42e107..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/BiLinkMap.java +++ /dev/null @@ -1,89 +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.topo; - -import org.onosproject.net.Link; -import org.onosproject.net.LinkKey; - -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Represents a collection of {@link BiLink} concrete classes. These maps - * are used to collate a set of unidirectional {@link Link}s into a smaller - * set of bi-directional {@link BiLink} derivatives. - * <p> - * @param <B> the type of bi-link subclass - */ -public abstract class BiLinkMap<B extends BiLink> { - - private final Map<LinkKey, B> map = new HashMap<>(); - - /** - * Creates a new instance of a bi-link. Concrete subclasses should - * instantiate and return the appropriate bi-link subclass. - * - * @param key the link key - * @param link the initial link - * @return a new instance - */ - protected abstract B create(LinkKey key, Link link); - - /** - * Adds the given link to our collection, returning the corresponding - * bi-link (creating one if needed necessary). - * - * @param link the link to add to the collection - * @return the corresponding bi-link wrapper - */ - public B add(Link link) { - LinkKey key = TopoUtils.canonicalLinkKey(checkNotNull(link)); - B blink = map.get(key); - if (blink == null) { - // no bi-link yet exists for this link - blink = create(key, link); - map.put(key, blink); - } else { - // we have a bi-link for this link. - if (!blink.one().equals(link)) { - blink.setOther(link); - } - } - return blink; - } - - /** - * Returns the bi-link instances in the collection. - * - * @return the bi-links in this map - */ - public Collection<B> biLinks() { - return map.values(); - } - - /** - * Returns the number of bi-links in the collection. - * - * @return number of bi-links - */ - public int size() { - return map.size(); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/ButtonId.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/ButtonId.java deleted file mode 100644 index 05b7317d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/ButtonId.java +++ /dev/null @@ -1,69 +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.topo; - -import com.google.common.base.MoreObjects; - -/** - * Designates the identity of a button on the topology view panels. - */ -public class ButtonId { - - private final String id; - - /** - * Creates a button ID with the given identifier. - * - * @param id identifier for the button - */ - public ButtonId(String id) { - this.id = id; - } - - /** - * Returns the identifier for this button. - * - * @return identifier - */ - public String id() { - return id; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(getClass()) - .add("id", id()).toString(); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - ButtonId that = (ButtonId) o; - return id.equals(that.id); - } - - @Override - public int hashCode() { - return id.hashCode(); - } -} 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 deleted file mode 100644 index 0cc15475..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/DeviceHighlight.java +++ /dev/null @@ -1,32 +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.topo; - -/** - * 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); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/Highlights.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/Highlights.java deleted file mode 100644 index 12d3b629..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/Highlights.java +++ /dev/null @@ -1,189 +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.topo; - -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Encapsulates highlights to be applied to the topology view, such as - * highlighting links, displaying link labels, perhaps even decorating - * nodes with badges, etc. - */ -public class Highlights { - - private static final String EMPTY = ""; - private static final String MIN = "min"; - private static final String MAX = "max"; - - /** - * A notion of amount. - */ - public enum Amount { - ZERO(EMPTY), - MINIMALLY(MIN), - MAXIMALLY(MAX); - - private final String s; - Amount(String str) { - s = str; - } - - @Override - public String toString() { - return s; - } - } - - private final Map<String, DeviceHighlight> devices = new HashMap<>(); - private final Map<String, HostHighlight> hosts = new HashMap<>(); - private final Map<String, LinkHighlight> links = new HashMap<>(); - - private Amount subdueLevel = Amount.ZERO; - - - /** - * Adds highlighting information for a device. - * - * @param dh device highlight - * @return self, for chaining - */ - public Highlights add(DeviceHighlight dh) { - devices.put(dh.elementId(), dh); - return this; - } - - /** - * Adds highlighting information for a host. - * - * @param hh host highlight - * @return self, for chaining - */ - public Highlights add(HostHighlight hh) { - hosts.put(hh.elementId(), hh); - return this; - } - - /** - * Adds highlighting information for a link. - * - * @param lh link highlight - * @return self, for chaining - */ - public Highlights add(LinkHighlight lh) { - links.put(lh.elementId(), lh); - return this; - } - - /** - * Marks the amount by which all other elements (devices, hosts, links) - * not explicitly referenced here will be "subdued" visually. - * - * @param amount amount to subdue other elements - * @return self, for chaining - */ - public Highlights subdueAllElse(Amount amount) { - subdueLevel = checkNotNull(amount); - return this; - } - - /** - * Returns the collection of device highlights. - * - * @return device highlights - */ - public Collection<DeviceHighlight> devices() { - return Collections.unmodifiableCollection(devices.values()); - } - - /** - * Returns the collection of host highlights. - * - * @return host highlights - */ - public Collection<HostHighlight> hosts() { - return Collections.unmodifiableCollection(hosts.values()); - } - - /** - * Returns the collection of link highlights. - * - * @return link highlights - */ - public Collection<LinkHighlight> links() { - return Collections.unmodifiableCollection(links.values()); - } - - /** - * Returns the amount by which all other elements not explicitly - * referenced here should be "subdued". - * - * @return amount to subdue other elements - */ - public Amount subdueLevel() { - return subdueLevel; - } - - /** - * Returns the node highlight (device or host) for the given element - * identifier, or null if no match. - * - * @param id element identifier - * @return corresponding node highlight - */ - public NodeHighlight getNode(String id) { - NodeHighlight nh = devices.get(id); - return nh != null ? nh : hosts.get(id); - } - - /** - * Returns the device highlight for the given device identifier, - * or null if no match. - * - * @param id device identifier - * @return corresponding device highlight - */ - public DeviceHighlight getDevice(String id) { - return devices.get(id); - } - - /** - * Returns the host highlight for the given host identifier, - * or null if no match. - * - * @param id host identifier - * @return corresponding host highlight - */ - public HostHighlight getHost(String id) { - return hosts.get(id); - } - - /** - * Returns the link highlight for the given link identifier, - * or null if no match. - * - * @param id link identifier - * @return corresponding link highlight - */ - public LinkHighlight getLink(String id) { - return links.get(id); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/HostHighlight.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/HostHighlight.java deleted file mode 100644 index 48959496..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/HostHighlight.java +++ /dev/null @@ -1,32 +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.topo; - -/** - * Denotes the highlighting to apply to a host. - */ -public class HostHighlight extends NodeHighlight { - - public HostHighlight(String hostId) { - super(TopoElementType.HOST, hostId); - } - - // TODO: implement host highlighting: - // - visual highlight - // - badging - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/LinkHighlight.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/LinkHighlight.java deleted file mode 100644 index a734c6b7..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/LinkHighlight.java +++ /dev/null @@ -1,146 +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.topo; - -import java.util.Collections; -import java.util.Set; -import java.util.TreeSet; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Denotes the highlighting to be applied to a link. - * {@link Flavor} is a closed set of NO-, PRIMARY-, or SECONDARY- highlighting. - * {@link Mod} is an open ended set of additional modifications (CSS classes) - * that may also be applied. - * Note that {@link #MOD_OPTICAL} and {@link #MOD_ANIMATED} are pre-defined mods. - * Label text may be set, which will also be displayed on the link. - */ -public class LinkHighlight extends AbstractHighlight { - - private static final String PLAIN = "plain"; - private static final String PRIMARY = "primary"; - private static final String SECONDARY = "secondary"; - private static final String EMPTY = ""; - private static final String SPACE = " "; - - private final Flavor flavor; - private final Set<Mod> mods = new TreeSet<>(); - private String label = EMPTY; - - /** - * Constructs a link highlight entity. - * - * @param linkId the link identifier - * @param flavor the highlight flavor - */ - public LinkHighlight(String linkId, Flavor flavor) { - super(TopoElementType.LINK, linkId); - this.flavor = checkNotNull(flavor); - } - - /** - * Adds a highlighting modification to this link highlight. - * - * @param mod mod to be added - * @return self, for chaining - */ - public LinkHighlight addMod(Mod mod) { - mods.add(checkNotNull(mod)); - return this; - } - - /** - * Adds a label to be displayed on the link. - * - * @param label the label text - * @return self, for chaining - */ - public LinkHighlight setLabel(String label) { - this.label = label == null ? EMPTY : label; - return this; - } - - /** - * Returns the highlight flavor. - * - * @return highlight flavor - */ - public Flavor flavor() { - return flavor; - } - - /** - * Returns the highlight modifications. - * - * @return highlight modifications - */ - public Set<Mod> mods() { - return Collections.unmodifiableSet(mods); - } - - /** - * Generates the CSS classes string from the {@link #flavor} and - * any optional {@link #mods}. - * - * @return CSS classes string - */ - public String cssClasses() { - StringBuilder sb = new StringBuilder(flavor.toString()); - mods.forEach(m -> sb.append(SPACE).append(m)); - return sb.toString(); - } - - /** - * Returns the label text. - * - * @return label text - */ - public String label() { - return label; - } - - /** - * Link highlighting flavor. - */ - public enum Flavor { - NO_HIGHLIGHT(PLAIN), - PRIMARY_HIGHLIGHT(PRIMARY), - SECONDARY_HIGHLIGHT(SECONDARY); - - private String cssName; - - Flavor(String s) { - cssName = s; - } - - @Override - public String toString() { - return cssName; - } - } - - /** - * Denotes a link to be tagged as an optical link. - */ - public static final Mod MOD_OPTICAL = new Mod("optical"); - - /** - * Denotes a link to be tagged with animated traffic ("marching ants"). - */ - public static final Mod MOD_ANIMATED = new Mod("animated"); -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/Mod.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/Mod.java deleted file mode 100644 index b11ddecd..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/Mod.java +++ /dev/null @@ -1,65 +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.topo; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Highlighting modification. - * <p> - * Note that (for link highlights) this translates to a CSS class name - * that is applied to the link in the Topology UI. - */ -public final class Mod implements Comparable<Mod> { - private final String modId; - - /** - * Constructs a mod with the given identifier. - * - * @param modId modification identifier - */ - public Mod(String modId) { - this.modId = checkNotNull(modId); - } - - @Override - public String toString() { - return modId; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - Mod mod = (Mod) o; - return modId.equals(mod.modId); - } - - @Override - public int hashCode() { - return modId.hashCode(); - } - - @Override - public int compareTo(Mod o) { - return this.modId.compareTo(o.modId); - } -} 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 deleted file mode 100644 index 4edb6712..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/NodeBadge.java +++ /dev/null @@ -1,220 +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.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 deleted file mode 100644 index 69235089..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/NodeHighlight.java +++ /dev/null @@ -1,53 +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.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/NodeSelection.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/NodeSelection.java deleted file mode 100644 index 4aed9038..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/NodeSelection.java +++ /dev/null @@ -1,251 +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.topo; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; -import org.onosproject.net.Device; -import org.onosproject.net.Element; -import org.onosproject.net.Host; -import org.onosproject.net.device.DeviceService; -import org.onosproject.net.host.HostService; -import org.onosproject.ui.JsonUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; - -import static com.google.common.base.Strings.isNullOrEmpty; -import static org.onosproject.net.DeviceId.deviceId; -import static org.onosproject.net.HostId.hostId; - -/** - * Encapsulates a selection of devices and/or hosts from the topology view. - */ -public class NodeSelection { - - private static final Logger log = - LoggerFactory.getLogger(NodeSelection.class); - - private static final String IDS = "ids"; - private static final String HOVER = "hover"; - - private final DeviceService deviceService; - private final HostService hostService; - - private final Set<String> ids; - private final String hover; - - private final Set<Device> devices = new HashSet<>(); - private final Set<Host> hosts = new HashSet<>(); - private Element hovered; - - /** - * Creates a node selection entity, from the given payload, using the - * supplied device and host services. Note that if a device or host was - * hovered over by the mouse, it is available via {@link #hovered()}. - * - * @param payload message payload - * @param deviceService device service - * @param hostService host service - */ - public NodeSelection(ObjectNode payload, - DeviceService deviceService, - HostService hostService) { - this.deviceService = deviceService; - this.hostService = hostService; - - ids = extractIds(payload); - hover = extractHover(payload); - - // start by extracting the hovered element if any - if (isNullOrEmpty(hover)) { - hovered = null; - } else { - setHoveredElement(); - } - - // now go find the devices and hosts that are in the selection list - Set<String> unmatched = findDevices(ids); - unmatched = findHosts(unmatched); - if (unmatched.size() > 0) { - log.debug("Skipping unmatched IDs {}", unmatched); - } - - } - - /** - * Returns a view of the selected devices (hover not included). - * - * @return selected devices - */ - public Set<Device> devices() { - return Collections.unmodifiableSet(devices); - } - - /** - * Returns a view of the selected devices, including the hovered device - * if there was one. - * - * @return selected (plus hovered) devices - */ - public Set<Device> devicesWithHover() { - Set<Device> withHover; - if (hovered != null && hovered instanceof Device) { - withHover = new HashSet<>(devices); - withHover.add((Device) hovered); - } else { - withHover = devices; - } - return Collections.unmodifiableSet(withHover); - } - - /** - * Returns a view of the selected hosts (hover not included). - * - * @return selected hosts - */ - public Set<Host> hosts() { - return Collections.unmodifiableSet(hosts); - } - - /** - * Returns a view of the selected hosts, including the hovered host - * if thee was one. - * - * @return selected (plus hovered) hosts - */ - public Set<Host> hostsWithHover() { - Set<Host> withHover; - if (hovered != null && hovered instanceof Host) { - withHover = new HashSet<>(hosts); - withHover.add((Host) hovered); - } else { - withHover = hosts; - } - return Collections.unmodifiableSet(withHover); - } - - /** - * Returns the element (host or device) over which the mouse was hovering, - * or null. - * - * @return element hovered over - */ - public Element hovered() { - return hovered; - } - - /** - * Returns true if nothing is selected. - * - * @return true if nothing selected - */ - public boolean none() { - return devices().size() == 0 && hosts().size() == 0; - } - - @Override - public String toString() { - return "NodeSelection{" + - "ids=" + ids + - ", hover='" + hover + '\'' + - ", #devices=" + devices.size() + - ", #hosts=" + hosts.size() + - '}'; - } - - // == helper methods - - private Set<String> extractIds(ObjectNode payload) { - ArrayNode array = (ArrayNode) payload.path(IDS); - if (array == null || array.size() == 0) { - return Collections.emptySet(); - } - - Set<String> ids = new HashSet<>(); - for (JsonNode node : array) { - ids.add(node.asText()); - } - return ids; - } - - private String extractHover(ObjectNode payload) { - return JsonUtils.string(payload, HOVER); - } - - private void setHoveredElement() { - Set<String> unmatched; - unmatched = new HashSet<>(); - unmatched.add(hover); - unmatched = findDevices(unmatched); - if (devices.size() == 1) { - hovered = devices.iterator().next(); - devices.clear(); - } else { - unmatched = findHosts(unmatched); - if (hosts.size() == 1) { - hovered = hosts.iterator().next(); - hosts.clear(); - } else { - hovered = null; - log.debug("Skipping unmatched HOVER {}", unmatched); - } - } - } - - private Set<String> findDevices(Set<String> ids) { - Set<String> unmatched = new HashSet<>(); - Device device; - - for (String id : ids) { - try { - device = deviceService.getDevice(deviceId(id)); - if (device != null) { - devices.add(device); - } else { - unmatched.add(id); - } - } catch (Exception e) { - unmatched.add(id); - } - } - return unmatched; - } - - private Set<String> findHosts(Set<String> ids) { - Set<String> unmatched = new HashSet<>(); - Host host; - - for (String id : ids) { - try { - host = hostService.getHost(hostId(id)); - if (host != null) { - hosts.add(host); - } else { - unmatched.add(id); - } - } catch (Exception e) { - unmatched.add(id); - } - } - return unmatched; - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/PropertyPanel.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/PropertyPanel.java deleted file mode 100644 index c75eccf9..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/PropertyPanel.java +++ /dev/null @@ -1,370 +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.topo; - -import com.google.common.collect.Sets; - -import java.text.NumberFormat; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - -/** - * Models a panel displayed on the Topology View. - */ -public class PropertyPanel { - - private static final NumberFormat NF = NumberFormat.getInstance(); - - private String title; - private String typeId; - private String id; - private List<Prop> properties = new ArrayList<>(); - private List<ButtonId> buttons = new ArrayList<>(); - - /** - * Constructs a property panel model with the given title and - * type identifier (icon to display). - * - * @param title title text - * @param typeId type (icon) ID - */ - public PropertyPanel(String title, String typeId) { - this.title = title; - this.typeId = typeId; - } - - /** - * Returns a number formatter to use for formatting integer and long - * property values. - * <p> - * This default implementation uses a formatter for the default - * locale. For example: - * <pre> - * Locale.ENGLISH : 1000 -> "1,000" - * Locale.FRENCH : 1000 -> "1 000" - * Locale.GERMAN : 1000 -> "1.000" - * </pre> - * - * @return the number formatter - */ - protected NumberFormat formatter() { - return NF; - } - - /** - * Adds an ID field to the panel data, to be included in - * the returned JSON data to the client. - * - * @param id the identifier - * @return self, for chaining - */ - public PropertyPanel id(String id) { - this.id = id; - return this; - } - - /** - * Adds a property to the panel data. - * - * @param key property key - * @param value property value - * @return self, for chaining - */ - public PropertyPanel addProp(String key, String value) { - properties.add(new Prop(key, value)); - return this; - } - - /** - * Adds a property to the panel data, using a decimal formatter. - * - * @param key property key - * @param value property value - * @return self, for chaining - */ - public PropertyPanel addProp(String key, int value) { - properties.add(new Prop(key, formatter().format(value))); - return this; - } - - /** - * Adds a property to the panel data, using a decimal formatter. - * - * @param key property key - * @param value property value - * @return self, for chaining - */ - public PropertyPanel addProp(String key, long value) { - properties.add(new Prop(key, formatter().format(value))); - return this; - } - - /** - * Adds a property to the panel data. Note that the value's - * {@link Object#toString toString()} method is used to convert the - * value to a string. - * - * @param key property key - * @param value property value - * @return self, for chaining - */ - public PropertyPanel addProp(String key, Object value) { - properties.add(new Prop(key, value.toString())); - return this; - } - - /** - * Adds a property to the panel data. Note that the value's - * {@link Object#toString toString()} method is used to convert the - * value to a string, from which the characters defined in the given - * regular expression string are stripped. - * - * @param key property key - * @param value property value - * @param reStrip regexp characters to strip from value string - * @return self, for chaining - */ - public PropertyPanel addProp(String key, Object value, String reStrip) { - String val = value.toString().replaceAll(reStrip, ""); - properties.add(new Prop(key, val)); - return this; - } - - /** - * Adds a separator to the panel data. - * - * @return self, for chaining - */ - public PropertyPanel addSeparator() { - properties.add(new Separator()); - return this; - } - - /** - * Returns the title text. - * - * @return title text - */ - public String title() { - return title; - } - - /** - * Returns the type identifier. - * - * @return type identifier - */ - public String typeId() { - return typeId; - } - - /** - * Returns the internal ID. - * - * @return the ID - */ - public String id() { - return id; - } - - /** - * Returns the list of properties to be displayed. - * - * @return the property list - */ - // TODO: consider protecting this? - public List<Prop> properties() { - return properties; - } - - /** - * Returns the list of button descriptors. - * - * @return the button list - */ - // TODO: consider protecting this? - public List<ButtonId> buttons() { - return buttons; - } - - // == MUTATORS - - /** - * Sets the title text. - * - * @param title title text - * @return self, for chaining - */ - public PropertyPanel title(String title) { - this.title = title; - return this; - } - - /** - * Sets the type identifier (icon ID). - * - * @param typeId type identifier - * @return self, for chaining - */ - public PropertyPanel typeId(String typeId) { - this.typeId = typeId; - return this; - } - - /** - * Removes properties with the given keys from the list. - * - * @param keys keys of properties to remove - * @return self, for chaining - */ - public PropertyPanel removeProps(String... keys) { - Set<String> forRemoval = Sets.newHashSet(keys); - List<Prop> toKeep = new ArrayList<>(); - for (Prop p: properties) { - if (!forRemoval.contains(p.key())) { - toKeep.add(p); - } - } - properties = toKeep; - return this; - } - - /** - * Removes all currently defined properties. - * - * @return self, for chaining - */ - public PropertyPanel removeAllProps() { - properties.clear(); - return this; - } - - /** - * Adds the given button descriptor to the panel data. - * - * @param button button descriptor - * @return self, for chaining - */ - public PropertyPanel addButton(ButtonId button) { - buttons.add(button); - return this; - } - - /** - * Removes buttons with the given descriptors from the list. - * - * @param descriptors descriptors to remove - * @return self, for chaining - */ - public PropertyPanel removeButtons(ButtonId... descriptors) { - Set<ButtonId> forRemoval = Sets.newHashSet(descriptors); - List<ButtonId> toKeep = new ArrayList<>(); - for (ButtonId bd: buttons) { - if (!forRemoval.contains(bd)) { - toKeep.add(bd); - } - } - buttons = toKeep; - return this; - } - - /** - * Removes all currently defined buttons. - * - * @return self, for chaining - */ - public PropertyPanel removeAllButtons() { - buttons.clear(); - return this; - } - - // ==================== - - - /** - * Simple data carrier for a property, composed of a key/value pair. - */ - public static class Prop { - private final String key; - private final String value; - - /** - * Constructs a property data value. - * - * @param key property key - * @param value property value - */ - public Prop(String key, String value) { - this.key = key; - this.value = value; - } - - /** - * Returns the property's key. - * - * @return the key - */ - public String key() { - return key; - } - - /** - * Returns the property's value. - * - * @return the value - */ - public String value() { - return value; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - Prop prop = (Prop) o; - return key.equals(prop.key) && value.equals(prop.value); - } - - @Override - public int hashCode() { - int result = key.hashCode(); - result = 31 * result + value.hashCode(); - return result; - } - - @Override - public String toString() { - return "{" + key + " -> " + value + "}"; - } - } - - /** - * Auxiliary class representing a separator property. - */ - public static class Separator extends Prop { - public Separator() { - super("-", ""); - } - } - -} 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 deleted file mode 100644 index e2034fa7..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoConstants.java +++ /dev/null @@ -1,131 +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.topo; - -/** - * Defines string constants used in the Topology View of the ONOS GUI. - * <p> - * See also: - * <ul> - * <li> https://wiki.onosproject.org/display/ONOS/UI+Service+-+GlyphService </li> - * </ul> - */ -public final class TopoConstants { - - /** - * Defines constants for standard glyph identifiers. - */ - 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"; - public static final String FLOW_TABLE = "flowTable"; - public static final String PORT_TABLE = "portTable"; - public static final String GROUP_TABLE = "groupTable"; - public static final String SUMMARY = "summary"; - public static final String DETAILS = "details"; - public static final String PORTS = "ports"; - public static final String MAP = "map"; - public static final String CYCLE_LABELS = "cycleLabels"; - public static final String OBLIQUE = "oblique"; - public static final String FILTERS = "filters"; - public static final String RESET_ZOOM = "resetZoom"; - public static final String RELATED_INTENTS = "relatedIntents"; - public static final String NEXT_INTENT = "nextIntent"; - public static final String PREV_INTENT = "prevIntent"; - public static final String INTENT_TRAFFIC = "intentTraffic"; - public static final String ALL_TRAFFIC = "allTraffic"; - public static final String FLOWS = "flows"; - public static final String EQ_MASTER = "eqMaster"; - public static final String UI_ATTACHED = "uiAttached"; - public static final String CHECK_MARK = "checkMark"; - public static final String X_MARK = "xMark"; - public static final String TRIANGLE_UP = "triangleUp"; - public static final String TRIANGLE_DOWN = "triangleDown"; - public static final String PLUS = "plus"; - public static final String MINUS = "minus"; - public static final String PLAY = "play"; - public static final String STOP = "stop"; - public static final String CLOUD = "cloud"; - } - - /** - * Defines constants for property names on the default summary and - * details panels. - */ - public static final class Properties { - public static final String SEPARATOR = "-"; - - // summary panel - public static final String DEVICES = "Devices"; - public static final String LINKS = "Links"; - public static final String HOSTS = "Hosts"; - public static final String TOPOLOGY_SSCS = "Topology SCCs"; - public static final String INTENTS = "Intents"; - public static final String TUNNELS = "Tunnels"; - public static final String FLOWS = "Flows"; - public static final String VERSION = "Version"; - - // device details - public static final String URI = "URI"; - public static final String VENDOR = "Vendor"; - public static final String HW_VERSION = "H/W Version"; - public static final String SW_VERSION = "S/W Version"; - public static final String SERIAL_NUMBER = "Serial Number"; - public static final String PROTOCOL = "Protocol"; - public static final String LATITUDE = "Latitude"; - public static final String LONGITUDE = "Longitude"; - public static final String PORTS = "Ports"; - - // host details - public static final String MAC = "MAC"; - public static final String IP = "IP"; - public static final String VLAN = "VLAN"; - } - - /** - * Defines identities of core buttons that appear on the topology - * details panel. - */ - public static final class CoreButtons { - public static final ButtonId SHOW_DEVICE_VIEW = - new ButtonId("showDeviceView"); - - public static final ButtonId SHOW_FLOW_VIEW = - new ButtonId("showFlowView"); - - public static final ButtonId SHOW_PORT_VIEW = - new ButtonId("showPortView"); - - public static final ButtonId SHOW_GROUP_VIEW = - new ButtonId("showGroupView"); - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoElementType.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoElementType.java deleted file mode 100644 index 39947440..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoElementType.java +++ /dev/null @@ -1,24 +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.topo; - -/** - * The topology element types to which a highlight can be applied. - */ -public enum TopoElementType { - DEVICE, HOST, LINK -} 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 deleted file mode 100644 index efe69f5f..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoJson.java +++ /dev/null @@ -1,182 +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.topo; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; - -import static org.onosproject.ui.JsonUtils.envelope; - -/** - * JSON utilities for the Topology View. - */ -public final class TopoJson { - // package-private for unit test access - static final String SHOW_HIGHLIGHTS = "showHighlights"; - - 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 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"; - 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() { } - - /** - * Returns a formatted message ready to send to the topology view - * to render highlights. - * - * @param highlights highlights model to transform - * @return fully formatted "show highlights" message - */ - public static ObjectNode highlightsMessage(Highlights highlights) { - return envelope(SHOW_HIGHLIGHTS, json(highlights)); - } - - /** - * 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(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; - } - - private static ObjectNode json(HostHighlight hh) { - ObjectNode n = objectNode() - .put(ID, hh.elementId()); - if (hh.subdued()) { - n.put(SUBDUE, true); - } - NodeBadge badge = hh.badge(); - if (badge != null) { - n.set(BADGE, json(badge)); - } - 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; - } - -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoUtils.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoUtils.java deleted file mode 100644 index b38a7f7d..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/TopoUtils.java +++ /dev/null @@ -1,158 +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.topo; - -import org.onosproject.net.Link; -import org.onosproject.net.LinkKey; - -import java.text.DecimalFormat; - -import static org.onosproject.net.LinkKey.linkKey; - -/** - * Utility methods for helping out with formatting data for the Topology View - * in the web client. - */ -public final class TopoUtils { - - // explicit decision made to not 'javadoc' these self explanatory constants - public static final double KILO = 1024; - public static final double MEGA = 1024 * KILO; - public static final double GIGA = 1024 * MEGA; - - public static final String GBITS_UNIT = "Gb"; - public static final String MBITS_UNIT = "Mb"; - public static final String KBITS_UNIT = "Kb"; - public static final String BITS_UNIT = "b"; - public static final String GBYTES_UNIT = "GB"; - public static final String MBYTES_UNIT = "MB"; - public static final String KBYTES_UNIT = "KB"; - public static final String BYTES_UNIT = "B"; - - - private static final DecimalFormat DF2 = new DecimalFormat("#,###.##"); - - private static final String COMPACT = "%s/%s-%s/%s"; - private static final String EMPTY = ""; - private static final String SPACE = " "; - private static final String PER_SEC = "ps"; - private static final String FLOW = "flow"; - private static final String FLOWS = "flows"; - - // non-instantiable - private TopoUtils() { } - - /** - * Returns a compact identity for the given link, in the form - * used to identify links in the Topology View on the client. - * - * @param link link - * @return compact link identity - */ - public static String compactLinkString(Link link) { - return String.format(COMPACT, link.src().elementId(), link.src().port(), - link.dst().elementId(), link.dst().port()); - } - - /** - * Produces a canonical link key, that is, one that will match both a link - * and its inverse. - * - * @param link the link - * @return canonical key - */ - public static LinkKey canonicalLinkKey(Link link) { - String sn = link.src().elementId().toString(); - String dn = link.dst().elementId().toString(); - return sn.compareTo(dn) < 0 ? - linkKey(link.src(), link.dst()) : linkKey(link.dst(), link.src()); - } - - /** - * Returns human readable count of bytes, to be displayed as a label. - * - * @param bytes number of bytes - * @return formatted byte count - */ - public static String formatBytes(long bytes) { - String unit; - double value; - if (bytes > GIGA) { - value = bytes / GIGA; - unit = GBYTES_UNIT; - } else if (bytes > MEGA) { - value = bytes / MEGA; - unit = MBYTES_UNIT; - } else if (bytes > KILO) { - value = bytes / KILO; - unit = KBYTES_UNIT; - } else { - value = bytes; - unit = BYTES_UNIT; - } - return DF2.format(value) + SPACE + unit; - } - - /** - * Returns human readable bit rate, to be displayed as a label. - * - * @param bytes bytes per second - * @return formatted bits per second - */ - public static String formatBitRate(long bytes) { - String unit; - double value; - - //Convert to bits - long bits = bytes * 8; - if (bits > GIGA) { - value = bits / GIGA; - unit = GBITS_UNIT; - - // NOTE: temporary hack to clip rate at 10.0 Gbps - // Added for the CORD Fabric demo at ONS 2015 - // TODO: provide a more elegant solution to this issue - if (value > 10.0) { - value = 10.0; - } - - } else if (bits > MEGA) { - value = bits / MEGA; - unit = MBITS_UNIT; - } else if (bits > KILO) { - value = bits / KILO; - unit = KBITS_UNIT; - } else { - value = bits; - unit = BITS_UNIT; - } - return DF2.format(value) + SPACE + unit + PER_SEC; - } - - /** - * Returns human readable flow count, to be displayed as a label. - * - * @param flows number of flows - * @return formatted flow count - */ - public static String formatFlows(long flows) { - if (flows < 1) { - return EMPTY; - } - return String.valueOf(flows) + SPACE + (flows > 1 ? FLOWS : FLOW); - } -} diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/package-info.java b/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/package-info.java deleted file mode 100644 index 85ac7fea..00000000 --- a/framework/src/onos/core/api/src/main/java/org/onosproject/ui/topo/package-info.java +++ /dev/null @@ -1,21 +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. - */ - -/** - * Mechanism for dynamically extending topology view with information and - * behaviour overlays. - */ -package org.onosproject.ui.topo;
\ No newline at end of file |