Merge remote-tracking branch 'origin/master' into merge-branch
[ovsdb.git] / neutron / src / main / java / org / opendaylight / ovsdb / neutron / 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.neutron;
12
13 import org.apache.felix.dm.Component;
14 import org.opendaylight.controller.containermanager.IContainerManager;
15 import org.opendaylight.controller.forwardingrulesmanager.IForwardingRulesManager;
16 import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkAware;
17 import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkCRUD;
18 import org.opendaylight.controller.networkconfig.neutron.INeutronPortAware;
19 import org.opendaylight.controller.networkconfig.neutron.INeutronPortCRUD;
20 import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityGroupAware;
21 import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityGroupCRUD;
22 import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityRuleAware;
23 import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityRuleCRUD;
24 import org.opendaylight.controller.networkconfig.neutron.INeutronSubnetAware;
25 import org.opendaylight.controller.networkconfig.neutron.INeutronSubnetCRUD;
26 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
27 import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase;
28 import org.opendaylight.controller.switchmanager.IInventoryListener;
29 import org.opendaylight.ovsdb.neutron.provider.IProviderNetworkManager;
30 import org.opendaylight.ovsdb.neutron.provider.ProviderNetworkManager;
31 import org.opendaylight.ovsdb.plugin.IConnectionServiceInternal;
32 import org.opendaylight.ovsdb.plugin.OVSDBConfigService;
33 import org.opendaylight.ovsdb.plugin.OVSDBInventoryListener;
34
35 /**
36  * OSGi bundle activator for the OVSDB Neutron Interface.
37  */
38 public class Activator extends ComponentActivatorAbstractBase {
39     /**
40      * Function called when the activator starts just after some
41      * initializations are done by the
42      * ComponentActivatorAbstractBase.
43      */
44     @Override
45     public void init() {
46     }
47
48     /**
49      * Function called when the activator stops just before the
50      * cleanup done by ComponentActivatorAbstractBase.
51      *
52      */
53     @Override
54     public void destroy() {
55     }
56
57     /**
58      * Function that is used to communicate to dependency manager the
59      * list of known implementations for services inside a container.
60      *
61      * @return An array containing all the CLASS objects that will be
62      * instantiated in order to get an fully working implementation
63      * Object
64      */
65     @Override
66     public Object[] getImplementations() {
67         Object[] res = {AdminConfigManager.class,
68                         InternalNetworkManager.class,
69                         TenantNetworkManager.class,
70                         NetworkHandler.class,
71                         SubnetHandler.class,
72                         PortHandler.class,
73                         SouthboundHandler.class,
74                         PortSecurityHandler.class,
75                         MDSALConsumer.class,
76                         ProviderNetworkManager.class};
77         return res;
78     }
79
80     /**
81      * Function that is called when configuration of the dependencies
82      * is required.
83      *
84      * @param c dependency manager Component object, used for
85      * configuring the dependencies exported and imported
86      * @param imp Implementation class that is being configured,
87      * needed as long as the same routine can configure multiple
88      * implementations
89      * @param containerName The containerName being configured, this allow
90      * also optional per-container different behavior if needed, usually
91      * should not be the case though.
92      */
93     @Override
94     public void configureInstance(Component c, Object imp,
95                                   String containerName) {
96         if (imp.equals(AdminConfigManager.class)) {
97             c.setInterface(IAdminConfigManager.class.getName(), null);
98         }
99
100         if (imp.equals(InternalNetworkManager.class)) {
101             c.setInterface(IInternalNetworkManager.class.getName(), null);
102             c.add(createServiceDependency().setService(IAdminConfigManager.class).setRequired(true));
103             c.add(createServiceDependency().setService(IProviderNetworkManager.class));
104         }
105
106         if (imp.equals(TenantNetworkManager.class)) {
107             c.setInterface(ITenantNetworkManager.class.getName(), null);
108             c.add(createServiceDependency().setService(IProviderNetworkManager.class));
109         }
110
111         if (imp.equals(NetworkHandler.class)) {
112             c.setInterface(INeutronNetworkAware.class.getName(), null);
113             c.add(createServiceDependency().setService(ITenantNetworkManager.class).setRequired(true));
114         }
115
116         if (imp.equals(SubnetHandler.class)) {
117             c.setInterface(INeutronSubnetAware.class.getName(), null);
118         }
119
120         if (imp.equals(PortHandler.class)) {
121             c.setInterface(INeutronPortAware.class.getName(), null);
122         }
123
124         if (imp.equals(SouthboundHandler.class)) {
125             c.setInterface(new String[] {OVSDBInventoryListener.class.getName(), IInventoryListener.class.getName()}, null);
126             c.add(createServiceDependency().setService(IAdminConfigManager.class).setRequired(true));
127             c.add(createServiceDependency().setService(IInternalNetworkManager.class).setRequired(true));
128             c.add(createServiceDependency().setService(ITenantNetworkManager.class).setRequired(true));
129             c.add(createServiceDependency().setService(IProviderNetworkManager.class).setRequired(true));
130         }
131
132         if (imp.equals(MDSALConsumer.class)) {
133             c.setInterface(IMDSALConsumer.class.getName(), null);
134         }
135
136         if (imp.equals(ProviderNetworkManager.class)) {
137             c.setInterface(IProviderNetworkManager.class.getName(), null);
138             c.add(createServiceDependency()
139                     .setService(IAdminConfigManager.class)
140                     .setRequired(true));
141             c.add(createServiceDependency()
142                     .setService(IInternalNetworkManager.class)
143                     .setRequired(true));
144             c.add(createServiceDependency()
145                     .setService(ITenantNetworkManager.class)
146                     .setRequired(true));
147         }
148         if (imp.equals(PortSecurityHandler.class)) {
149             c.setInterface(INeutronSecurityRuleAware.class.getName(), null);
150             c.setInterface(INeutronSecurityGroupAware.class.getName(), null);
151         }
152
153         //ToDo: DT: We don't need these dependencies for every implementation...
154         //ToDo: DT: Callbacks are only required when behaviour is more complex than simple set/unset operation
155         c.add(createServiceDependency().
156                 setService(OVSDBConfigService.class).
157                 setCallbacks("setOVSDBConfigService", "unsetOVSDBConfigService").
158                 setRequired(true));
159
160         c.add(createServiceDependency().
161                 setService(IConnectionServiceInternal.class).
162                 setCallbacks("setConnectionService", "unsetConnectionService").
163                 setRequired(true));
164
165         c.add(createServiceDependency().
166               setService(IContainerManager.class).
167               setCallbacks("setContainerManager", "unsetContainerManager").
168               setRequired(true));
169
170         c.add(createServiceDependency().
171                 setService(IForwardingRulesManager.class).
172                 setCallbacks("setForwardingRulesManager", "unsetForwardingRulesManager").
173                 setRequired(true));
174
175         c.add(createServiceDependency()
176                 .setService(BindingAwareBroker.class)
177                 .setCallbacks("setBindingAwareBroker", "unsetBindingAwareBroker")
178                 .setRequired(true));
179
180         c.add(createServiceDependency().
181                 setService(INeutronNetworkCRUD.class).
182                 setCallbacks("setNeutronNetworkCRUD", "unsetNeutronNetworkCRUD").
183                 setRequired(true));
184         c.add(createServiceDependency().
185                 setService(INeutronSubnetCRUD.class).
186                 setCallbacks("setNeutronSubnetCRUD", "unsetNeutronSubnetCRUD").
187                 setRequired(true));
188         c.add(createServiceDependency().
189                 setService(INeutronPortCRUD.class).
190                 setCallbacks("setNeutronPortCRUD", "unsetNeutronPortCRUD").
191                 setRequired(true));
192         c.add(createServiceDependency().
193             setService(INeutronSecurityRuleCRUD.class).
194             setCallbacks("setNeutronSecurityRuleCRUD", "unsetNeutronSecurityRuleCRUD").
195             setRequired(true));
196         c.add(createServiceDependency().
197             setService(INeutronSecurityGroupCRUD.class).
198             setCallbacks("setNeutronSecurityGroupCRUD", "unsetNeutronSecurityGroupCRUD").
199             setRequired(true));
200     }
201 }