From a00b0ceca80c013938f69960b4afc20ccfc7e2e4 Mon Sep 17 00:00:00 2001 From: Simon Hunt Date: Fri, 22 May 2015 15:57:11 -0700 Subject: [PATCH] CORD Subscriber GUI - Plumbed through to XosManager - almost ready to wire up to RestClient code. Change-Id: I3fc2aac924934489172abe67688e7166278c68ac --- .../onosproject/cord/gui/CordModelCache.java | 3 +- .../org/onosproject/cord/gui/XosManager.java | 80 +++++++++++++++++++ .../cord/gui/model/DefaultXosFunction.java | 8 ++ .../cord/gui/model/SubscriberUser.java | 5 ++ .../cord/gui/model/UrlFilterFunction.java | 11 +++ .../cord/gui/model/XosFunction.java | 9 +++ 6 files changed, 115 insertions(+), 1 deletion(-) diff --git a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/CordModelCache.java b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/CordModelCache.java index 10b7318c7a..f660c64b13 100644 --- a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/CordModelCache.java +++ b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/CordModelCache.java @@ -109,7 +109,7 @@ public class CordModelCache extends JsonFactory { } } - // TODO: tell XOS which functions are enabled / disabled + XosManager.INSTANCE.setNewBundle(SUBSCRIBER_ID, currentBundle); } @@ -144,6 +144,7 @@ public class CordModelCache extends JsonFactory { checkNotNull(func, "function not part of bundle: " + funcId); func.applyParam(user, param, value); + XosManager.INSTANCE.apply(SUBSCRIBER_ID, func, user); } // ============= diff --git a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/XosManager.java b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/XosManager.java index 4ae42ba327..e0ce191ccb 100644 --- a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/XosManager.java +++ b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/XosManager.java @@ -17,9 +17,89 @@ package org.onosproject.cord.gui; +import org.onosproject.cord.gui.model.Bundle; +import org.onosproject.cord.gui.model.SubscriberUser; +import org.onosproject.cord.gui.model.XosFunction; +import org.onosproject.cord.gui.model.XosFunctionDescriptor; + +import java.util.Set; + /** * Encapsulation of interactions with XOS. */ public class XosManager { + private static final String XOS_HOST = "10.254.1.22"; + private static final String XOS_PORT = "8000"; + + private static final String URL_FMT = "http://%s:%s/xoslib/rs/subscriber/"; + + private static final String BASE_URL = + String.format(URL_FMT, XOS_HOST, XOS_PORT); + + + /** + * No instantiation (except via unit test). + */ + XosManager() {} + + /** + * Configure XOS to enable the functions that compose the given bundle, + * and disable all the others, for the given subscriber. + * + * @param subscriberId subscriber identifier + * @param bundle new bundle to set + */ + public void setNewBundle(int subscriberId, Bundle bundle) { + System.out.println("\n>> Set New Bundle : " + bundle.descriptor().id()); + + String urlFmt = xosUrl(subscriberId) + "services/%s/%s"; + Set inBundle = bundle.descriptor().functions(); + for (XosFunctionDescriptor xfd: XosFunctionDescriptor.values()) { + xosEnableFunction(urlFmt, xfd, inBundle.contains(xfd)); + } + } + + /** + * Configure XOS with new setting for given user and function, for the + * given subscriber account. + * + * @param subscriberId subscriber identifier + * @param func specific XOS function + * @param user user (containing function state) + */ + public void apply(int subscriberId, XosFunction func, SubscriberUser user) { + System.out.println("\n>> Apply : " + func + " for " + user); + + String urlPrefix = xosUrl(subscriberId) + "users/" + user.id() + "/"; + String url = urlPrefix + func.xosUrlApply(user); + restPut(url); + } + + + // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + + private String xosUrl(int subscriberId) { + return BASE_URL + String.format("%d/", subscriberId); + } + + private void xosEnableFunction(String urlFmt, XosFunctionDescriptor xfd, + boolean enable) { + String url = String.format(urlFmt, xfd.id(), enable); + restPut(url); + } + + // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + + private void restPut(String url) { + // TODO: wire up to Jackson client... + System.out.println("<> " + url); + } + + // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + + /** + * Singleton instance. + */ + public static final XosManager INSTANCE = new XosManager(); } diff --git a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/DefaultXosFunction.java b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/DefaultXosFunction.java index f4a25e7a59..1ffa8ef010 100644 --- a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/DefaultXosFunction.java +++ b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/DefaultXosFunction.java @@ -55,4 +55,12 @@ public class DefaultXosFunction implements XosFunction { return null; } + public String xosUrlApply(SubscriberUser user) { + return null; + } + + @Override + public String toString() { + return "{XosFunction: " + xfd + "}"; + } } diff --git a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/SubscriberUser.java b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/SubscriberUser.java index 88dd3d8ee7..31ac794a29 100644 --- a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/SubscriberUser.java +++ b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/SubscriberUser.java @@ -99,4 +99,9 @@ public class SubscriberUser { public void clearMementos() { mementos.clear(); } + + @Override + public String toString() { + return "{User: " + name + "}"; + } } diff --git a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/UrlFilterFunction.java b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/UrlFilterFunction.java index d1f84835e5..a2e2f2c349 100644 --- a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/UrlFilterFunction.java +++ b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/UrlFilterFunction.java @@ -71,5 +71,16 @@ public class UrlFilterFunction extends DefaultXosFunction { public void setLevel(Level level) { this.level = level; } + + public String level() { + return level.toString(); + } + } + + @Override + public String xosUrlApply(SubscriberUser user) { + XosFunctionDescriptor xfd = XosFunctionDescriptor.URL_FILTER; + UrlFilterMemento memo = (UrlFilterMemento) user.getMemento(xfd); + return xfd.id() + "/" + memo.level(); } } diff --git a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/XosFunction.java b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/XosFunction.java index 3c02a72d48..2790dfd575 100644 --- a/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/XosFunction.java +++ b/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/XosFunction.java @@ -49,6 +49,15 @@ public interface XosFunction { */ Memento createMemento(); + /** + * Create the XOS specific URL suffix for applying state change for + * the given user. + * + * @param user the user + * @return URL suffix + */ + String xosUrlApply(SubscriberUser user); + /** * Internal state memento. */