remove OSGi dependency from bgp modules
[bgpcep.git] / bgp / rib-impl / src / main / java / org / opendaylight / protocol / bgp / rib / impl / config / BGPClusterSingletonService.java
index 450fc79ebd4d50b9105d7224279a126cd12a26c5..46aab8d0c63dc98b7542ad07a721b67194287785 100644 (file)
@@ -11,7 +11,6 @@ package org.opendaylight.protocol.bgp.rib.impl.config;
 import static org.opendaylight.protocol.bgp.rib.impl.config.OpenConfigMappingUtil.APPLICATION_PEER_GROUP_NAME;
 import static org.opendaylight.protocol.bgp.rib.impl.config.OpenConfigMappingUtil.APPLICATION_PEER_GROUP_NAME_OPT;
 import static org.opendaylight.protocol.bgp.rib.impl.config.OpenConfigMappingUtil.getNeighborInstanceIdentifier;
-import static org.opendaylight.protocol.bgp.rib.impl.config.OpenConfigMappingUtil.getNeighborInstanceName;
 import static org.opendaylight.protocol.bgp.rib.impl.config.OpenConfigMappingUtil.getRibInstanceName;
 
 import com.google.common.util.concurrent.FutureCallback;
@@ -20,9 +19,7 @@ import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
 import com.google.common.util.concurrent.SettableFuture;
 import java.util.ArrayList;
-import java.util.Dictionary;
 import java.util.HashMap;
-import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
@@ -32,13 +29,20 @@ import java.util.stream.Collectors;
 import javax.annotation.Nonnull;
 import javax.annotation.concurrent.GuardedBy;
 import org.apache.commons.lang3.StringUtils;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
+import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory;
 import org.opendaylight.mdsal.common.api.CommitInfo;
+import org.opendaylight.mdsal.dom.api.DOMSchemaService;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
 import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier;
+import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.BGPRibRoutingPolicyFactory;
 import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer;
-import org.opendaylight.protocol.bgp.rib.impl.spi.InstanceType;
+import org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher;
+import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext;
 import org.opendaylight.protocol.bgp.rib.spi.util.ClusterSingletonServiceRegistrationHelper;
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.Config;
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.Neighbor;
@@ -48,9 +52,6 @@ import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.t
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborPeerGroupConfig;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.blueprint.container.BlueprintContainer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -65,25 +66,43 @@ public final class BGPClusterSingletonService implements ClusterSingletonService
     @GuardedBy("this")
     private final Map<String, List<PeerBean>> peersGroups = new HashMap<>();
     private final BGPTableTypeRegistryConsumer tableTypeRegistry;
-    private final BlueprintContainer container;
-    private final BundleContext bundleContext;
     private final ServiceGroupIdentifier serviceGroupIdentifier;
     private final AtomicBoolean instantiated = new AtomicBoolean(false);
     private final PeerGroupConfigLoader peerGroupLoader;
     private RibImpl ribImpl;
+    private final RIBExtensionConsumerContext ribExtensionContext;
+    private final BGPDispatcher dispatcher;
+    private final BGPRibRoutingPolicyFactory policyFactory;
+    private final BindingCodecTreeFactory codecFactory;
+    private final DOMDataBroker domBroker;
+    private final DataBroker dataBroker;
+    private final DOMSchemaService schemaService;
+    private final RpcProviderRegistry rpcRegistry;
 
     BGPClusterSingletonService(
             @Nonnull final PeerGroupConfigLoader peerGroupLoader,
             @Nonnull final ClusterSingletonServiceProvider provider,
             @Nonnull final BGPTableTypeRegistryConsumer tableTypeRegistry,
-            @Nonnull final BlueprintContainer container,
-            @Nonnull final BundleContext bundleContext,
-            @Nonnull final InstanceIdentifier<Bgp> bgpIid) {
+            @Nonnull final InstanceIdentifier<Bgp> bgpIid,
+            @Nonnull final RIBExtensionConsumerContext ribExtensionContext,
+            @Nonnull final BGPDispatcher dispatcher,
+            @Nonnull final BGPRibRoutingPolicyFactory policyFactory,
+            @Nonnull final BindingCodecTreeFactory codecFactory,
+            @Nonnull final DOMDataBroker domBroker,
+            @Nonnull final DataBroker dataBroker,
+            @Nonnull final DOMSchemaService schemaService,
+            @Nonnull final RpcProviderRegistry rpcRegistry) {
         this.peerGroupLoader = peerGroupLoader;
         this.tableTypeRegistry = tableTypeRegistry;
-        this.container = container;
-        this.bundleContext = bundleContext;
         this.bgpIid = bgpIid;
+        this.ribExtensionContext = ribExtensionContext;
+        this.dispatcher = dispatcher;
+        this.policyFactory = policyFactory;
+        this.codecFactory = codecFactory;
+        this.domBroker = domBroker;
+        this.dataBroker = dataBroker;
+        this.schemaService = schemaService;
+        this.rpcRegistry = rpcRegistry;
         final String ribInstanceName = getRibInstanceName(bgpIid);
         this.serviceGroupIdentifier = ServiceGroupIdentifier.create(ribInstanceName + "-service-group");
         LOG.info("BGPClusterSingletonService {} registered", this.serviceGroupIdentifier.getValue());
@@ -159,7 +178,8 @@ public final class BGPClusterSingletonService implements ClusterSingletonService
 
     private synchronized void onGlobalCreated(final Global global) {
         LOG.debug("Creating RIB instance with configuration: {}", global);
-        this.ribImpl = (RibImpl) this.container.getComponentInstance(InstanceType.RIB.getBeanName());
+        this.ribImpl = new RibImpl(ribExtensionContext, dispatcher, policyFactory, codecFactory, domBroker, dataBroker,
+                schemaService);
         initiateRibInstance(global, this.ribImpl);
         LOG.debug("RIB instance created: {}", this.ribImpl);
     }
@@ -190,7 +210,6 @@ public final class BGPClusterSingletonService implements ClusterSingletonService
     private synchronized void initiateRibInstance(final Global global, final RibImpl ribImpl) {
         final String ribInstanceName = getRibInstanceName(this.bgpIid);
         ribImpl.start(global, ribInstanceName, this.tableTypeRegistry);
-        registerRibInstance(ribImpl, ribInstanceName);
         if (this.instantiated.get()) {
             this.ribImpl.instantiateServiceInstance();
         }
@@ -210,14 +229,6 @@ public final class BGPClusterSingletonService implements ClusterSingletonService
         return filtered;
     }
 
-    private synchronized void registerRibInstance(final RibImpl ribImpl, final String ribInstanceName) {
-        final Dictionary<String, String> properties = new Hashtable<>();
-        properties.put(InstanceType.RIB.getBeanName(), ribInstanceName);
-        final ServiceRegistration<?> serviceRegistration = this.bundleContext.registerService(
-                InstanceType.RIB.getServices(), ribImpl, properties);
-        ribImpl.setServiceRegistration(serviceRegistration);
-    }
-
     @Override
     public void close() {
         LOG.info("BGPClusterSingletonService {} close", this.serviceGroupIdentifier.getValue());
@@ -258,9 +269,9 @@ public final class BGPClusterSingletonService implements ClusterSingletonService
         LOG.debug("Creating Peer instance with configuration: {}", neighbor);
         final PeerBean bgpPeer;
         if (OpenConfigMappingUtil.isApplicationPeer(neighbor)) {
-            bgpPeer = (PeerBean) this.container.getComponentInstance(InstanceType.APP_PEER.getBeanName());
+            bgpPeer = new AppPeer();
         } else {
-            bgpPeer = (PeerBean) this.container.getComponentInstance(InstanceType.PEER.getBeanName());
+            bgpPeer = new BgpPeer(this.rpcRegistry);
         }
         final InstanceIdentifier<Neighbor> neighborInstanceIdentifier =
                 getNeighborInstanceIdentifier(this.bgpIid, neighbor.key());
@@ -321,32 +332,10 @@ public final class BGPClusterSingletonService implements ClusterSingletonService
         closePeer(bgpPeer);
     }
 
-    private synchronized void registerPeerInstance(final BgpPeer bgpPeer, final String peerInstanceName) {
-        final Dictionary<String, String> properties = new Hashtable<>();
-        properties.put(InstanceType.PEER.getBeanName(), peerInstanceName);
-        final ServiceRegistration<?> serviceRegistration = this.bundleContext
-                .registerService(InstanceType.PEER.getServices(), bgpPeer, properties);
-        bgpPeer.setServiceRegistration(serviceRegistration);
-    }
-
-    private synchronized void registerAppPeerInstance(final AppPeer appPeer, final String peerInstanceName) {
-        final Dictionary<String, String> properties = new Hashtable<>();
-        properties.put(InstanceType.PEER.getBeanName(), peerInstanceName);
-        final ServiceRegistration<?> serviceRegistration = this.bundleContext
-                .registerService(InstanceType.APP_PEER.getServices(), appPeer, properties);
-        appPeer.setServiceRegistration(serviceRegistration);
-    }
-
     private synchronized void initiatePeerInstance(final InstanceIdentifier<Neighbor> neighborIdentifier,
             final Neighbor neighbor, final PeerBean bgpPeer) {
-        final String peerInstanceName = getNeighborInstanceName(neighborIdentifier);
         if (this.ribImpl != null) {
             bgpPeer.start(this.ribImpl, neighbor, this.bgpIid, this.peerGroupLoader, this.tableTypeRegistry);
-            if (bgpPeer instanceof BgpPeer) {
-                registerPeerInstance((BgpPeer) bgpPeer, peerInstanceName);
-            } else if (bgpPeer instanceof AppPeer) {
-                registerAppPeerInstance((AppPeer) bgpPeer, peerInstanceName);
-            }
         }
         if (this.instantiated.get()) {
             bgpPeer.instantiateServiceInstance();