Remove ComponentActivatorAbstractBase from net-virt 05/15105/1
authorFlavio Fernandes <ffernand@redhat.com>
Tue, 10 Feb 2015 10:06:31 +0000 (05:06 -0500)
committerFlavio Fernandes <ffernand@redhat.com>
Tue, 10 Feb 2015 11:19:56 +0000 (06:19 -0500)
Change-Id: Ie173040211627cfa2c467247fd164aa0965f539a
Signed-off-by: Flavio Fernandes <ffernand@redhat.com>
Ref: https://git.opendaylight.org/gerrit/#/c/15034/

openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/Activator.java
openstack/net-virt/pom.xml
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/Activator.java

index d4ce3449b4ad247ccf1d4cf7354d4ae4e87e79b3..73cc7c1943fa2e8527208ab3912de2e38acc9cf7 100644 (file)
 
 package org.opendaylight.ovsdb.openstack.netvirt.providers;
 
-import java.util.Properties;
-
-import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyActivatorBase;
+import org.apache.felix.dm.DependencyManager;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase;
 import org.opendaylight.ovsdb.openstack.netvirt.api.ArpProvider;
 import org.opendaylight.ovsdb.openstack.netvirt.api.BridgeConfigurationManager;
 import org.opendaylight.ovsdb.openstack.netvirt.api.ClassifierProvider;
@@ -52,205 +50,196 @@ import org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13.services.Ro
 import org.opendaylight.ovsdb.plugin.api.OvsdbConfigurationService;
 import org.opendaylight.ovsdb.plugin.api.OvsdbConnectionService;
 
+import org.osgi.framework.BundleContext;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+
 /**
  * OSGi Bundle Activator for the Neutron providers
  */
-public class Activator extends ComponentActivatorAbstractBase {
-    /**
-     * Function called when the activator starts just after some
-     * initializations are done by the
-     * ComponentActivatorAbstractBase.
-     */
-    @Override
-    public void init() {
-    }
-
-    /**
-     * Function called when the activator stops just before the
-     * cleanup done by ComponentActivatorAbstractBase.
-     *
-     */
-    @Override
-    public void destroy() {
-    }
+public class Activator extends DependencyActivatorBase {
 
-    /**
-     * Function that is used to communicate to dependency manager the
-     * list of known implementations for services inside a container.
-     *
-     * @return An array containing all the CLASS objects that will be
-     * instantiated in order to get an fully working implementation
-     * Object
-     */
     @Override
-    public Object[] getImplementations() {
-        Object[] res = {MdsalConsumerImpl.class,
-                        OF13Provider.class,
-                        PipelineOrchestratorImpl.class,
-                        ClassifierService.class,
-                        ArpResponderService.class,
-                        InboundNatService.class,
-                        IngressAclService.class,
-                        LoadBalancerService.class,
-                        RoutingService.class,
-                        L3ForwardingService.class,
-                        L2RewriteService.class,
-                        L2ForwardingService.class,
-                        EgressAclService.class,
-                        OutboundNatService.class};
-        return res;
+    public void init(BundleContext context, DependencyManager manager) throws Exception {
+
+        manager.add(createComponent()
+                .setInterface(MdsalConsumer.class.getName(), null)
+                .setImplementation(MdsalConsumerImpl.class)
+                .add(createServiceDependency().setService(BindingAwareBroker.class).setRequired(true)));
+
+        Dictionary<String, Object> props1 = new Hashtable<>();
+        props1.put(Constants.SOUTHBOUND_PROTOCOL_PROPERTY, "ovsdb");
+        props1.put(Constants.OPENFLOW_VERSION_PROPERTY, Constants.OPENFLOW13);
+
+        manager.add(createComponent()
+                .setInterface(NetworkingProvider.class.getName(), props1)
+                .setImplementation(OF13Provider.class)
+                .add(createServiceDependency().setService(ConfigurationService.class).setRequired(true))
+                .add(createServiceDependency().setService(BridgeConfigurationManager.class).setRequired(true))
+                .add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true))
+                .add(createServiceDependency().setService(SecurityServicesManager.class).setRequired(true))
+                .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
+                .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
+                .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true))
+                .add(createServiceDependency().setService(ClassifierProvider.class).setRequired(true))
+                .add(createServiceDependency().setService(IngressAclProvider.class).setRequired(true))
+                .add(createServiceDependency().setService(EgressAclProvider.class).setRequired(true))
+                .add(createServiceDependency().setService(L2ForwardingProvider.class).setRequired(true)));
+
+        manager.add(createComponent()
+                .setInterface(PipelineOrchestrator.class.getName(), null)
+                .setImplementation(PipelineOrchestratorImpl.class)
+                .add(createServiceDependency().setService(AbstractServiceInstance.class)
+                        .setCallbacks("registerService", "unregisterService"))
+                .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
+
+        Dictionary<String, Object> props2 = new Hashtable<>();
+        props2.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.CLASSIFIER);
+        props2.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
+
+        manager.add(createComponent()
+                .setInterface(new String[]{AbstractServiceInstance.class.getName(), ClassifierProvider.class.getName()},
+                        props2)
+                .setImplementation(ClassifierService.class)
+                .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
+                .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
+                .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
+                .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
+
+        Dictionary<String, Object> props3 = new Hashtable<>();
+        props3.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.ARP_RESPONDER);
+        props3.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
+
+        manager.add(createComponent()
+                .setInterface(new String[]{AbstractServiceInstance.class.getName(), ArpProvider.class.getName()},
+                        props3)
+                .setImplementation(ArpResponderService.class)
+                .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
+                .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
+                .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
+                .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
+
+        Dictionary<String, Object> props4 = new Hashtable<>();
+        props4.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.INBOUND_NAT);
+        props4.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
+
+        manager.add(createComponent()
+                .setInterface(new String[]{AbstractServiceInstance.class.getName(),
+                        InboundNatProvider.class.getName()}, props4)
+                .setImplementation(InboundNatService.class)
+                .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
+                .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
+                .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
+                .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
+
+        Dictionary<String, Object> props5 = new Hashtable<>();
+        props5.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.INGRESS_ACL);
+        props5.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
+
+        manager.add(createComponent()
+                .setInterface(new String[]{AbstractServiceInstance.class.getName(), IngressAclProvider.class.getName()},
+                        props5)
+                .setImplementation(IngressAclService.class)
+                .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
+                .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
+                .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
+                .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
+
+        Dictionary<String, Object> props6 = new Hashtable<>();
+        props6.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.LOAD_BALANCER);
+        props6.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
+
+        manager.add(createComponent()
+                .setInterface(new String[] {AbstractServiceInstance.class.getName(),
+                                LoadBalancerProvider.class.getName()}, props6)
+                .setImplementation(LoadBalancerService.class)
+                .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
+                .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
+                .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
+                .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
+
+        Dictionary<String, Object> props7 = new Hashtable<>();
+        props7.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.ROUTING);
+        props7.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
+
+        manager.add(createComponent()
+                .setInterface(new String[] {AbstractServiceInstance.class.getName(), RoutingProvider.class.getName()},
+                        props7)
+                .setImplementation(RoutingService.class)
+                .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
+                .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
+                .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
+                .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
+
+        Dictionary<String, Object> props8 = new Hashtable<>();
+        props8.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.L3_FORWARDING);
+        props8.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
+
+        manager.add(createComponent()
+                .setInterface(new String[] {AbstractServiceInstance.class.getName(),
+                                L3ForwardingProvider.class.getName()}, props8)
+                .setImplementation(L3ForwardingService.class)
+                .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
+                .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
+                .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
+                .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
+
+        Dictionary<String, Object> props9 = new Hashtable<>();
+        props9.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.L2_REWRITE);
+        props9.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
+
+        manager.add(createComponent()
+                .setInterface(AbstractServiceInstance.class.getName(), props9)
+                .setImplementation(L2RewriteService.class)
+                .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
+                .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
+                .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
+                .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
+
+        Dictionary<String, Object> props10 = new Hashtable<>();
+        props10.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.L2_FORWARDING);
+        props10.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
+
+        manager.add(createComponent()
+                .setInterface(new String[] {AbstractServiceInstance.class.getName(),
+                                L2ForwardingProvider.class.getName()},
+                        props10)
+                .setImplementation(L2ForwardingService.class)
+                .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
+                .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
+                .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
+                .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
+
+        Dictionary<String, Object> props11 = new Hashtable<>();
+        props11.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.EGRESS_ACL);
+        props11.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
+
+        manager.add(createComponent()
+                .setInterface(new String[]{AbstractServiceInstance.class.getName(), EgressAclProvider.class.getName()},
+                        props11)
+                .setImplementation(EgressAclService.class)
+                .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
+                .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
+                .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
+                .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
+
+        Dictionary<String, Object> props12 = new Hashtable<>();
+        props12.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.OUTBOUND_NAT);
+        props12.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
+
+        manager.add(createComponent()
+                .setInterface(new String[]{AbstractServiceInstance.class.getName(),
+                                OutboundNatProvider.class.getName()},
+                        props12)
+                .setImplementation(OutboundNatService.class)
+                .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
+                .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
+                .add(createServiceDependency().setService(PipelineOrchestrator.class).setRequired(true))
+                .add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true)));
     }
 
-    /**
-     * Function that is called when configuration of the dependencies
-     * is required.
-     *
-     * @param c dependency manager Component object, used for
-     * configuring the dependencies exported and imported
-     * @param imp Implementation class that is being configured,
-     * needed as long as the same routine can configure multiple
-     * implementations
-     * @param containerName The containerName being configured, this allow
-     * also optional per-container different behavior if needed, usually
-     * should not be the case though.
-     */
     @Override
-    public void configureInstance(Component c, Object imp,
-                                  String containerName) {
-
-        if (imp.equals(MdsalConsumerImpl.class)) {
-            c.setInterface(MdsalConsumer.class.getName(), null);
-            c.add(createServiceDependency().setService(BindingAwareBroker.class).setRequired(true));
-        }
-        if (imp.equals(OF13Provider.class)) {
-            Properties of13Properties = new Properties();
-            of13Properties.put(Constants.SOUTHBOUND_PROTOCOL_PROPERTY, "ovsdb");
-            of13Properties.put(Constants.OPENFLOW_VERSION_PROPERTY, Constants.OPENFLOW13);
-
-            c.setInterface(NetworkingProvider.class.getName(), of13Properties);
-            c.add(createServiceDependency()
-                          .setService(ConfigurationService.class)
-                          .setRequired(true));
-            c.add(createServiceDependency()
-                          .setService(BridgeConfigurationManager.class)
-                          .setRequired(true));
-            c.add(createServiceDependency()
-                          .setService(TenantNetworkManager.class)
-                          .setRequired(true));
-            c.add(createServiceDependency()
-                    .setService(SecurityServicesManager.class)
-                    .setRequired(true));
-            c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
-            c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
-            c.add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true));
-            c.add(createServiceDependency().setService(ClassifierProvider.class).setRequired(true));
-            c.add(createServiceDependency().setService(IngressAclProvider.class).setRequired(true));
-            c.add(createServiceDependency().setService(EgressAclProvider.class).setRequired(true));
-            c.add(createServiceDependency().setService(L2ForwardingProvider.class).setRequired(true));
-        }
-
-        if (imp.equals(PipelineOrchestratorImpl.class)) {
-            c.setInterface(PipelineOrchestrator.class.getName(), null);
-            c.add(createServiceDependency()
-                           .setService(AbstractServiceInstance.class)
-                           .setCallbacks("registerService", "unregisterService"));
-            c.add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true));
-        }
-
-        if (AbstractServiceInstance.class.isAssignableFrom((Class) imp)) {
-            c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
-            c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
-            c.add(createServiceDependency()
-                          .setService(PipelineOrchestrator.class)
-                          .setRequired(true));
-            c.add(createServiceDependency().setService(MdsalConsumer.class).setRequired(true));
-        }
-
-        if (imp.equals(ClassifierService.class)) {
-            Properties properties = new Properties();
-            properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.CLASSIFIER);
-            properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
-            c.setInterface(new String[] {AbstractServiceInstance.class.getName(), ClassifierProvider.class.getName()},
-                           properties);
-        }
-
-        if (imp.equals(ArpResponderService.class)) {
-            Properties properties = new Properties();
-            properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.ARP_RESPONDER);
-            properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
-            c.setInterface(new String[] {AbstractServiceInstance.class.getName(), ArpProvider.class.getName()},
-                           properties);
-        }
-
-        if (imp.equals(InboundNatService.class)) {
-            Properties properties = new Properties();
-            properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.INBOUND_NAT);
-            properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
-            c.setInterface(new String[] {AbstractServiceInstance.class.getName(), InboundNatProvider.class.getName()},
-                           properties);
-        }
-
-        if (imp.equals(IngressAclService.class)) {
-            Properties properties = new Properties();
-            properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.INGRESS_ACL);
-            properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
-            c.setInterface(new String[]{AbstractServiceInstance.class.getName(),
-                                        IngressAclProvider.class.getName()}, properties);
-        }
-
-        if (imp.equals(LoadBalancerService.class)) {
-            Properties properties = new Properties();
-            properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.LOAD_BALANCER);
-            properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
-            c.setInterface(new String[] {AbstractServiceInstance.class.getName(), LoadBalancerProvider.class.getName()},
-                           properties);
-        }
-
-        if (imp.equals(RoutingService.class)) {
-            Properties properties = new Properties();
-            properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.ROUTING);
-            properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
-            c.setInterface(new String[] {AbstractServiceInstance.class.getName(), RoutingProvider.class.getName()},
-                           properties);
-        }
-
-        if (imp.equals(L3ForwardingService.class)) {
-            Properties properties = new Properties();
-            properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.L3_FORWARDING);
-            properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
-            c.setInterface(new String[] {AbstractServiceInstance.class.getName(), L3ForwardingProvider.class.getName()},
-                           properties);
-        }
-
-        if (imp.equals(L2RewriteService.class)) {
-            Properties properties = new Properties();
-            properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.L2_REWRITE);
-            properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
-            c.setInterface(AbstractServiceInstance.class.getName(), properties);
-        }
-
-        if (imp.equals(L2ForwardingService.class)) {
-            Properties properties = new Properties();
-            properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.L2_FORWARDING);
-            properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
-            c.setInterface(new String[] {AbstractServiceInstance.class.getName(), L2ForwardingProvider.class.getName()},
-                           properties);
-        }
-
-        if (imp.equals(EgressAclService.class)) {
-            Properties properties = new Properties();
-            properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.EGRESS_ACL);
-            properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
-            c.setInterface(new String[]{AbstractServiceInstance.class.getName(),
-                                        EgressAclProvider.class.getName()}, properties);
-        }
-
-        if (imp.equals(OutboundNatService.class)) {
-            Properties properties = new Properties();
-            properties.put(AbstractServiceInstance.SERVICE_PROPERTY, Service.OUTBOUND_NAT);
-            properties.put(Constants.PROVIDER_NAME_PROPERTY, OF13Provider.NAME);
-            c.setInterface(new String[] {AbstractServiceInstance.class.getName(), OutboundNatProvider.class.getName()},
-                           properties);
-        }
+    public void destroy(BundleContext context, DependencyManager manager) throws Exception {
     }
 }
index 7fe2c74ef4c5469483fbaaa63338da1317cc4df1..67320d441936789a578c2eb154558d56cc16137e 100644 (file)
         <extensions>true</extensions>
         <configuration>
           <instructions>
-            <Import-Package>
-              org.opendaylight.controller.networkconfig.neutron,
-              org.opendaylight.controller.switchmanager,
-              org.opendaylight.controller.sal.core,
-              org.opendaylight.controller.sal.utils,
-              org.opendaylight.ovsdb.plugin.api,
-              org.opendaylight.ovsdb.lib.notation,
-              org.apache.felix.dm,
-              org.slf4j,
-              org.osgi.framework,
-              *</Import-Package>
             <Embed-Dependency>utils.config;type=!pom;inline=false</Embed-Dependency>
             <Embed-Transitive>true</Embed-Transitive>
             <Export-Package>
index 7d9ec812bf1a33d2b5973a947a060742788e1e77..9634fee89e186b936ba3bbfe8364e13ad2f06281 100644 (file)
 
 package org.opendaylight.ovsdb.openstack.netvirt;
 
-import java.util.Properties;
+import java.util.Dictionary;
+import java.util.Hashtable;
 
-import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyActivatorBase;
+import org.apache.felix.dm.DependencyManager;
 import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallAware;
 import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallPolicyAware;
 import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallRuleAware;
@@ -31,7 +33,6 @@ import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityGroupAw
 import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityRuleAware;
 import org.opendaylight.controller.networkconfig.neutron.INeutronSubnetAware;
 import org.opendaylight.controller.networkconfig.neutron.INeutronSubnetCRUD;
-import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase;
 import org.opendaylight.controller.switchmanager.IInventoryListener;
 import org.opendaylight.controller.switchmanager.ISwitchManager;
 import org.opendaylight.ovsdb.openstack.netvirt.api.ArpProvider;
@@ -63,311 +64,242 @@ import org.opendaylight.ovsdb.plugin.api.OvsdbConfigurationService;
 import org.opendaylight.ovsdb.plugin.api.OvsdbConnectionService;
 import org.opendaylight.ovsdb.plugin.api.OvsdbInventoryListener;
 
+import org.osgi.framework.BundleContext;
+
 /**
  * OSGi bundle activator for the OVSDB Neutron Interface.
  */
-public class Activator extends ComponentActivatorAbstractBase {
-    /**
-     * Function called when the activator starts just after some
-     * initializations are done by the
-     * ComponentActivatorAbstractBase.
-     */
-    @Override
-    public void init() {
-    }
+public class Activator extends DependencyActivatorBase {
 
-    /**
-     * Function called when the activator stops just before the
-     * cleanup done by ComponentActivatorAbstractBase.
-     *
-     */
     @Override
-    public void destroy() {
-    }
+    public void init(BundleContext context, DependencyManager manager) throws Exception {
 
-    /**
-     * Function that is used to communicate to dependency manager the
-     * list of known implementations for services inside a container.
-     *
-     * @return An array containing all the CLASS objects that will be
-     * instantiated in order to get an fully working implementation
-     * Object
-     */
-    @Override
-    public Object[] getImplementations() {
-        Object[] res = {ConfigurationServiceImpl.class,
-                        BridgeConfigurationManagerImpl.class,
-                        TenantNetworkManagerImpl.class,
-                        VlanConfigurationCacheImpl.class,
-                        FloatingIPHandler.class,
-                        NetworkHandler.class,
-                        SubnetHandler.class,
-                        PortHandler.class,
-                        RouterHandler.class,
-                        SouthboundHandler.class,
-                        PortSecurityHandler.class,
-                        ProviderNetworkManagerImpl.class,
-                        EventDispatcherImpl.class,
-                        FWaasHandler.class,
-                        LBaaSHandler.class,
-                        LBaaSPoolHandler.class,
-                        LBaaSPoolMemberHandler.class,
-                        NeutronL3Adapter.class,
-                        OpenstackRouter.class,
-                        SecurityServicesImpl.class};
-        return res;
+        manager.add(createComponent()
+                .setInterface(ConfigurationService.class.getName(), null)
+                .setImplementation(ConfigurationServiceImpl.class)
+                .add(createServiceDependency().setService(OvsdbConfigurationService.class)));
+
+        manager.add(createComponent()
+                .setInterface(BridgeConfigurationManager.class.getName(), null)
+                .setImplementation(BridgeConfigurationManagerImpl.class)
+                .add(createServiceDependency().setService(ConfigurationService.class).setRequired(true))
+                .add(createServiceDependency().setService(NetworkingProviderManager.class))
+                .add(createServiceDependency().setService(OvsdbConfigurationService.class)));
+
+        manager.add(createComponent()
+                .setInterface(TenantNetworkManager.class.getName(), null)
+                .setImplementation(TenantNetworkManagerImpl.class)
+                .add(createServiceDependency().setService(NetworkingProviderManager.class))
+                .add(createServiceDependency().setService(OvsdbConfigurationService.class))
+                .add(createServiceDependency().setService(OvsdbConnectionService.class))
+                .add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true))
+                .add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true))
+                .add(createServiceDependency().setService(VlanConfigurationCache.class)));
+
+        manager.add(createComponent()
+                .setInterface(VlanConfigurationCache.class.getName(), null)
+                .setImplementation(VlanConfigurationCacheImpl.class)
+                .add(createServiceDependency().setService(OvsdbConfigurationService.class))
+                .add(createServiceDependency().setService(TenantNetworkManager.class)));
+
+        Dictionary<String, Object> floatingIPHandlerPorperties = new Hashtable<>();
+        floatingIPHandlerPorperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
+                AbstractEvent.HandlerType.NEUTRON_FLOATING_IP);
+
+        manager.add(createComponent()
+                .setInterface(new String[]{INeutronFloatingIPAware.class.getName(), AbstractHandler.class.getName()},
+                        floatingIPHandlerPorperties)
+                .setImplementation(FloatingIPHandler.class)
+                .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
+                .add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true)));
+
+        Dictionary<String, Object> networkHandlerProperties = new Hashtable<>();
+        networkHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_NETWORK);
+
+        manager.add(createComponent()
+                .setInterface(new String[]{INeutronNetworkAware.class.getName(), AbstractHandler.class.getName()},
+                        networkHandlerProperties)
+                .setImplementation(NetworkHandler.class)
+                .add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true))
+                .add(createServiceDependency().setService(BridgeConfigurationManager.class).setRequired(true))
+                .add(createServiceDependency().setService(ConfigurationService.class).setRequired(true))
+                .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
+                .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
+                .add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true))
+                .add(createServiceDependency().setService(OvsdbInventoryListener.class).setRequired(true))
+                .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
+                .add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true)));
+
+        Dictionary<String, Object> subnetHandlerProperties = new Hashtable<>();
+        subnetHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_SUBNET);
+
+        manager.add(createComponent()
+                .setInterface(new String[]{INeutronSubnetAware.class.getName(), AbstractHandler.class.getName()},
+                        subnetHandlerProperties)
+                .setImplementation(SubnetHandler.class)
+                .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
+                .add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true)));
+
+        Dictionary<String, Object> portHandlerProperties = new Hashtable<>();
+        portHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_PORT);
+
+        manager.add(createComponent()
+                .setInterface(new String[]{INeutronPortAware.class.getName(), AbstractHandler.class.getName()},
+                        portHandlerProperties)
+                .setImplementation(PortHandler.class)
+                .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
+                .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
+                .add(createServiceDependency().setService(OvsdbInventoryListener.class).setRequired(true))
+                .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
+                .add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true)));
+
+        Dictionary<String, Object> routerHandlerProperties = new Hashtable<>();
+        routerHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_ROUTER);
+
+        manager.add(createComponent()
+                .setInterface(new String[]{INeutronRouterAware.class.getName(), AbstractHandler.class.getName()},
+                        routerHandlerProperties)
+                .setImplementation(RouterHandler.class)
+                .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
+                .add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true)));
+
+        Dictionary<String, Object> southboundHandlerProperties = new Hashtable<>();
+        southboundHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.SOUTHBOUND);
+
+        manager.add(createComponent()
+                .setInterface(new String[]{OvsdbInventoryListener.class.getName(), IInventoryListener.class.getName(),
+                                AbstractHandler.class.getName()},
+                        southboundHandlerProperties)
+                .setImplementation(SouthboundHandler.class)
+                .add(createServiceDependency().setService(ConfigurationService.class).setRequired(true))
+                .add(createServiceDependency().setService(BridgeConfigurationManager.class).setRequired(true))
+                .add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true))
+                .add(createServiceDependency().setService(NetworkingProviderManager.class).setRequired(true))
+                .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
+                .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
+                .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
+                .add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true)));
+
+        Dictionary<String, Object> lbaasHandlerProperties = new Hashtable<>();
+        lbaasHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
+                AbstractEvent.HandlerType.NEUTRON_LOAD_BALANCER);
+
+        manager.add(createComponent()
+                .setInterface(new String[]{INeutronLoadBalancerAware.class.getName(),
+                                IInventoryListener.class.getName(), AbstractHandler.class.getName()},
+                        lbaasHandlerProperties)
+                .setImplementation(LBaaSHandler.class)
+                .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
+                .add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true))
+                .add(createServiceDependency().setService(INeutronLoadBalancerCRUD.class).setRequired(true))
+                .add(createServiceDependency().setService(INeutronLoadBalancerPoolCRUD.class).setRequired(true))
+                .add(createServiceDependency().setService(LoadBalancerProvider.class).setRequired(true))
+                .add(createServiceDependency().setService(ISwitchManager.class).setRequired(true))
+                .add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true))
+                .add(createServiceDependency().setService(INeutronSubnetCRUD.class).setRequired(true)));
+
+        Dictionary<String, Object> lbaasPoolHandlerProperties = new Hashtable<>();
+        lbaasPoolHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
+                AbstractEvent.HandlerType.NEUTRON_LOAD_BALANCER_POOL);
+
+        manager.add(createComponent()
+                .setInterface(new String[]{INeutronLoadBalancerPoolAware.class.getName(),
+                        AbstractHandler.class.getName()}, lbaasPoolHandlerProperties)
+                .setImplementation(LBaaSPoolHandler.class)
+                .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
+                .add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true))
+                .add(createServiceDependency().setService(INeutronLoadBalancerCRUD.class).setRequired(true))
+                .add(createServiceDependency().setService(LoadBalancerProvider.class).setRequired(true))
+                .add(createServiceDependency().setService(ISwitchManager.class).setRequired(true))
+                .add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true))
+                .add(createServiceDependency().setService(INeutronSubnetCRUD.class).setRequired(true)));
+
+        Dictionary<String, Object> lbaasPoolMemberHandlerProperties = new Hashtable<>();
+        lbaasPoolMemberHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
+                AbstractEvent.HandlerType.NEUTRON_LOAD_BALANCER_POOL_MEMBER);
+
+        manager.add(createComponent()
+                .setInterface(new String[] {INeutronLoadBalancerPoolMemberAware.class.getName(),
+                        AbstractHandler.class.getName()}, lbaasPoolMemberHandlerProperties)
+                .setImplementation(LBaaSPoolMemberHandler.class)
+                .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
+                .add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true))
+                .add(createServiceDependency().setService(INeutronLoadBalancerCRUD.class).setRequired(true))
+                .add(createServiceDependency().setService(INeutronLoadBalancerPoolCRUD.class).setRequired(true))
+                .add(createServiceDependency().setService(LoadBalancerProvider.class).setRequired(true))
+                .add(createServiceDependency().setService(ISwitchManager.class).setRequired(true))
+                .add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true))
+                .add(createServiceDependency().setService(INeutronSubnetCRUD.class).setRequired(true)));
+
+        Dictionary<String, Object> portSecurityHandlerProperties = new Hashtable<>();
+        portSecurityHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
+                AbstractEvent.HandlerType.NEUTRON_PORT_SECURITY);
+
+        manager.add(createComponent()
+                .setInterface(new String[]{INeutronSecurityRuleAware.class.getName(),
+                                INeutronSecurityGroupAware.class.getName(), AbstractHandler.class.getName()},
+                        portSecurityHandlerProperties)
+                .setImplementation(PortSecurityHandler.class)
+                .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
+                .add(createServiceDependency().setService(SecurityServicesManager.class).setRequired(true)));
+
+        manager.add(createComponent()
+                .setInterface(new String[]{SecurityServicesManager.class.getName()}, null)
+                .setImplementation(SecurityServicesImpl.class));
+
+        Dictionary<String, Object> fWaasHandlerProperties = new Hashtable<>();
+        fWaasHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_FWAAS);
+
+        manager.add(createComponent()
+                .setInterface(new String[] {INeutronFirewallAware.class.getName(),
+                                INeutronFirewallRuleAware.class.getName(), INeutronFirewallPolicyAware.class.getName(),
+                                AbstractHandler.class.getName()}, fWaasHandlerProperties)
+                .setImplementation(FWaasHandler.class)
+                .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true)));
+
+        manager.add(createComponent()
+                .setInterface(NetworkingProviderManager.class.getName(), null)
+                .setImplementation(ProviderNetworkManagerImpl.class)
+                .add(createServiceDependency().setService(ConfigurationService.class).setRequired(true))
+                .add(createServiceDependency().setService(NetworkingProvider.class)
+                        .setCallbacks("providerAdded", "providerRemoved")));
+
+        manager.add(createComponent()
+                .setInterface(EventDispatcher.class.getName(), null)
+                .setImplementation(EventDispatcherImpl.class)
+                .add(createServiceDependency()
+                        .setService(AbstractHandler.class)
+                        .setCallbacks("eventHandlerAdded", "eventHandlerRemoved")));
+
+        manager.add(createComponent()
+                .setInterface(NeutronL3Adapter.class.getName(), null)
+                .setImplementation(NeutronL3Adapter.class)
+                .add(createServiceDependency().setService(ConfigurationService.class).setRequired(true))
+                .add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true))
+                .add(createServiceDependency().setService(NetworkingProviderManager.class).setRequired(true))
+                .add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true))
+                .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
+                .add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true))
+                .add(createServiceDependency().setService(INeutronSubnetCRUD.class).setRequired(true))
+                .add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true))
+                .add(createServiceDependency().setService(MultiTenantAwareRouter.class).setRequired(true))
+                /* ToDo, we should probably just use the NetworkingProvider interface
+                 * This should provide a way of getting service implementations
+                 * Either that, or we should do service lookup at runtime based on getProvider().getName()
+                 * This is a shortcut as for now there will only be one implementation of these classes.
+                 */
+                .add(createServiceDependency().setService(ArpProvider.class).setRequired(false))
+                .add(createServiceDependency().setService(InboundNatProvider.class).setRequired(false))
+                .add(createServiceDependency().setService(OutboundNatProvider.class).setRequired(false))
+                .add(createServiceDependency().setService(RoutingProvider.class).setRequired(false))
+                .add(createServiceDependency().setService(L3ForwardingProvider.class).setRequired(false)));
+
+        manager.add(createComponent()
+                .setInterface(MultiTenantAwareRouter.class.getName(), null)
+                .setImplementation(OpenstackRouter.class));
     }
 
-    /**
-     * Function that is called when configuration of the dependencies
-     * is required.
-     *
-     * @param c dependency manager Component object, used for
-     * configuring the dependencies exported and imported
-     * @param imp Implementation class that is being configured,
-     * needed as long as the same routine can configure multiple
-     * implementations
-     * @param containerName The containerName being configured, this allow
-     * also optional per-container different behavior if needed, usually
-     * should not be the case though.
-     */
     @Override
-    public void configureInstance(Component c, Object imp,
-                                  String containerName) {
-        if (imp.equals(ConfigurationServiceImpl.class)) {
-            c.setInterface(ConfigurationService.class.getName(), null);
-            c.add(createServiceDependency().setService(OvsdbConfigurationService.class));
-        }
-
-        if (imp.equals(BridgeConfigurationManagerImpl.class)) {
-            c.setInterface(BridgeConfigurationManager.class.getName(), null);
-            c.add(createServiceDependency().setService(
-                    ConfigurationService.class).setRequired(true));
-            c.add(createServiceDependency().setService(NetworkingProviderManager.class));
-            c.add(createServiceDependency().setService(OvsdbConfigurationService.class));
-        }
-
-        if (imp.equals(TenantNetworkManagerImpl.class)) {
-            c.setInterface(TenantNetworkManager.class.getName(), null);
-            c.add(createServiceDependency().setService(NetworkingProviderManager.class));
-            c.add(createServiceDependency().setService(OvsdbConfigurationService.class));
-            c.add(createServiceDependency().setService(OvsdbConnectionService.class));
-            c.add(createServiceDependency().
-                    setService(INeutronNetworkCRUD.class).
-                    setRequired(true));
-            c.add(createServiceDependency().
-                    setService(INeutronPortCRUD.class).
-                    setRequired(true));
-            c.add(createServiceDependency().setService(VlanConfigurationCache.class));
-        }
-
-        if (imp.equals(VlanConfigurationCacheImpl.class)) {
-            c.setInterface(VlanConfigurationCache.class.getName(), null);
-            c.add(createServiceDependency().setService(OvsdbConfigurationService.class));
-            c.add(createServiceDependency().setService(TenantNetworkManager.class));
-        }
-
-        if (imp.equals(FloatingIPHandler.class)) {
-            Properties floatingIPHandlerPorperties = new Properties();
-            floatingIPHandlerPorperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
-                                            AbstractEvent.HandlerType.NEUTRON_FLOATING_IP);
-            c.setInterface(new String[]{INeutronFloatingIPAware.class.getName(),
-                                        AbstractHandler.class.getName()},
-                           floatingIPHandlerPorperties);
-            c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
-            c.add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true));
-        }
-
-        if (imp.equals(NetworkHandler.class)) {
-            Properties networkHandlerProperties = new Properties();
-            networkHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
-                                         AbstractEvent.HandlerType.NEUTRON_NETWORK);
-            c.setInterface(new String[]{INeutronNetworkAware.class.getName(),
-                                        AbstractHandler.class.getName()},
-                           networkHandlerProperties);
-            c.add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true));
-            c.add(createServiceDependency().setService(BridgeConfigurationManager.class).setRequired(true));
-            c.add(createServiceDependency().setService(ConfigurationService.class).setRequired(true));
-            c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
-            c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
-            c.add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true));
-            c.add(createServiceDependency().setService(OvsdbInventoryListener.class).setRequired(true));
-            c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
-            c.add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true));
-        }
-
-        if (imp.equals(SubnetHandler.class)) {
-            Properties subnetHandlerProperties = new Properties();
-            subnetHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_SUBNET);
-            c.setInterface(new String[]{INeutronSubnetAware.class.getName(),
-                                        AbstractHandler.class.getName()},
-                           subnetHandlerProperties);
-            c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
-            c.add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true));
-        }
-
-        if (imp.equals(PortHandler.class)) {
-            Properties portHandlerProperties = new Properties();
-            portHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_PORT);
-            c.setInterface(new String[]{INeutronPortAware.class.getName(),
-                                        AbstractHandler.class.getName()},
-                           portHandlerProperties);
-            c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
-            c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
-            c.add(createServiceDependency().setService(OvsdbInventoryListener.class).setRequired(true));
-            c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
-            c.add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true));
-        }
-
-        if (imp.equals(RouterHandler.class)) {
-            Properties routerHandlerProperties = new Properties();
-            routerHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_ROUTER);
-            c.setInterface(new String[]{INeutronRouterAware.class.getName(),
-                                        AbstractHandler.class.getName()},
-                           routerHandlerProperties);
-            c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
-            c.add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true));
-        }
-
-        if (imp.equals(SouthboundHandler.class)) {
-            Properties southboundHandlerProperties = new Properties();
-            southboundHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.SOUTHBOUND);
-            c.setInterface(new String[]{OvsdbInventoryListener.class.getName(),
-                                        IInventoryListener.class.getName(),
-                                        AbstractHandler.class.getName()},
-                           southboundHandlerProperties);
-            c.add(createServiceDependency().setService(ConfigurationService.class).setRequired(true));
-            c.add(createServiceDependency().setService(BridgeConfigurationManager.class).setRequired(true));
-            c.add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true));
-            c.add(createServiceDependency().setService(NetworkingProviderManager.class).setRequired(true));
-            c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
-            c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
-            c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
-            c.add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true));
-        }
-
-        if (imp.equals(LBaaSHandler.class)) {
-            Properties lbaasHandlerProperties = new Properties();
-            lbaasHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
-                    AbstractEvent.HandlerType.NEUTRON_LOAD_BALANCER);
-            c.setInterface(new String[] {INeutronLoadBalancerAware.class.getName(),
-                    IInventoryListener.class.getName(),
-                    AbstractHandler.class.getName()},
-                    lbaasHandlerProperties);
-            c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
-            c.add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true));
-            c.add(createServiceDependency().setService(INeutronLoadBalancerCRUD.class).setRequired(true));
-            c.add(createServiceDependency().setService(INeutronLoadBalancerPoolCRUD.class).setRequired(true));
-            c.add(createServiceDependency().setService(LoadBalancerProvider.class).setRequired(true));
-            c.add(createServiceDependency().setService(ISwitchManager.class).setRequired(true));
-            c.add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true));
-            c.add(createServiceDependency().setService(INeutronSubnetCRUD.class).setRequired(true));
-        }
-
-        if (imp.equals(LBaaSPoolHandler.class)) {
-            Properties lbaasPoolHandlerProperties = new Properties();
-            lbaasPoolHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
-                    AbstractEvent.HandlerType.NEUTRON_LOAD_BALANCER_POOL);
-            c.setInterface(new String[] {INeutronLoadBalancerPoolAware.class.getName(),
-                    AbstractHandler.class.getName()},
-                    lbaasPoolHandlerProperties);
-            c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
-            c.add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true));
-            c.add(createServiceDependency().setService(INeutronLoadBalancerCRUD.class).setRequired(true));
-            c.add(createServiceDependency().setService(LoadBalancerProvider.class).setRequired(true));
-            c.add(createServiceDependency().setService(ISwitchManager.class).setRequired(true));
-            c.add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true));
-            c.add(createServiceDependency().setService(INeutronSubnetCRUD.class).setRequired(true));
-        }
-
-        if (imp.equals(LBaaSPoolMemberHandler.class)) {
-            Properties lbaasPoolMemberHandlerProperties = new Properties();
-            lbaasPoolMemberHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
-                    AbstractEvent.HandlerType.NEUTRON_LOAD_BALANCER_POOL_MEMBER);
-            c.setInterface(new String[] {INeutronLoadBalancerPoolMemberAware.class.getName(),
-                    AbstractHandler.class.getName()},
-                    lbaasPoolMemberHandlerProperties);
-            c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
-            c.add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true));
-            c.add(createServiceDependency().setService(INeutronLoadBalancerCRUD.class).setRequired(true));
-            c.add(createServiceDependency().setService(INeutronLoadBalancerPoolCRUD.class).setRequired(true));
-            c.add(createServiceDependency().setService(LoadBalancerProvider.class).setRequired(true));
-            c.add(createServiceDependency().setService(ISwitchManager.class).setRequired(true));
-            c.add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true));
-            c.add(createServiceDependency().setService(INeutronSubnetCRUD.class).setRequired(true));
-        }
-
-        if (imp.equals(PortSecurityHandler.class)) {
-            Properties portSecurityHandlerProperties = new Properties();
-            portSecurityHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
-                                              AbstractEvent.HandlerType.NEUTRON_PORT_SECURITY);
-            c.setInterface(new String[]{INeutronSecurityRuleAware.class.getName(),
-                                        INeutronSecurityGroupAware.class.getName(),
-                            AbstractHandler.class.getName()},
-                           portSecurityHandlerProperties);
-            c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
-            c.add(createServiceDependency().setService(SecurityServicesManager.class).setRequired(true));
-        }
-
-        if (imp.equals(SecurityServicesImpl.class)) {
-            c.setInterface(new String[] {SecurityServicesManager.class.getName()}, null);
-        }
-
-        if (imp.equals(FWaasHandler.class)) {
-            Properties fWaasHandlerProperties = new Properties();
-            fWaasHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_FWAAS);
-            c.setInterface(new String[] {INeutronFirewallAware.class.getName(),
-                            INeutronFirewallRuleAware.class.getName(),
-                            INeutronFirewallPolicyAware.class.getName(),
-                            AbstractHandler.class.getName()},
-                    fWaasHandlerProperties);
-            c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
-        }
-
-        if (imp.equals(ProviderNetworkManagerImpl.class)) {
-            c.setInterface(NetworkingProviderManager.class.getName(), null);
-            c.add(createServiceDependency()
-                    .setService(ConfigurationService.class)
-                    .setRequired(true));
-            c.add(createServiceDependency()
-                    .setService(NetworkingProvider.class)
-                    .setCallbacks("providerAdded", "providerRemoved"));
-        }
-
-        if (imp.equals(EventDispatcherImpl.class)) {
-            c.setInterface(EventDispatcher.class.getName(), null);
-            c.add(createServiceDependency()
-                          .setService(AbstractHandler.class)
-                          .setCallbacks("eventHandlerAdded", "eventHandlerRemoved"));
-        }
-
-        if (imp.equals(NeutronL3Adapter.class)) {
-            c.setInterface(NeutronL3Adapter.class.getName(), null);
-            c.add(createServiceDependency()
-                          .setService(ConfigurationService.class)
-                          .setRequired(true));
-            c.add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true));
-            c.add(createServiceDependency().setService(NetworkingProviderManager.class).setRequired(true));
-            c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
-            c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
-            c.add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true));
-            c.add(createServiceDependency().setService(INeutronSubnetCRUD.class).setRequired(true));
-            c.add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true));
-            c.add(createServiceDependency().setService(MultiTenantAwareRouter.class).setRequired(true));
-            /* ToDo, we should probably just use the NetworkingProvider interface
-             * This should provide a way of getting service implementations
-             * Either that, or we should do service lookup at runtime based on getProvider().getName()
-             * This is a shortcut as for now there will only be one implementation of these classes.
-             */
-            c.add(createServiceDependency().setService(ArpProvider.class).setRequired(false));
-            c.add(createServiceDependency().setService(InboundNatProvider.class).setRequired(false));
-            c.add(createServiceDependency().setService(OutboundNatProvider.class).setRequired(false));
-            c.add(createServiceDependency().setService(RoutingProvider.class).setRequired(false));
-            c.add(createServiceDependency().setService(L3ForwardingProvider.class).setRequired(false));
-        }
-
-        if (imp.equals(OpenstackRouter.class)) {
-            c.setInterface(MultiTenantAwareRouter.class.getName(), null);
-        }
+    public void destroy(BundleContext context, DependencyManager manager) throws Exception {
     }
 }