CORD Subscriber GUI - XosFunction mementos now stored inside each SubscriberUser to capture the parameter state per user.

Change-Id: I678249f63a68172db66a5d3faa0b1747c670bf6e
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 e47e68f..c71477f 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
@@ -26,6 +26,9 @@
 import org.onosproject.cord.gui.model.JsonFactory;
 import org.onosproject.cord.gui.model.SubscriberUser;
 import org.onosproject.cord.gui.model.UserFactory;
+import org.onosproject.cord.gui.model.XosFunction;
+import org.onosproject.cord.gui.model.XosFunctionDescriptor;
+import org.onosproject.cord.gui.model.XosFunctionFactory;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -62,12 +65,21 @@
      * Used to initialize users for the demo. These are currently fake.
      */
     public void initUsers() {
-        users.add(new SubscriberUser(1, "Mom's MacBook", MAC_1));
-        users.add(new SubscriberUser(2, "Dad's iPad", MAC_2));
-        users.add(new SubscriberUser(3, "Dick's laptop", MAC_3));
-        users.add(new SubscriberUser(4, "Jane's laptop", MAC_4));
+        users.add(createUser(1, "Mom's MacBook", MAC_1));
+        users.add(createUser(2, "Dad's iPad", MAC_2));
+        users.add(createUser(3, "Dick's laptop", MAC_3));
+        users.add(createUser(4, "Jane's laptop", MAC_4));
     }
 
+    private SubscriberUser createUser(int uid, String name, String mac) {
+        SubscriberUser user = new SubscriberUser(uid, name, mac);
+        for (XosFunction f: currentBundle.functions()) {
+            user.setMemento(f.descriptor(), f.createMemento());
+        }
+        return user;
+    }
+
+
     /**
      * Returns the currently selected bundle.
      *
@@ -84,10 +96,20 @@
      * @throws IllegalArgumentException if bundle ID is unknown
      */
     public void setCurrentBundle(String bundleId) {
-        BundleDescriptor bdesc = BundleFactory.bundleFromId(bundleId);
-        currentBundle = new Bundle(bdesc);
+        BundleDescriptor bd = BundleFactory.bundleFromId(bundleId);
+        currentBundle = new Bundle(bd);
+        // update the user mementos
+        for (SubscriberUser user: users) {
+            user.clearMementos();
+            for (XosFunction f: currentBundle.functions()) {
+                user.setMemento(f.descriptor(), f.createMemento());
+            }
+        }
+
+        // TODO: tell XOS which functions are enabled / disabled
     }
 
+
     /**
      * Returns the list of current users for this subscriber account.
      *
@@ -97,6 +119,25 @@
         return ImmutableList.copyOf(users);
     }
 
+    /**
+     * Applies a function parameter change for a user.
+     *
+     * @param userId user identifier
+     * @param funcId function identifier
+     * @param param function parameter to change
+     * @param value new value for function parameter
+     */
+    public void applyPerUserParam(String userId, String funcId,
+                                  String param, String value) {
+        // FIXME: this is not right yet...
+        int uid = Integer.parseInt(userId);
+        XosFunctionDescriptor xfd =
+                XosFunctionDescriptor.valueOf(funcId.toUpperCase());
+        XosFunctionFactory.apply(xfd, uid, param, value);
+    }
+
+    // =============
+
     private ArrayNode userJsonArray() {
         ArrayNode userList = arrayNode();
         for (SubscriberUser user: users) {