2 * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
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
9 package org.opendaylight.neutron.transcriber;
11 import com.google.common.base.Preconditions;
12 import java.util.ArrayList;
13 import java.util.List;
14 import javax.annotation.PostConstruct;
15 import javax.annotation.PreDestroy;
16 import javax.inject.Inject;
17 import javax.inject.Singleton;
18 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
19 import org.opendaylight.neutron.spi.INeutronBgpvpnCRUD;
20 import org.opendaylight.neutron.spi.INeutronCRUD;
21 import org.opendaylight.neutron.spi.INeutronFirewallCRUD;
22 import org.opendaylight.neutron.spi.INeutronFirewallPolicyCRUD;
23 import org.opendaylight.neutron.spi.INeutronFirewallRuleCRUD;
24 import org.opendaylight.neutron.spi.INeutronFloatingIpCRUD;
25 import org.opendaylight.neutron.spi.INeutronL2gatewayCRUD;
26 import org.opendaylight.neutron.spi.INeutronL2gatewayConnectionCRUD;
27 import org.opendaylight.neutron.spi.INeutronLoadBalancerCRUD;
28 import org.opendaylight.neutron.spi.INeutronLoadBalancerHealthMonitorCRUD;
29 import org.opendaylight.neutron.spi.INeutronLoadBalancerListenerCRUD;
30 import org.opendaylight.neutron.spi.INeutronLoadBalancerPoolCRUD;
31 import org.opendaylight.neutron.spi.INeutronMeteringLabelCRUD;
32 import org.opendaylight.neutron.spi.INeutronMeteringLabelRuleCRUD;
33 import org.opendaylight.neutron.spi.INeutronNetworkCRUD;
34 import org.opendaylight.neutron.spi.INeutronPortCRUD;
35 import org.opendaylight.neutron.spi.INeutronQosPolicyCRUD;
36 import org.opendaylight.neutron.spi.INeutronRouterCRUD;
37 import org.opendaylight.neutron.spi.INeutronSFCFlowClassifierCRUD;
38 import org.opendaylight.neutron.spi.INeutronSFCPortChainCRUD;
39 import org.opendaylight.neutron.spi.INeutronSFCPortPairCRUD;
40 import org.opendaylight.neutron.spi.INeutronSFCPortPairGroupCRUD;
41 import org.opendaylight.neutron.spi.INeutronSecurityGroupCRUD;
42 import org.opendaylight.neutron.spi.INeutronSecurityRuleCRUD;
43 import org.opendaylight.neutron.spi.INeutronSubnetCRUD;
44 import org.opendaylight.neutron.spi.INeutronTapFlowCRUD;
45 import org.opendaylight.neutron.spi.INeutronTapServiceCRUD;
46 import org.opendaylight.neutron.spi.INeutronTrunkCRUD;
47 import org.opendaylight.neutron.spi.INeutronVpnIkePolicyCRUD;
48 import org.opendaylight.neutron.spi.INeutronVpnIpSecPolicyCRUD;
49 import org.opendaylight.neutron.spi.INeutronVpnIpSecSiteConnectionsCRUD;
50 import org.opendaylight.neutron.spi.INeutronVpnServiceCRUD;
51 import org.osgi.framework.BundleContext;
52 import org.osgi.framework.ServiceRegistration;
53 import org.slf4j.Logger;
54 import org.slf4j.LoggerFactory;
57 public final class NeutronTranscriberProvider implements NeutronTranscriber {
58 private static final Logger LOG = LoggerFactory.getLogger(NeutronTranscriberProvider.class);
60 private BundleContext context;
61 private final DataBroker db;
62 private final List<ServiceRegistration<? extends INeutronCRUD<?>>> registrations = new ArrayList<>();
63 private final List<AutoCloseable> neutronInterfaces = new ArrayList<>();
66 public NeutronTranscriberProvider(BundleContext context, DataBroker db) {
67 LOG.debug("DataBroker set to: {}", db);
68 this.context = Preconditions.checkNotNull(context);
69 this.db = Preconditions.checkNotNull(db);
72 private <S extends INeutronCRUD<?>,
73 T extends AutoCloseable /* & S */> void registerCRUDInterface(java.lang.Class<S> clazz, T crudInterface) {
74 neutronInterfaces.add(crudInterface);
75 @SuppressWarnings("unchecked")
76 S castCrudInterface = (S) crudInterface;
77 final ServiceRegistration<S> crudInterfaceRegistration =
78 context.registerService(clazz, castCrudInterface, null);
79 registrations.add(crudInterfaceRegistration);
84 registerCRUDInterface(INeutronBgpvpnCRUD.class, new NeutronBgpvpnInterface(db));
85 registerCRUDInterface(INeutronFirewallCRUD.class, new NeutronFirewallInterface(db));
86 registerCRUDInterface(INeutronFirewallPolicyCRUD.class, new NeutronFirewallPolicyInterface(db));
87 registerCRUDInterface(INeutronFirewallRuleCRUD.class, new NeutronFirewallRuleInterface(db));
88 registerCRUDInterface(INeutronFloatingIpCRUD.class, new NeutronFloatingIpInterface(db));
89 registerCRUDInterface(INeutronL2gatewayConnectionCRUD.class, new NeutronL2gatewayConnectionInterface(db));
90 registerCRUDInterface(INeutronL2gatewayCRUD.class, new NeutronL2gatewayInterface(db));
91 registerCRUDInterface(INeutronLoadBalancerHealthMonitorCRUD.class,
92 new NeutronLoadBalancerHealthMonitorInterface(db));
93 registerCRUDInterface(INeutronLoadBalancerCRUD.class, new NeutronLoadBalancerInterface(db));
94 registerCRUDInterface(INeutronLoadBalancerListenerCRUD.class, new NeutronLoadBalancerListenerInterface(db));
95 registerCRUDInterface(INeutronLoadBalancerPoolCRUD.class, new NeutronLoadBalancerPoolInterface(db));
96 registerCRUDInterface(INeutronMeteringLabelCRUD.class, new NeutronMeteringLabelInterface(db));
97 registerCRUDInterface(INeutronMeteringLabelRuleCRUD.class, new NeutronMeteringLabelRuleInterface(db));
98 registerCRUDInterface(INeutronNetworkCRUD.class, new NeutronNetworkInterface(db));
99 registerCRUDInterface(INeutronPortCRUD.class, new NeutronPortInterface(db));
100 registerCRUDInterface(INeutronQosPolicyCRUD.class, new NeutronQosPolicyInterface(db));
101 registerCRUDInterface(INeutronRouterCRUD.class, new NeutronRouterInterface(db));
102 registerCRUDInterface(INeutronSFCFlowClassifierCRUD.class, new NeutronSFCFlowClassifierInterface(db));
103 registerCRUDInterface(INeutronSFCPortPairCRUD.class, new NeutronSFCPortPairInterface(db));
104 registerCRUDInterface(INeutronSFCPortPairGroupCRUD.class, new NeutronSFCPortPairGroupInterface(db));
105 registerCRUDInterface(INeutronSFCPortChainCRUD.class, new NeutronSFCPortChainInterface(db));
106 registerCRUDInterface(INeutronSecurityGroupCRUD.class, new NeutronSecurityGroupInterface(db));
107 registerCRUDInterface(INeutronSecurityRuleCRUD.class, new NeutronSecurityRuleInterface(db));
108 registerCRUDInterface(INeutronSubnetCRUD.class, new NeutronSubnetInterface(db));
109 registerCRUDInterface(INeutronTapServiceCRUD.class, new NeutronTapServiceInterface(db));
110 registerCRUDInterface(INeutronTapFlowCRUD.class, new NeutronTapFlowInterface(db));
111 registerCRUDInterface(INeutronTrunkCRUD.class, new NeutronTrunkInterface(db));
112 registerCRUDInterface(INeutronVpnIkePolicyCRUD.class, new NeutronVpnIkePolicyInterface(db));
113 registerCRUDInterface(INeutronVpnIpSecPolicyCRUD.class, new NeutronVpnIpSecPolicyInterface(db));
114 registerCRUDInterface(INeutronVpnIpSecSiteConnectionsCRUD.class,
115 new NeutronVpnIpSecSiteConnectionsInterface(db));
116 registerCRUDInterface(INeutronVpnServiceCRUD.class, new NeutronVpnServiceInterface(db));
118 // We don't need context any more
123 public void close() throws Exception {
124 for (final ServiceRegistration registration : registrations) {
125 registration.unregister();
127 for (final AutoCloseable neutronCRUD : neutronInterfaces) {
130 neutronInterfaces.clear();