summaryrefslogtreecommitdiffstats
path: root/framework/src/onos/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/XosFunctionFactory.java
diff options
context:
space:
mode:
authorAshlee Young <ashlee@onosfw.com>2015-09-09 22:15:21 -0700
committerAshlee Young <ashlee@onosfw.com>2015-09-09 22:15:21 -0700
commit13d05bc8458758ee39cb829098241e89616717ee (patch)
tree22a4d1ce65f15952f07a3df5af4b462b4697cb3a /framework/src/onos/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/XosFunctionFactory.java
parent6139282e1e93c2322076de4b91b1c85d0bc4a8b3 (diff)
ONOS checkin based on commit tag e796610b1f721d02f9b0e213cf6f7790c10ecd60
Change-Id: Ife8810491034fe7becdba75dda20de4267bd15cd
Diffstat (limited to 'framework/src/onos/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/XosFunctionFactory.java')
-rw-r--r--framework/src/onos/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/XosFunctionFactory.java100
1 files changed, 100 insertions, 0 deletions
diff --git a/framework/src/onos/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/XosFunctionFactory.java b/framework/src/onos/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/XosFunctionFactory.java
new file mode 100644
index 00000000..a91dbfbf
--- /dev/null
+++ b/framework/src/onos/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/XosFunctionFactory.java
@@ -0,0 +1,100 @@
+package org.onosproject.cord.gui.model;
+
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.onosproject.cord.gui.model.XosFunctionDescriptor.URL_FILTER;
+
+/**
+ * Utility factory for operating on XOS functions.
+ */
+public class XosFunctionFactory extends JsonFactory {
+
+ private static final String PARAMS = "params";
+ private static final String LEVEL = "level";
+ private static final String LEVELS = "levels";
+
+
+ // no instantiation
+ private XosFunctionFactory() {}
+
+ /**
+ * Produces the JSON representation of the given XOS function descriptor.
+ *
+ * @param xfd function descriptor
+ * @return JSON encoding
+ */
+ public static ObjectNode toObjectNode(XosFunctionDescriptor xfd) {
+ ObjectNode root = objectNode()
+ .put(ID, xfd.id())
+ .put(NAME, xfd.displayName())
+ .put(DESC, xfd.description());
+ root.set(PARAMS, paramsForXfd(xfd));
+ return root;
+ }
+
+ private static ObjectNode paramsForXfd(XosFunctionDescriptor xfd) {
+ ParamsFactory psf = PARAM_MAP.get(xfd);
+ if (psf == null) {
+ psf = DEF_PARAMS_FACTORY;
+ }
+ return psf.params();
+ }
+
+
+ // ==== handling different parameter structures...
+ private static final Map<XosFunctionDescriptor, ParamsFactory>
+ PARAM_MAP = new HashMap<XosFunctionDescriptor, ParamsFactory>();
+
+ private static final ParamsFactory DEF_PARAMS_FACTORY = new ParamsFactory();
+ static {
+ PARAM_MAP.put(URL_FILTER, new UrlFilterParamsFactory());
+ }
+
+ /**
+ * Creates an object node representation of the profile for the
+ * specified user.
+ *
+ * @param user the user
+ * @return object node profile
+ */
+ public static ObjectNode profileForUser(SubscriberUser user) {
+ ObjectNode root = objectNode();
+ for (XosFunctionDescriptor xfd: XosFunctionDescriptor.values()) {
+ XosFunction.Memento mem = user.getMemento(xfd);
+ if (mem != null) {
+ root.set(xfd.id(), mem.toObjectNode());
+ }
+ }
+ return root;
+ }
+
+
+ // ===================================================================
+ // === factories for creating parameter structures, both default
+ // and from a memento...
+
+ // private parameter structure creator
+ static class ParamsFactory {
+ ObjectNode params() {
+ return objectNode();
+ }
+ }
+
+ static class UrlFilterParamsFactory extends ParamsFactory {
+ @Override
+ ObjectNode params() {
+ ObjectNode result = objectNode();
+ result.put(LEVEL, UrlFilterFunction.DEFAULT_LEVEL.name());
+ ArrayNode levels = arrayNode();
+ for (UrlFilterFunction.Level lvl: UrlFilterFunction.Level.values()) {
+ levels.add(lvl.name());
+ }
+ result.set(LEVELS, levels);
+ return result;
+ }
+ }
+}