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.INeutronTrunkCRUD;
45 import org.opendaylight.neutron.spi.INeutronVpnIkePolicyCRUD;
46 import org.opendaylight.neutron.spi.INeutronVpnIpSecPolicyCRUD;
47 import org.opendaylight.neutron.spi.INeutronVpnIpSecSiteConnectionsCRUD;
48 import org.opendaylight.neutron.spi.INeutronVpnServiceCRUD;
49 import org.osgi.framework.BundleContext;
50 import org.osgi.framework.ServiceRegistration;
51 import org.slf4j.Logger;
52 import org.slf4j.LoggerFactory;
55 public final class NeutronTranscriberProvider implements NeutronTranscriber {
56 private static final Logger LOG = LoggerFactory.getLogger(NeutronTranscriberProvider.class);
58 private BundleContext context;
59 private final DataBroker db;
60 private final List<ServiceRegistration<? extends INeutronCRUD<?>>> registrations = new ArrayList<>();
61 private final List<AutoCloseable> neutronInterfaces = new ArrayList<>();
64 public NeutronTranscriberProvider(BundleContext context, DataBroker db) {
65 LOG.debug("DataBroker set to: {}", db);
66 this.context = Preconditions.checkNotNull(context);
67 this.db = Preconditions.checkNotNull(db);
70 private <S extends INeutronCRUD<?>,
71 T extends AutoCloseable /* & S */> void registerCRUDInterface(java.lang.Class<S> clazz, T crudInterface) {
72 neutronInterfaces.add(crudInterface);
73 @SuppressWarnings("unchecked")
74 S castCrudInterface = (S) crudInterface;
75 final ServiceRegistration<S> crudInterfaceRegistration =
76 context.registerService(clazz, castCrudInterface, null);
77 registrations.add(crudInterfaceRegistration);
82 registerCRUDInterface(INeutronBgpvpnCRUD.class, new NeutronBgpvpnInterface(db));
83 registerCRUDInterface(INeutronFirewallCRUD.class, new NeutronFirewallInterface(db));
84 registerCRUDInterface(INeutronFirewallPolicyCRUD.class, new NeutronFirewallPolicyInterface(db));
85 registerCRUDInterface(INeutronFirewallRuleCRUD.class, new NeutronFirewallRuleInterface(db));
86 registerCRUDInterface(INeutronFloatingIpCRUD.class, new NeutronFloatingIpInterface(db));
87 registerCRUDInterface(INeutronL2gatewayConnectionCRUD.class, new NeutronL2gatewayConnectionInterface(db));
88 registerCRUDInterface(INeutronL2gatewayCRUD.class, new NeutronL2gatewayInterface(db));
89 registerCRUDInterface(INeutronLoadBalancerHealthMonitorCRUD.class,
90 new NeutronLoadBalancerHealthMonitorInterface(db));
91 registerCRUDInterface(INeutronLoadBalancerCRUD.class, new NeutronLoadBalancerInterface(db));
92 registerCRUDInterface(INeutronLoadBalancerListenerCRUD.class, new NeutronLoadBalancerListenerInterface(db));
93 registerCRUDInterface(INeutronLoadBalancerPoolCRUD.class, new NeutronLoadBalancerPoolInterface(db));
94 registerCRUDInterface(INeutronMeteringLabelCRUD.class, new NeutronMeteringLabelInterface(db));
95 registerCRUDInterface(INeutronMeteringLabelRuleCRUD.class, new NeutronMeteringLabelRuleInterface(db));
96 registerCRUDInterface(INeutronNetworkCRUD.class, new NeutronNetworkInterface(db));
97 registerCRUDInterface(INeutronPortCRUD.class, new NeutronPortInterface(db));
98 registerCRUDInterface(INeutronQosPolicyCRUD.class, new NeutronQosPolicyInterface(db));
99 registerCRUDInterface(INeutronRouterCRUD.class, new NeutronRouterInterface(db));
100 registerCRUDInterface(INeutronSFCFlowClassifierCRUD.class, new NeutronSFCFlowClassifierInterface(db));
101 registerCRUDInterface(INeutronSFCPortPairCRUD.class, new NeutronSFCPortPairInterface(db));
102 registerCRUDInterface(INeutronSFCPortPairGroupCRUD.class, new NeutronSFCPortPairGroupInterface(db));
103 registerCRUDInterface(INeutronSFCPortChainCRUD.class, new NeutronSFCPortChainInterface(db));
104 registerCRUDInterface(INeutronSecurityGroupCRUD.class, new NeutronSecurityGroupInterface(db));
105 registerCRUDInterface(INeutronSecurityRuleCRUD.class, new NeutronSecurityRuleInterface(db));
106 registerCRUDInterface(INeutronSubnetCRUD.class, new NeutronSubnetInterface(db));
107 registerCRUDInterface(INeutronTrunkCRUD.class, new NeutronTrunkInterface(db));
108 registerCRUDInterface(INeutronVpnIkePolicyCRUD.class, new NeutronVpnIkePolicyInterface(db));
109 registerCRUDInterface(INeutronVpnIpSecPolicyCRUD.class, new NeutronVpnIpSecPolicyInterface(db));
110 registerCRUDInterface(INeutronVpnIpSecSiteConnectionsCRUD.class,
111 new NeutronVpnIpSecSiteConnectionsInterface(db));
112 registerCRUDInterface(INeutronVpnServiceCRUD.class, new NeutronVpnServiceInterface(db));
114 // We don't need context any more
119 public void close() throws Exception {
120 for (final ServiceRegistration registration : registrations) {
121 registration.unregister();
123 for (final AutoCloseable neutronCRUD : neutronInterfaces) {
126 neutronInterfaces.clear();