blob: a91dbfbf49946d5c094a48ff495faab1b37b54a0 [file] [log] [blame]
Simon Hunt41b943e2015-05-21 13:52:01 -07001package org.onosproject.cord.gui.model;
2
Simon Hunt41b943e2015-05-21 13:52:01 -07003import com.fasterxml.jackson.databind.node.ArrayNode;
4import com.fasterxml.jackson.databind.node.ObjectNode;
5
6import java.util.HashMap;
7import java.util.Map;
8
Simon Hunt6c2555b2015-05-21 18:17:56 -07009import static org.onosproject.cord.gui.model.XosFunctionDescriptor.URL_FILTER;
10
Simon Hunt41b943e2015-05-21 13:52:01 -070011/**
12 * Utility factory for operating on XOS functions.
13 */
14public class XosFunctionFactory extends JsonFactory {
15
Simon Hunt41b943e2015-05-21 13:52:01 -070016 private static final String PARAMS = "params";
Simon Hunt41b943e2015-05-21 13:52:01 -070017 private static final String LEVEL = "level";
18 private static final String LEVELS = "levels";
19
Simon Hunt41b943e2015-05-21 13:52:01 -070020
21 // no instantiation
22 private XosFunctionFactory() {}
23
24 /**
25 * Produces the JSON representation of the given XOS function descriptor.
26 *
27 * @param xfd function descriptor
28 * @return JSON encoding
29 */
30 public static ObjectNode toObjectNode(XosFunctionDescriptor xfd) {
31 ObjectNode root = objectNode()
32 .put(ID, xfd.id())
33 .put(NAME, xfd.displayName())
34 .put(DESC, xfd.description());
35 root.set(PARAMS, paramsForXfd(xfd));
36 return root;
37 }
38
Simon Hunt6c2555b2015-05-21 18:17:56 -070039 private static ObjectNode paramsForXfd(XosFunctionDescriptor xfd) {
40 ParamsFactory psf = PARAM_MAP.get(xfd);
Simon Hunt41b943e2015-05-21 13:52:01 -070041 if (psf == null) {
Simon Hunt6c2555b2015-05-21 18:17:56 -070042 psf = DEF_PARAMS_FACTORY;
Simon Hunt41b943e2015-05-21 13:52:01 -070043 }
44 return psf.params();
45 }
46
Simon Hunt41b943e2015-05-21 13:52:01 -070047
Simon Hunt6c2555b2015-05-21 18:17:56 -070048 // ==== handling different parameter structures...
49 private static final Map<XosFunctionDescriptor, ParamsFactory>
50 PARAM_MAP = new HashMap<XosFunctionDescriptor, ParamsFactory>();
51
52 private static final ParamsFactory DEF_PARAMS_FACTORY = new ParamsFactory();
Simon Hunt41b943e2015-05-21 13:52:01 -070053 static {
Simon Hunt6c2555b2015-05-21 18:17:56 -070054 PARAM_MAP.put(URL_FILTER, new UrlFilterParamsFactory());
Simon Hunt41b943e2015-05-21 13:52:01 -070055 }
56
Simon Hunt6c2555b2015-05-21 18:17:56 -070057 /**
Simon Hunt6c2555b2015-05-21 18:17:56 -070058 * Creates an object node representation of the profile for the
59 * specified user.
60 *
61 * @param user the user
62 * @return object node profile
63 */
64 public static ObjectNode profileForUser(SubscriberUser user) {
65 ObjectNode root = objectNode();
66 for (XosFunctionDescriptor xfd: XosFunctionDescriptor.values()) {
67 XosFunction.Memento mem = user.getMemento(xfd);
68 if (mem != null) {
69 root.set(xfd.id(), mem.toObjectNode());
70 }
71 }
72 return root;
73 }
74
75
76 // ===================================================================
77 // === factories for creating parameter structures, both default
78 // and from a memento...
79
Simon Hunt41b943e2015-05-21 13:52:01 -070080 // private parameter structure creator
Simon Hunt6c2555b2015-05-21 18:17:56 -070081 static class ParamsFactory {
Simon Hunt41b943e2015-05-21 13:52:01 -070082 ObjectNode params() {
83 return objectNode();
84 }
85 }
86
Simon Hunt6c2555b2015-05-21 18:17:56 -070087 static class UrlFilterParamsFactory extends ParamsFactory {
Simon Hunt41b943e2015-05-21 13:52:01 -070088 @Override
89 ObjectNode params() {
90 ObjectNode result = objectNode();
Simon Huntab5232e2015-05-26 16:59:46 -070091 result.put(LEVEL, UrlFilterFunction.DEFAULT_LEVEL.name());
Simon Hunt41b943e2015-05-21 13:52:01 -070092 ArrayNode levels = arrayNode();
Simon Hunt6c2555b2015-05-21 18:17:56 -070093 for (UrlFilterFunction.Level lvl: UrlFilterFunction.Level.values()) {
94 levels.add(lvl.name());
Simon Hunt41b943e2015-05-21 13:52:01 -070095 }
96 result.set(LEVELS, levels);
97 return result;
98 }
99 }
100}