Migrate bgp-rib-impl to OSGi DS
[bgpcep.git] / bgp / rib-impl / src / main / java / org / opendaylight / protocol / bgp / rib / impl / config / RibImpl.java
index f086b8f3a27de1dcc7c066ec01130e37b83f38f7..18d9e1552d507cdd78d74c6d0d8bcb5e04d102be 100644 (file)
@@ -13,24 +13,18 @@ import static org.opendaylight.protocol.bgp.rib.impl.config.OpenConfigMappingUti
 
 import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.FluentFuture;
-import java.util.List;
+import java.util.Collection;
 import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
-import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.TransactionChain;
-import org.opendaylight.mdsal.binding.api.TransactionChainListener;
-import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
-import org.opendaylight.mdsal.dom.api.DOMSchemaService;
 import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
 import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener;
 import org.opendaylight.protocol.bgp.mode.api.PathSelectionMode;
 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.CodecsRegistryImpl;
 import org.opendaylight.protocol.bgp.rib.impl.RIBImpl;
 import org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher;
 import org.opendaylight.protocol.bgp.rib.impl.spi.CodecsRegistry;
@@ -45,20 +39,19 @@ import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.r
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.global.base.Config;
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.Global;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.BgpTableType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.PeerId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.RibId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.bgp.rib.Rib;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.bgp.rib.RibKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.BgpId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.ClusterIdentifier;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.BgpId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.ClusterIdentifier;
 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
-import org.osgi.framework.ServiceRegistration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -68,35 +61,27 @@ public final class RibImpl implements RIB, BGPRibStateConsumer, AutoCloseable {
 
     private final RIBExtensionConsumerContext extensions;
     private final BGPDispatcher dispatcher;
-    private final BindingCodecTreeFactory codecTreeFactory;
+    private final CodecsRegistry codecsRegistry;
     private final DOMDataBroker domBroker;
-    private final DOMSchemaService domSchemaService;
     private final BGPRibRoutingPolicyFactory policyProvider;
     private RIBImpl ribImpl;
-    private ServiceRegistration<?> serviceRegistration;
-    private ListenerRegistration<SchemaContextListener> schemaContextRegistration;
-    private List<AfiSafi> afiSafi;
+    private Collection<AfiSafi> afiSafi;
     private AsNumber asNumber;
-    private Ipv4Address routerId;
+    private Ipv4AddressNoZone routerId;
 
     private ClusterIdentifier clusterId;
-    private final DataBroker dataBroker;
 
     public RibImpl(
             final RIBExtensionConsumerContext contextProvider,
             final BGPDispatcher dispatcher,
             final BGPRibRoutingPolicyFactory policyProvider,
-            final BindingCodecTreeFactory codecTreeFactory,
-            final DOMDataBroker domBroker,
-            final DataBroker dataBroker,
-            final DOMSchemaService domSchemaService
+            final CodecsRegistry codecsRegistry,
+            final DOMDataBroker domBroker
     ) {
         this.extensions = contextProvider;
         this.dispatcher = dispatcher;
-        this.codecTreeFactory = codecTreeFactory;
+        this.codecsRegistry = codecsRegistry;
         this.domBroker = domBroker;
-        this.dataBroker = dataBroker;
-        this.domSchemaService = domSchemaService;
         this.policyProvider = policyProvider;
     }
 
@@ -104,11 +89,10 @@ public final class RibImpl implements RIB, BGPRibStateConsumer, AutoCloseable {
         Preconditions.checkState(this.ribImpl == null,
                 "Previous instance %s was not closed.", this);
         this.ribImpl = createRib(global, instanceName, tableTypeRegistry);
-        this.schemaContextRegistration = this.domSchemaService.registerSchemaContextListener(this.ribImpl);
     }
 
     Boolean isGlobalEqual(final Global global) {
-        final List<AfiSafi> globalAfiSafi = getAfiSafiWithDefault(global.getAfiSafis(), true);
+        final Collection<AfiSafi> globalAfiSafi = getAfiSafiWithDefault(global.getAfiSafis(), true).values();
         final Config globalConfig = global.getConfig();
         final AsNumber globalAs = globalConfig.getAs();
         final Ipv4Address globalRouterId = global.getConfig().getRouterId();
@@ -149,11 +133,6 @@ public final class RibImpl implements RIB, BGPRibStateConsumer, AutoCloseable {
         return this.ribImpl.createPeerDOMChain(listener);
     }
 
-    @Override
-    public TransactionChain createPeerChain(final TransactionChainListener listener) {
-        return this.ribImpl.createPeerChain(listener);
-    }
-
     @Override
     public RIBExtensionConsumerContext getRibExtensions() {
         return this.ribImpl.getRibExtensions();
@@ -179,11 +158,6 @@ public final class RibImpl implements RIB, BGPRibStateConsumer, AutoCloseable {
         return this.ribImpl.getService();
     }
 
-    @Override
-    public DataBroker getDataBroker() {
-        return this.ribImpl.getDataBroker();
-    }
-
     FluentFuture<? extends CommitInfo> closeServiceInstance() {
         if (this.ribImpl != null) {
             return this.ribImpl.closeServiceInstance();
@@ -197,23 +171,8 @@ public final class RibImpl implements RIB, BGPRibStateConsumer, AutoCloseable {
             this.ribImpl.close();
             this.ribImpl = null;
         }
-        if (this.schemaContextRegistration != null) {
-            this.schemaContextRegistration.close();
-            this.schemaContextRegistration = null;
-        }
-        if (this.serviceRegistration != null) {
-            try {
-                this.serviceRegistration.unregister();
-            } catch (final IllegalStateException e) {
-                LOG.warn("Failed to unregister {} service instance", this, e);
-            }
-            this.serviceRegistration = null;
-        }
     }
 
-    void setServiceRegistration(final ServiceRegistration<?> serviceRegistration) {
-        this.serviceRegistration = serviceRegistration;
-    }
 
     @Override
     public Set<TablesKey> getLocalTablesKeys() {
@@ -244,10 +203,10 @@ public final class RibImpl implements RIB, BGPRibStateConsumer, AutoCloseable {
             final Global global,
             final String bgpInstanceName,
             final BGPTableTypeRegistryConsumer tableTypeRegistry) {
-        this.afiSafi = getAfiSafiWithDefault(global.getAfiSafis(), true);
+        this.afiSafi = getAfiSafiWithDefault(global.getAfiSafis(), true).values();
         final Config globalConfig = global.getConfig();
         this.asNumber = globalConfig.getAs();
-        this.routerId = globalConfig.getRouterId();
+        this.routerId = IetfInetUtil.INSTANCE.ipv4AddressNoZoneFor(globalConfig.getRouterId());
         this.clusterId = getGlobalClusterIdentifier(globalConfig);
         final Map<TablesKey, PathSelectionMode> pathSelectionModes = OpenConfigMappingUtil
                 .toPathSelectionMode(this.afiSafi, tableTypeRegistry).entrySet()
@@ -255,10 +214,8 @@ public final class RibImpl implements RIB, BGPRibStateConsumer, AutoCloseable {
                 .collect(Collectors.toMap(entry ->
                         new TablesKey(entry.getKey().getAfi(), entry.getKey().getSafi()), Map.Entry::getValue));
 
-        final BGPRibRoutingPolicy ribPolicy = this.policyProvider.buildBGPRibPolicy(this.asNumber.getValue(),
+        final BGPRibRoutingPolicy ribPolicy = this.policyProvider.buildBGPRibPolicy(this.asNumber.getValue().toJava(),
                 this.routerId, this.clusterId, RoutingPolicyUtil.getApplyPolicy(global.getApplyPolicy()));
-        final CodecsRegistryImpl codecsRegistry = CodecsRegistryImpl.create(codecTreeFactory,
-                this.extensions.getClassLoadingStrategy());
 
         return new RIBImpl(
                 tableTypeRegistry,
@@ -269,7 +226,6 @@ public final class RibImpl implements RIB, BGPRibStateConsumer, AutoCloseable {
                 this.dispatcher,
                 codecsRegistry,
                 this.domBroker,
-                this.dataBroker,
                 ribPolicy,
                 toTableTypes(this.afiSafi, tableTypeRegistry),
                 pathSelectionModes);