Simon Hunt
Committed by Gerrit Code Review

CORD Subscriber GUI - Plumbed through to XosManager - almost ready to wire up to RestClient code.

Change-Id: I3fc2aac924934489172abe67688e7166278c68ac
...@@ -109,7 +109,7 @@ public class CordModelCache extends JsonFactory { ...@@ -109,7 +109,7 @@ public class CordModelCache extends JsonFactory {
109 } 109 }
110 } 110 }
111 111
112 - // TODO: tell XOS which functions are enabled / disabled 112 + XosManager.INSTANCE.setNewBundle(SUBSCRIBER_ID, currentBundle);
113 } 113 }
114 114
115 115
...@@ -144,6 +144,7 @@ public class CordModelCache extends JsonFactory { ...@@ -144,6 +144,7 @@ public class CordModelCache extends JsonFactory {
144 checkNotNull(func, "function not part of bundle: " + funcId); 144 checkNotNull(func, "function not part of bundle: " + funcId);
145 145
146 func.applyParam(user, param, value); 146 func.applyParam(user, param, value);
147 + XosManager.INSTANCE.apply(SUBSCRIBER_ID, func, user);
147 } 148 }
148 149
149 // ============= 150 // =============
......
...@@ -17,9 +17,89 @@ ...@@ -17,9 +17,89 @@
17 17
18 package org.onosproject.cord.gui; 18 package org.onosproject.cord.gui;
19 19
20 +import org.onosproject.cord.gui.model.Bundle;
21 +import org.onosproject.cord.gui.model.SubscriberUser;
22 +import org.onosproject.cord.gui.model.XosFunction;
23 +import org.onosproject.cord.gui.model.XosFunctionDescriptor;
24 +
25 +import java.util.Set;
26 +
20 /** 27 /**
21 * Encapsulation of interactions with XOS. 28 * Encapsulation of interactions with XOS.
22 */ 29 */
23 public class XosManager { 30 public class XosManager {
24 31
32 + private static final String XOS_HOST = "10.254.1.22";
33 + private static final String XOS_PORT = "8000";
34 +
35 + private static final String URL_FMT = "http://%s:%s/xoslib/rs/subscriber/";
36 +
37 + private static final String BASE_URL =
38 + String.format(URL_FMT, XOS_HOST, XOS_PORT);
39 +
40 +
41 + /**
42 + * No instantiation (except via unit test).
43 + */
44 + XosManager() {}
45 +
46 + /**
47 + * Configure XOS to enable the functions that compose the given bundle,
48 + * and disable all the others, for the given subscriber.
49 + *
50 + * @param subscriberId subscriber identifier
51 + * @param bundle new bundle to set
52 + */
53 + public void setNewBundle(int subscriberId, Bundle bundle) {
54 + System.out.println("\n>> Set New Bundle : " + bundle.descriptor().id());
55 +
56 + String urlFmt = xosUrl(subscriberId) + "services/%s/%s";
57 + Set<XosFunctionDescriptor> inBundle = bundle.descriptor().functions();
58 + for (XosFunctionDescriptor xfd: XosFunctionDescriptor.values()) {
59 + xosEnableFunction(urlFmt, xfd, inBundle.contains(xfd));
60 + }
61 + }
62 +
63 + /**
64 + * Configure XOS with new setting for given user and function, for the
65 + * given subscriber account.
66 + *
67 + * @param subscriberId subscriber identifier
68 + * @param func specific XOS function
69 + * @param user user (containing function state)
70 + */
71 + public void apply(int subscriberId, XosFunction func, SubscriberUser user) {
72 + System.out.println("\n>> Apply : " + func + " for " + user);
73 +
74 + String urlPrefix = xosUrl(subscriberId) + "users/" + user.id() + "/";
75 + String url = urlPrefix + func.xosUrlApply(user);
76 + restPut(url);
77 + }
78 +
79 +
80 + // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
81 +
82 + private String xosUrl(int subscriberId) {
83 + return BASE_URL + String.format("%d/", subscriberId);
84 + }
85 +
86 + private void xosEnableFunction(String urlFmt, XosFunctionDescriptor xfd,
87 + boolean enable) {
88 + String url = String.format(urlFmt, xfd.id(), enable);
89 + restPut(url);
90 + }
91 +
92 + // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
93 +
94 + private void restPut(String url) {
95 + // TODO: wire up to Jackson client...
96 + System.out.println("<<PUT>> " + url);
97 + }
98 +
99 + // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
100 +
101 + /**
102 + * Singleton instance.
103 + */
104 + public static final XosManager INSTANCE = new XosManager();
25 } 105 }
......
...@@ -55,4 +55,12 @@ public class DefaultXosFunction implements XosFunction { ...@@ -55,4 +55,12 @@ public class DefaultXosFunction implements XosFunction {
55 return null; 55 return null;
56 } 56 }
57 57
58 + public String xosUrlApply(SubscriberUser user) {
59 + return null;
60 + }
61 +
62 + @Override
63 + public String toString() {
64 + return "{XosFunction: " + xfd + "}";
65 + }
58 } 66 }
......
...@@ -99,4 +99,9 @@ public class SubscriberUser { ...@@ -99,4 +99,9 @@ public class SubscriberUser {
99 public void clearMementos() { 99 public void clearMementos() {
100 mementos.clear(); 100 mementos.clear();
101 } 101 }
102 +
103 + @Override
104 + public String toString() {
105 + return "{User: " + name + "}";
106 + }
102 } 107 }
......
...@@ -71,5 +71,16 @@ public class UrlFilterFunction extends DefaultXosFunction { ...@@ -71,5 +71,16 @@ public class UrlFilterFunction extends DefaultXosFunction {
71 public void setLevel(Level level) { 71 public void setLevel(Level level) {
72 this.level = level; 72 this.level = level;
73 } 73 }
74 +
75 + public String level() {
76 + return level.toString();
77 + }
78 + }
79 +
80 + @Override
81 + public String xosUrlApply(SubscriberUser user) {
82 + XosFunctionDescriptor xfd = XosFunctionDescriptor.URL_FILTER;
83 + UrlFilterMemento memo = (UrlFilterMemento) user.getMemento(xfd);
84 + return xfd.id() + "/" + memo.level();
74 } 85 }
75 } 86 }
......
...@@ -50,6 +50,15 @@ public interface XosFunction { ...@@ -50,6 +50,15 @@ public interface XosFunction {
50 Memento createMemento(); 50 Memento createMemento();
51 51
52 /** 52 /**
53 + * Create the XOS specific URL suffix for applying state change for
54 + * the given user.
55 + *
56 + * @param user the user
57 + * @return URL suffix
58 + */
59 + String xosUrlApply(SubscriberUser user);
60 +
61 + /**
53 * Internal state memento. 62 * Internal state memento.
54 */ 63 */
55 interface Memento { 64 interface Memento {
......