[ONOS-6958] Add glyph registration java code
Change-Id: I954c790062f8ff5498c34c334827c4f695278a9e
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/UiExtensionManager.java b/web/gui/src/main/java/org/onosproject/ui/impl/UiExtensionManager.java
index 9b7472b..bb24c89 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/UiExtensionManager.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/UiExtensionManager.java
@@ -48,6 +48,8 @@
import org.onosproject.store.service.StorageService;
import org.onosproject.ui.UiExtension;
import org.onosproject.ui.UiExtensionService;
+import org.onosproject.ui.UiGlyph;
+import org.onosproject.ui.UiGlyphFactory;
import org.onosproject.ui.UiMessageHandlerFactory;
import org.onosproject.ui.UiPreferencesService;
import org.onosproject.ui.UiSessionToken;
@@ -82,6 +84,8 @@
import static org.onosproject.security.AppGuard.checkPermission;
import static org.onosproject.security.AppPermission.Type.UI_READ;
import static org.onosproject.security.AppPermission.Type.UI_WRITE;
+import static org.onosproject.security.AppPermission.Type.GLYPH_READ;
+import static org.onosproject.security.AppPermission.Type.GLYPH_WRITE;
import static org.onosproject.ui.UiView.Category.NETWORK;
import static org.onosproject.ui.UiView.Category.PLATFORM;
import static org.onosproject.ui.impl.lion.BundleStitcher.generateBundles;
@@ -102,6 +106,8 @@
private static final String CORE = "core";
private static final String GUI_ADDED = "guiAdded";
private static final String GUI_REMOVED = "guiRemoved";
+ private static final String GLYPH_ADDED = "glyphAdded";
+ private static final String GLYPH_REMOVED = "glyphRemoved";
private static final String UPDATE_PREFS = "updatePrefs";
private static final String SLASH = "/";
@@ -134,6 +140,8 @@
// List of all extensions
private final List<UiExtension> extensions = Lists.newArrayList();
+ private final List<UiGlyph> glyphs = Lists.newArrayList();
+
// Map of views to extensions
private final Map<String, UiExtension> views = Maps.newHashMap();
@@ -332,12 +340,46 @@
}
@Override
+ public synchronized void register(UiGlyphFactory glyphFactory) {
+ checkPermission(GLYPH_WRITE);
+ boolean glyphAdded = false;
+ for (UiGlyph glyph : glyphFactory.glyphs()) {
+ if (!glyphs.contains(glyph)) {
+ glyphs.add(glyph);
+ glyphAdded = true;
+ }
+ }
+ if (glyphAdded) {
+ UiWebSocketServlet.sendToAll(GLYPH_ADDED, null);
+ }
+ }
+
+ @Override
+ public synchronized void unregister(UiGlyphFactory glyphFactory) {
+ checkPermission(GLYPH_WRITE);
+ boolean glyphRemoved = false;
+ for (UiGlyph glyph : glyphFactory.glyphs()) {
+ glyphs.remove(glyph);
+ glyphRemoved = true;
+ }
+ if (glyphRemoved) {
+ UiWebSocketServlet.sendToAll(GLYPH_REMOVED, null);
+ }
+ }
+
+ @Override
public synchronized List<UiExtension> getExtensions() {
checkPermission(UI_READ);
return ImmutableList.copyOf(extensions);
}
@Override
+ public synchronized List<UiGlyph> getGlyphs() {
+ checkPermission(GLYPH_READ);
+ return ImmutableList.copyOf(glyphs);
+ }
+
+ @Override
public synchronized UiExtension getViewExtension(String viewId) {
checkPermission(UI_READ);
return views.get(viewId);
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java
index ea7e5ed..32f4981 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java
@@ -27,6 +27,7 @@
import org.onosproject.ui.UiConnection;
import org.onosproject.ui.UiExtension;
import org.onosproject.ui.UiExtensionService;
+import org.onosproject.ui.UiGlyph;
import org.onosproject.ui.UiMessageHandler;
import org.onosproject.ui.UiMessageHandlerFactory;
import org.onosproject.ui.UiSessionToken;
@@ -77,6 +78,8 @@
private static final String TOPO = "topo";
+ private static final String GLYPHS = "glyphs";
+
private static final long MAX_AGE_MS = 30_000;
private static final byte PING = 0x9;
@@ -436,9 +439,21 @@
instances.add(instance);
}
+ ArrayNode glyphInstances = arrayNode();
+ UiExtensionService uiExtensionService = directory.get(UiExtensionService.class);
+ for (UiGlyph glyph : uiExtensionService.getGlyphs()) {
+ ObjectNode glyphInstance = objectNode()
+ .put(GlyphConstants.ID, glyph.id())
+ .put(GlyphConstants.VIEWBOX, glyph.viewbox())
+ .put(GlyphConstants.PATH, glyph.path());
+ glyphInstances.add(glyphInstance);
+ }
+
ObjectNode payload = objectNode();
payload.set(CLUSTER_NODES, instances);
+ payload.set(GLYPHS, glyphInstances);
payload.put(USER, userName);
+
sendMessage(BOOTSTRAP, payload);
}