Initial push of Neutron interface
[controller.git] / opendaylight / networkconfiguration / neutron / implementation / src / main / java / org / opendaylight / controller / networkconfig / neutron / implementation / Activator.java
diff --git a/opendaylight/networkconfiguration/neutron/implementation/src/main/java/org/opendaylight/controller/networkconfig/neutron/implementation/Activator.java b/opendaylight/networkconfiguration/neutron/implementation/src/main/java/org/opendaylight/controller/networkconfig/neutron/implementation/Activator.java
new file mode 100644 (file)
index 0000000..d8d5cc4
--- /dev/null
@@ -0,0 +1,141 @@
+/*\r
+ * Copyright IBM Corporation, 2013.  All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.controller.networkconfig.neutron.implementation;\r
+\r
+import java.util.Hashtable;\r
+import java.util.Dictionary;\r
+import org.apache.felix.dm.Component;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+\r
+import org.opendaylight.controller.clustering.services.IClusterContainerServices;\r
+import org.opendaylight.controller.networkconfig.neutron.INeutronFloatingIPCRUD;\r
+import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkCRUD;\r
+import org.opendaylight.controller.networkconfig.neutron.INeutronPortCRUD;\r
+import org.opendaylight.controller.networkconfig.neutron.INeutronRouterCRUD;\r
+import org.opendaylight.controller.networkconfig.neutron.INeutronSubnetCRUD;\r
+import org.opendaylight.controller.networkconfig.neutron.implementation.NeutronFloatingIPInterface;\r
+import org.opendaylight.controller.networkconfig.neutron.implementation.NeutronNetworkInterface;\r
+import org.opendaylight.controller.networkconfig.neutron.implementation.NeutronPortInterface;\r
+import org.opendaylight.controller.networkconfig.neutron.implementation.NeutronRouterInterface;\r
+import org.opendaylight.controller.networkconfig.neutron.implementation.NeutronSubnetInterface;\r
+import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase;\r
+\r
+public class Activator extends ComponentActivatorAbstractBase {\r
+    protected static final Logger logger = LoggerFactory\r
+    .getLogger(Activator.class);\r
+\r
+    /**\r
+     * Function called when the activator starts just after some\r
+     * initializations are done by the\r
+     * ComponentActivatorAbstractBase.\r
+     *\r
+     */\r
+    public void init() {\r
+\r
+    }\r
+\r
+    /**\r
+     * Function called when the activator stops just before the\r
+     * cleanup done by ComponentActivatorAbstractBase\r
+     *\r
+     */\r
+    public void destroy() {\r
+\r
+    }\r
+\r
+    /**\r
+     * Function that is used to communicate to dependency manager the\r
+     * list of known implementations for services inside a container\r
+     *\r
+     *\r
+     * @return An array containing all the CLASS objects that will be\r
+     * instantiated in order to get an fully working implementation\r
+     * Object\r
+     */\r
+    public Object[] getImplementations() {\r
+        Object[] res = { NeutronFloatingIPInterface.class,\r
+                NeutronRouterInterface.class,\r
+                NeutronPortInterface.class,\r
+                NeutronSubnetInterface.class,\r
+                NeutronNetworkInterface.class };\r
+        return res;\r
+    }\r
+\r
+    /**\r
+     * Function that is called when configuration of the dependencies\r
+     * is required.\r
+     *\r
+     * @param c dependency manager Component object, used for\r
+     * configuring the dependencies exported and imported\r
+     * @param imp Implementation class that is being configured,\r
+     * needed as long as the same routine can configure multiple\r
+     * implementations\r
+     * @param containerName The containerName being configured, this allow\r
+     * also optional per-container different behavior if needed, usually\r
+     * should not be the case though.\r
+     */\r
+    public void configureInstance(Component c, Object imp, String containerName) {\r
+        if (imp.equals(NeutronFloatingIPInterface.class)) {\r
+            // export the service\r
+            c.setInterface(\r
+                    new String[] { INeutronFloatingIPCRUD.class.getName() }, null);\r
+            Dictionary<String, String> props = new Hashtable<String, String>();\r
+            props.put("salListenerName", "neutron");\r
+            c.add(createContainerServiceDependency(containerName)\r
+                    .setService(IClusterContainerServices.class)\r
+                    .setCallbacks("setClusterContainerService",\r
+                    "unsetClusterContainerService").setRequired(true));\r
+        }\r
+        if (imp.equals(NeutronRouterInterface.class)) {\r
+            // export the service\r
+            c.setInterface(\r
+                    new String[] { INeutronRouterCRUD.class.getName() }, null);\r
+            Dictionary<String, String> props = new Hashtable<String, String>();\r
+            props.put("salListenerName", "neutron");\r
+            c.add(createContainerServiceDependency(containerName)\r
+                    .setService(IClusterContainerServices.class)\r
+                    .setCallbacks("setClusterContainerService",\r
+                    "unsetClusterContainerService").setRequired(true));\r
+        }\r
+        if (imp.equals(NeutronPortInterface.class)) {\r
+            // export the service\r
+            c.setInterface(\r
+                    new String[] { INeutronPortCRUD.class.getName() }, null);\r
+            Dictionary<String, String> props = new Hashtable<String, String>();\r
+            props.put("salListenerName", "neutron");\r
+            c.add(createContainerServiceDependency(containerName)\r
+                    .setService(IClusterContainerServices.class)\r
+                    .setCallbacks("setClusterContainerService",\r
+                    "unsetClusterContainerService").setRequired(true));\r
+        }\r
+        if (imp.equals(NeutronSubnetInterface.class)) {\r
+            // export the service\r
+            c.setInterface(\r
+                    new String[] { INeutronSubnetCRUD.class.getName() }, null);\r
+            Dictionary<String, String> props = new Hashtable<String, String>();\r
+            props.put("salListenerName", "neutron");\r
+            c.add(createContainerServiceDependency(containerName)\r
+                    .setService(IClusterContainerServices.class)\r
+                    .setCallbacks("setClusterContainerService",\r
+                    "unsetClusterContainerService").setRequired(true));\r
+        }\r
+        if (imp.equals(NeutronNetworkInterface.class)) {\r
+            // export the service\r
+            c.setInterface(\r
+                    new String[] { INeutronNetworkCRUD.class.getName() }, null);\r
+            Dictionary<String, String> props = new Hashtable<String, String>();\r
+            props.put("salListenerName", "neutron");\r
+            c.add(createContainerServiceDependency(containerName)\r
+                    .setService(IClusterContainerServices.class)\r
+                    .setCallbacks("setClusterContainerService",\r
+                    "unsetClusterContainerService").setRequired(true));\r
+        }\r
+    }\r
+}\r