--- /dev/null
+/*\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