Committed by
Gerrit Code Review
CORD GUI - Coded up email -> SSID -> Subscriber ID lookup on the server side.
Change-Id: I79715f090a692cfcce744cede88772f79b49f599
Showing
3 changed files
with
131 additions
and
18 deletions
... | @@ -32,6 +32,8 @@ import org.onosproject.cord.gui.model.XosFunctionDescriptor; | ... | @@ -32,6 +32,8 @@ import org.onosproject.cord.gui.model.XosFunctionDescriptor; |
32 | import org.slf4j.Logger; | 32 | import org.slf4j.Logger; |
33 | import org.slf4j.LoggerFactory; | 33 | import org.slf4j.LoggerFactory; |
34 | 34 | ||
35 | +import java.util.HashMap; | ||
36 | +import java.util.Iterator; | ||
35 | import java.util.List; | 37 | import java.util.List; |
36 | import java.util.Map; | 38 | import java.util.Map; |
37 | import java.util.TreeMap; | 39 | import java.util.TreeMap; |
... | @@ -44,12 +46,28 @@ import static org.onosproject.cord.gui.model.XosFunctionDescriptor.URL_FILTER; | ... | @@ -44,12 +46,28 @@ import static org.onosproject.cord.gui.model.XosFunctionDescriptor.URL_FILTER; |
44 | */ | 46 | */ |
45 | public class CordModelCache extends JsonFactory { | 47 | public class CordModelCache extends JsonFactory { |
46 | 48 | ||
49 | + private static final String KEY_SSID_MAP = "ssidmap"; | ||
50 | + // FIXME: should not be a colon in the key..... Scott to fix on XOS | ||
51 | + private static final String KEY_SSID = "service_specific_id:"; | ||
52 | + private static final String KEY_SUB_ID = "subscriber_id"; | ||
53 | + | ||
54 | + private static final int DEMO_SSID = 1234; | ||
55 | + | ||
56 | + private static final String EMAIL_0 = "john@smith.org"; | ||
57 | + private static final String EMAIL_1 = "john@doe.org"; | ||
58 | + | ||
59 | + private static final String EMAIL = "email"; | ||
60 | + private static final String SSID = "ssid"; | ||
61 | + private static final String SUB_ID = "subId"; | ||
62 | + | ||
47 | private static final String BUNDLE = "bundle"; | 63 | private static final String BUNDLE = "bundle"; |
48 | private static final String USERS = "users"; | 64 | private static final String USERS = "users"; |
49 | - private static final String SUB_ID = "subId"; | ||
50 | private static final String LEVEL = "level"; | 65 | private static final String LEVEL = "level"; |
51 | 66 | ||
67 | + private static final Map<Integer, Integer> LOOKUP = new HashMap<>(); | ||
68 | + | ||
52 | private int subscriberId; | 69 | private int subscriberId; |
70 | + private int ssid; | ||
53 | private Bundle currentBundle; | 71 | private Bundle currentBundle; |
54 | 72 | ||
55 | private final Logger log = LoggerFactory.getLogger(getClass()); | 73 | private final Logger log = LoggerFactory.getLogger(getClass()); |
... | @@ -59,18 +77,76 @@ public class CordModelCache extends JsonFactory { | ... | @@ -59,18 +77,76 @@ public class CordModelCache extends JsonFactory { |
59 | new TreeMap<Integer, SubscriberUser>(); | 77 | new TreeMap<Integer, SubscriberUser>(); |
60 | 78 | ||
61 | /** | 79 | /** |
62 | - * Constructs a model cache, (retrieving demo subscriber ID), | 80 | + * Constructs a model cache, retrieving a mapping of SSID to XOS Subscriber |
63 | - * initializing it with basic bundle, and fetching the list of users. | 81 | + * IDs from the XOS server. |
64 | */ | 82 | */ |
65 | CordModelCache() { | 83 | CordModelCache() { |
66 | log.info("Initialize model cache"); | 84 | log.info("Initialize model cache"); |
67 | - subscriberId = XosManager.INSTANCE.initXosSubscriber(); | 85 | + ObjectNode map = XosManager.INSTANCE.initXosSubscriberLookups(); |
86 | + initLookupMap(map); | ||
87 | + log.info("{} entries in SSID->SubID lookup map", LOOKUP.size()); | ||
88 | + } | ||
89 | + | ||
90 | + private void initLookupMap(ObjectNode map) { | ||
91 | + ArrayNode array = (ArrayNode) map.get(KEY_SSID_MAP); | ||
92 | + Iterator<JsonNode> iter = array.elements(); | ||
93 | + while (iter.hasNext()) { | ||
94 | + ObjectNode node = (ObjectNode) iter.next(); | ||
95 | + String ssidStr = node.get(KEY_SSID).asText(); | ||
96 | + int ssid = Integer.valueOf(ssidStr); | ||
97 | + int subId = node.get(KEY_SUB_ID).asInt(); | ||
98 | + LOOKUP.put(ssid, subId); | ||
99 | + log.info("... binding SSID {} to sub-id {}", ssid, subId); | ||
100 | + } | ||
101 | + } | ||
102 | + | ||
103 | + private int lookupSubId(int ssid) { | ||
104 | + Integer subId = LOOKUP.get(ssid); | ||
105 | + if (subId == null) { | ||
106 | + log.error("Unmapped SSID: {}", ssid); | ||
107 | + return 0; | ||
108 | + } | ||
109 | + return subId; | ||
110 | + } | ||
111 | + | ||
112 | + /** | ||
113 | + * Initializes the model for the subscriber account associated with | ||
114 | + * the given email address. | ||
115 | + * | ||
116 | + * @param email the email address | ||
117 | + */ | ||
118 | + void init(String email) { | ||
119 | + // defaults to the demo account | ||
120 | + int ssid = DEMO_SSID; | ||
121 | + | ||
122 | + // obviously not scalable, but good enough for demo code... | ||
123 | + if (EMAIL_0.equals(email)) { | ||
124 | + ssid = 0; | ||
125 | + } else if (EMAIL_1.equals(email)) { | ||
126 | + ssid = 1; | ||
127 | + } | ||
128 | + | ||
129 | + this.ssid = ssid; | ||
130 | + subscriberId = lookupSubId(ssid); | ||
131 | + XosManager.INSTANCE.setXosUtilsForSubscriber(subscriberId); | ||
132 | + | ||
133 | + // if we are using the demo account, tell XOS to reset it... | ||
134 | + if (ssid == DEMO_SSID) { | ||
135 | + XosManager.INSTANCE.initDemoSubscriber(); | ||
136 | + } | ||
137 | + | ||
138 | + // NOTE: I think the following should work for non-DEMO account... | ||
68 | currentBundle = new Bundle(BundleFactory.BASIC_BUNDLE); | 139 | currentBundle = new Bundle(BundleFactory.BASIC_BUNDLE); |
69 | initUsers(); | 140 | initUsers(); |
70 | } | 141 | } |
71 | 142 | ||
72 | private void initUsers() { | 143 | private void initUsers() { |
73 | ArrayNode users = XosManager.INSTANCE.getUserList(); | 144 | ArrayNode users = XosManager.INSTANCE.getUserList(); |
145 | + if (users == null) { | ||
146 | + log.warn("no user list for SSID {} (subid {})", ssid, subscriberId); | ||
147 | + return; | ||
148 | + } | ||
149 | + | ||
74 | for (JsonNode u: users) { | 150 | for (JsonNode u: users) { |
75 | ObjectNode user = (ObjectNode) u; | 151 | ObjectNode user = (ObjectNode) u; |
76 | 152 | ||
... | @@ -194,6 +270,25 @@ public class CordModelCache extends JsonFactory { | ... | @@ -194,6 +270,25 @@ public class CordModelCache extends JsonFactory { |
194 | 270 | ||
195 | private void addSubId(ObjectNode root) { | 271 | private void addSubId(ObjectNode root) { |
196 | root.put(SUB_ID, subscriberId); | 272 | root.put(SUB_ID, subscriberId); |
273 | + root.put(SSID, ssid); | ||
274 | + } | ||
275 | + | ||
276 | + | ||
277 | + /** | ||
278 | + * Returns response JSON for login request. | ||
279 | + * <p> | ||
280 | + * Depending on which email is used, will bind the GUI to the | ||
281 | + * appropriate XOS Subscriber ID. | ||
282 | + * | ||
283 | + * @param email the supplied email | ||
284 | + * @return JSON acknowledgement | ||
285 | + */ | ||
286 | + public String jsonLogin(String email) { | ||
287 | + init(email); | ||
288 | + ObjectNode root = objectNode(); | ||
289 | + root.put(EMAIL, email); | ||
290 | + addSubId(root); | ||
291 | + return root.toString(); | ||
197 | } | 292 | } |
198 | 293 | ||
199 | /** | 294 | /** | ... | ... |
... | @@ -54,6 +54,13 @@ public class CordWebResource { | ... | @@ -54,6 +54,13 @@ public class CordWebResource { |
54 | 54 | ||
55 | @GET | 55 | @GET |
56 | @Produces(MediaType.APPLICATION_JSON) | 56 | @Produces(MediaType.APPLICATION_JSON) |
57 | + @Path("login/{email}") | ||
58 | + public Response login(@PathParam("email") String email) { | ||
59 | + return Response.ok(CordModelCache.INSTANCE.jsonLogin(email)).build(); | ||
60 | + } | ||
61 | + | ||
62 | + @GET | ||
63 | + @Produces(MediaType.APPLICATION_JSON) | ||
57 | @Path("bundle/{id}") | 64 | @Path("bundle/{id}") |
58 | public Response bundle(@PathParam("id") String bundleId) { | 65 | public Response bundle(@PathParam("id") String bundleId) { |
59 | CordModelCache.INSTANCE.setCurrentBundle(bundleId); | 66 | CordModelCache.INSTANCE.setCurrentBundle(bundleId); | ... | ... |
... | @@ -85,35 +85,46 @@ public class XosManager { | ... | @@ -85,35 +85,46 @@ public class XosManager { |
85 | } | 85 | } |
86 | 86 | ||
87 | /** | 87 | /** |
88 | - * Queries XOS for the Demo Subscriber ID and caches it for future calls. | 88 | + * Queries XOS for the Subscriber ID lookup data, and returns it. |
89 | */ | 89 | */ |
90 | - public int initXosSubscriber() { | 90 | + public ObjectNode initXosSubscriberLookups() { |
91 | - log.info("intDemoSubscriber() called"); | 91 | + log.info("intDemoSubscriberLookups() called"); |
92 | xosServerIp = getXosServerIp(); | 92 | xosServerIp = getXosServerIp(); |
93 | xosServerPort = getXosServerPort(); | 93 | xosServerPort = getXosServerPort(); |
94 | log.info("Using XOS server at {}:{}", xosServerIp, xosServerPort); | 94 | log.info("Using XOS server at {}:{}", xosServerIp, xosServerPort); |
95 | 95 | ||
96 | xosUtilsRs = new XosManagerRestUtils(xosServerIp, xosServerPort, URI_RS); | 96 | xosUtilsRs = new XosManagerRestUtils(xosServerIp, xosServerPort, URI_RS); |
97 | 97 | ||
98 | - // ask XOS for the subscriber ID of the canned Demo account... | 98 | + // ask XOS for the subscriber ID lookup info |
99 | - String result = xosUtilsRs.getRest("initdemo/"); | 99 | + String result = xosUtilsRs.getRest("subidlookup/"); |
100 | - log.info("from XOS: {}", result); | 100 | + log.info("lookup data from XOS: {}", result); |
101 | 101 | ||
102 | JsonNode node; | 102 | JsonNode node; |
103 | try { | 103 | try { |
104 | node = MAPPER.readTree(result); | 104 | node = MAPPER.readTree(result); |
105 | } catch (IOException e) { | 105 | } catch (IOException e) { |
106 | - log.error("failed to read demo subscriber JSON", e); | 106 | + log.error("failed to read subscriber lookup JSON data", e); |
107 | - return 0; | 107 | + return null; |
108 | + } | ||
109 | + return (ObjectNode) node; | ||
108 | } | 110 | } |
109 | 111 | ||
110 | - ObjectNode obj = (ObjectNode) node; | 112 | + /** |
111 | - int demoId = obj.get("id").asInt(); | 113 | + * Sets a new XOS utils object to bind URL patterns for the |
112 | - log.info("Using DEMO subscriber ID {}.", demoId); | 114 | + * given XOS subscriber ID. |
113 | - | 115 | + * |
114 | - String uri = String.format(URI_SUBSCRIBER, demoId); | 116 | + * @param xosSubId XOS subscriber ID |
117 | + */ | ||
118 | + public void setXosUtilsForSubscriber(int xosSubId) { | ||
119 | + String uri = String.format(URI_SUBSCRIBER, xosSubId); | ||
115 | xosUtils = new XosManagerRestUtils(xosServerIp, xosServerPort, uri); | 120 | xosUtils = new XosManagerRestUtils(xosServerIp, xosServerPort, uri); |
116 | - return demoId; | 121 | + } |
122 | + | ||
123 | + | ||
124 | + public void initDemoSubscriber() { | ||
125 | + log.info("initDemoSubscriber() called"); | ||
126 | + String result = xosUtilsRs.getRest("initdemo/"); | ||
127 | + log.info("initdemo data from XOS: {}", result); | ||
117 | } | 128 | } |
118 | 129 | ||
119 | /** | 130 | /** | ... | ... |
-
Please register or login to post a comment