diff options
author | Ashlee Young <ashlee@onosfw.com> | 2015-09-09 22:15:21 -0700 |
---|---|---|
committer | Ashlee Young <ashlee@onosfw.com> | 2015-09-09 22:15:21 -0700 |
commit | 13d05bc8458758ee39cb829098241e89616717ee (patch) | |
tree | 22a4d1ce65f15952f07a3df5af4b462b4697cb3a /framework/src/onos/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/XosFunctionFactory.java | |
parent | 6139282e1e93c2322076de4b91b1c85d0bc4a8b3 (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.java | 100 |
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; + } + } +} |