diff options
Diffstat (limited to 'framework/src/onos/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/BundleFactory.java')
-rw-r--r-- | framework/src/onos/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/BundleFactory.java | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/framework/src/onos/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/BundleFactory.java b/framework/src/onos/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/BundleFactory.java new file mode 100644 index 00000000..813ad98b --- /dev/null +++ b/framework/src/onos/apps/demo/cord-gui/src/main/java/org/onosproject/cord/gui/model/BundleFactory.java @@ -0,0 +1,144 @@ +/* + * Copyright 2015 Open Networking Laboratory + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.onosproject.cord.gui.model; + +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.google.common.collect.ImmutableList; + +import java.util.List; + +/** + * Utility factory for creating and/or operating on bundles. + */ +public class BundleFactory extends JsonFactory { + + private static final String BUNDLE = "bundle"; + private static final String BUNDLES = "bundles"; + private static final String FUNCTIONS = "functions"; + + private static final String BASIC_ID = "basic"; + private static final String BASIC_DISPLAY_NAME = "Basic Bundle"; + private static final String BASIC_DESCRIPTION = + "If the thing that matters most to you is high speed Internet" + + " connectivity delivered at a great price, then the basic" + + " bundle is right for you.\n" + + "Starting at $30 a month for 12 months."; + + private static final String FAMILY_ID = "family"; + private static final String FAMILY_DISPLAY_NAME = "Family Bundle"; + private static final String FAMILY_DESCRIPTION = + "Enjoy great entertainment, peace of mind and big savings when " + + "you bundle high speed Internet and Firewall with" + + " Parental Control.\n" + + "Starting at $40 a month for 12 months."; + + + // no instantiation + private BundleFactory() {} + + /** + * Designates the BASIC bundle. + */ + public static final BundleDescriptor BASIC_BUNDLE = + new DefaultBundleDescriptor(BASIC_ID, BASIC_DISPLAY_NAME, + BASIC_DESCRIPTION, + XosFunctionDescriptor.INTERNET, + XosFunctionDescriptor.FIREWALL, + XosFunctionDescriptor.CDN); + + /** + * Designates the FAMILY bundle. + */ + public static final BundleDescriptor FAMILY_BUNDLE = + new DefaultBundleDescriptor(FAMILY_ID, FAMILY_DISPLAY_NAME, + FAMILY_DESCRIPTION, + XosFunctionDescriptor.INTERNET, + XosFunctionDescriptor.FIREWALL, + XosFunctionDescriptor.CDN, + XosFunctionDescriptor.URL_FILTER); + + // all bundles, in the order they should be listed in the GUI + private static final List<BundleDescriptor> ALL_BUNDLES = ImmutableList.of( + BASIC_BUNDLE, + FAMILY_BUNDLE + ); + + /** + * Returns the list of available bundles. + * + * @return available bundles + */ + public static List<BundleDescriptor> availableBundles() { + return ALL_BUNDLES; + } + + /** + * Returns the bundle descriptor for the given identifier. + * + * @param bundleId bundle identifier + * @return bundle descriptor + * @throws IllegalArgumentException if bundle ID is unknown + */ + public static BundleDescriptor bundleFromId(String bundleId) { + for (BundleDescriptor bd : ALL_BUNDLES) { + if (bd.id().equals(bundleId)) { + return bd; + } + } + throw new IllegalArgumentException("unknown bundle: " + bundleId); + } + + /** + * Returns an object node representation of the given bundle. + * Note that some functions (such as CDN) are not added to the output + * as we don't want them to appear in the GUI. + * + * @param bundle the bundle + * @return object node + */ + public static ObjectNode toObjectNode(Bundle bundle) { + ObjectNode root = objectNode(); + BundleDescriptor descriptor = bundle.descriptor(); + + ObjectNode bnode = objectNode() + .put(ID, descriptor.id()) + .put(NAME, descriptor.displayName()) + .put(DESC, descriptor.description()); + + ArrayNode funcs = arrayNode(); + for (XosFunctionDescriptor xfd: bundle.descriptor().functions()) { + if (xfd.visible()) { + funcs.add(XosFunctionFactory.toObjectNode(xfd)); + } + } + bnode.set(FUNCTIONS, funcs); + root.set(BUNDLE, bnode); + + ArrayNode bundles = arrayNode(); + for (BundleDescriptor bd: BundleFactory.availableBundles()) { + ObjectNode bdnode = objectNode() + .put(ID, bd.id()) + .put(NAME, bd.displayName()) + .put(DESC, bd.description()); + bundles.add(bdnode); + } + root.set(BUNDLES, bundles); + return root; + } +} |