Refactor of the OVSDB Plugin
[ovsdb.git] / openstack / net-virt / src / main / java / org / opendaylight / ovsdb / openstack / netvirt / Activator.java
1 /*
2  * Copyright (C) 2013 Red Hat, Inc.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Authors : Madhu Venugopal, Brent Salisbury, Dave Tucker
9  */
10
11 package org.opendaylight.ovsdb.openstack.netvirt;
12
13 import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkAware;
14 import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkCRUD;
15 import org.opendaylight.controller.networkconfig.neutron.INeutronPortAware;
16 import org.opendaylight.controller.networkconfig.neutron.INeutronPortCRUD;
17 import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityGroupAware;
18 import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityRuleAware;
19 import org.opendaylight.controller.networkconfig.neutron.INeutronSubnetAware;
20 import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase;
21 import org.opendaylight.controller.switchmanager.IInventoryListener;
22 import org.opendaylight.ovsdb.openstack.netvirt.api.BridgeConfigurationManager;
23 import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProvider;
24 import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProviderManager;
25 import org.opendaylight.ovsdb.openstack.netvirt.api.TenantNetworkManager;
26 import org.opendaylight.ovsdb.openstack.netvirt.api.VlanConfigurationCache;
27 import org.opendaylight.ovsdb.openstack.netvirt.impl.BridgeConfigurationManagerImpl;
28 import org.opendaylight.ovsdb.openstack.netvirt.impl.ConfigurationServiceImpl;
29 import org.opendaylight.ovsdb.openstack.netvirt.impl.ProviderNetworkManagerImpl;
30 import org.opendaylight.ovsdb.openstack.netvirt.impl.TenantNetworkManagerImpl;
31 import org.opendaylight.ovsdb.openstack.netvirt.impl.VlanConfigurationCacheImpl;
32 import org.opendaylight.ovsdb.plugin.api.OvsdbConfigurationService;
33 import org.opendaylight.ovsdb.plugin.api.OvsdbConnectionService;
34 import org.opendaylight.ovsdb.plugin.api.OvsdbInventoryListener;
35
36 import org.apache.felix.dm.Component;
37
38 /**
39  * OSGi bundle activator for the OVSDB Neutron Interface.
40  */
41 public class Activator extends ComponentActivatorAbstractBase {
42     /**
43      * Function called when the activator starts just after some
44      * initializations are done by the
45      * ComponentActivatorAbstractBase.
46      */
47     @Override
48     public void init() {
49     }
50
51     /**
52      * Function called when the activator stops just before the
53      * cleanup done by ComponentActivatorAbstractBase.
54      *
55      */
56     @Override
57     public void destroy() {
58     }
59
60     /**
61      * Function that is used to communicate to dependency manager the
62      * list of known implementations for services inside a container.
63      *
64      * @return An array containing all the CLASS objects that will be
65      * instantiated in order to get an fully working implementation
66      * Object
67      */
68     @Override
69     public Object[] getImplementations() {
70         Object[] res = {ConfigurationServiceImpl.class,
71                         BridgeConfigurationManagerImpl.class,
72                         TenantNetworkManagerImpl.class,
73                         VlanConfigurationCacheImpl.class,
74                         NetworkHandler.class,
75                         SubnetHandler.class,
76                         PortHandler.class,
77                         SouthboundHandler.class,
78                         PortSecurityHandler.class,
79                         ProviderNetworkManagerImpl.class};
80         return res;
81     }
82
83     /**
84      * Function that is called when configuration of the dependencies
85      * is required.
86      *
87      * @param c dependency manager Component object, used for
88      * configuring the dependencies exported and imported
89      * @param imp Implementation class that is being configured,
90      * needed as long as the same routine can configure multiple
91      * implementations
92      * @param containerName The containerName being configured, this allow
93      * also optional per-container different behavior if needed, usually
94      * should not be the case though.
95      */
96     @Override
97     public void configureInstance(Component c, Object imp,
98                                   String containerName) {
99         if (imp.equals(ConfigurationServiceImpl.class)) {
100             c.setInterface(org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService.class.getName(), null);
101             c.add(createServiceDependency().setService(OvsdbConfigurationService.class));
102         }
103
104         if (imp.equals(BridgeConfigurationManagerImpl.class)) {
105             c.setInterface(BridgeConfigurationManager.class.getName(), null);
106             c.add(createServiceDependency().setService(
107                     org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService.class).setRequired(true));
108             c.add(createServiceDependency().setService(NetworkingProviderManager.class));
109             c.add(createServiceDependency().setService(OvsdbConfigurationService.class));
110         }
111
112         if (imp.equals(TenantNetworkManagerImpl.class)) {
113             c.setInterface(TenantNetworkManager.class.getName(), null);
114             c.add(createServiceDependency().setService(NetworkingProviderManager.class));
115             c.add(createServiceDependency().setService(OvsdbConfigurationService.class));
116             c.add(createServiceDependency().setService(OvsdbConnectionService.class));
117             c.add(createServiceDependency().
118                     setService(INeutronNetworkCRUD.class).
119                     setRequired(true));
120             c.add(createServiceDependency().
121                     setService(INeutronPortCRUD.class).
122                     setRequired(true));
123             c.add(createServiceDependency().setService(VlanConfigurationCache.class));
124         }
125
126         if (imp.equals(VlanConfigurationCacheImpl.class)) {
127             c.setInterface(VlanConfigurationCache.class.getName(), null);
128             c.add(createServiceDependency().setService(OvsdbConfigurationService.class));
129             c.add(createServiceDependency().setService(TenantNetworkManager.class));
130         }
131
132         if (imp.equals(NetworkHandler.class)) {
133             c.setInterface(INeutronNetworkAware.class.getName(), null);
134             c.add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true));
135             c.add(createServiceDependency().setService(BridgeConfigurationManager.class).setRequired(true));
136             c.add(createServiceDependency().setService(
137                     org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService.class).setRequired(true));
138             c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
139             c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
140             c.add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true));
141             c.add(createServiceDependency().setService(OvsdbInventoryListener.class).setRequired(true));
142         }
143
144         if (imp.equals(SubnetHandler.class)) {
145             c.setInterface(INeutronSubnetAware.class.getName(), null);
146         }
147
148         if (imp.equals(PortHandler.class)) {
149             c.setInterface(INeutronPortAware.class.getName(), null);
150             c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
151             c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
152             c.add(createServiceDependency().setService(OvsdbInventoryListener.class).setRequired(true));
153         }
154
155         if (imp.equals(SouthboundHandler.class)) {
156             c.setInterface(new String[] {OvsdbInventoryListener.class.getName(),
157                                          IInventoryListener.class.getName()}, null);
158             c.add(createServiceDependency().setService(
159                     org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService.class).setRequired(true));
160             c.add(createServiceDependency().setService(BridgeConfigurationManager.class).setRequired(true));
161             c.add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true));
162             c.add(createServiceDependency().setService(NetworkingProviderManager.class).setRequired(true));
163             c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
164             c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
165         }
166
167         if (imp.equals(PortSecurityHandler.class)) {
168             c.setInterface(new String[] {INeutronSecurityRuleAware.class.getName(),
169                                          INeutronSecurityGroupAware.class.getName()}, null);
170         }
171
172         if (imp.equals(ProviderNetworkManagerImpl.class)) {
173             c.setInterface(NetworkingProviderManager.class.getName(), null);
174             c.add(createServiceDependency()
175                     .setService(org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService.class)
176                     .setRequired(true));
177             c.add(createServiceDependency()
178                     .setService(NetworkingProvider.class)
179                     .setCallbacks("providerAdded", "providerRemoved"));
180         }
181     }
182 }