Refactor AbstractPeer initialization
[bgpcep.git] / bgp / rib-impl / src / main / java / org / opendaylight / protocol / bgp / rib / impl / ApplicationPeer.java
index f55b10a5ddd3185badbc70502e9cd2636980a98c..1c530731be163f091ac7f0d03ffc61d2172e8ef8 100644 (file)
@@ -76,6 +76,14 @@ import org.slf4j.LoggerFactory;
  * peer needs to have a BGP-ID that is configurable.
  */
 public class ApplicationPeer extends AbstractPeer implements DOMDataTreeChangeListener {
+    @FunctionalInterface
+    interface RegisterAppPeerListener {
+        /**
+         * Register Application Peer Change Listener once AdjRibIn has been successfully initialized.
+         */
+        void register();
+    }
+
     private static final Logger LOG = LoggerFactory.getLogger(ApplicationPeer.class);
     private static final String APP_PEER_GROUP = "application-peers";
 
@@ -98,32 +106,19 @@ public class ApplicationPeer extends AbstractPeer implements DOMDataTreeChangeLi
     private Registration trackerRegistration;
     private YangInstanceIdentifier peerPath;
 
-    @Override
-    public List<RouteTarget> getMemberships() {
-        return List.of();
-    }
-
-    @FunctionalInterface
-    interface RegisterAppPeerListener {
-        /**
-         * Register Application Peer Change Listener once AdjRibIn has been successfully initialized.
-         */
-        void register();
-    }
-
     public ApplicationPeer(
             final BGPTableTypeRegistryConsumer tableTypeRegistry,
             final ApplicationRibId applicationRibId, final Ipv4AddressNoZone ipAddress, final RIB rib) {
-        super(rib, applicationRibId.getValue(), APP_PEER_GROUP, PeerRole.Internal,
-                new IpAddressNoZone(ipAddress), Set.of());
+        super(rib, applicationRibId.getValue(), APP_PEER_GROUP, PeerRole.Internal, null, null,
+            new IpAddressNoZone(ipAddress), rib.getLocalTablesKeys(), Set.of(), Map.of());
         this.tableTypeRegistry = requireNonNull(tableTypeRegistry);
-        final RIB targetRib = requireNonNull(rib);
         peerId = RouterIds.createPeerId(ipAddress);
 
-        final YangInstanceIdentifier peerRib = targetRib.getYangRibId().node(PEER_NID)
-            .node(IdentifierUtils.domPeerId(peerId));
+        final var peerRib = rib.getYangRibId().node(PEER_NID).node(IdentifierUtils.domPeerId(peerId));
         adjRibsInId = peerRib.node(ADJRIBIN_NID).node(TABLES_NID).toOptimized();
         peerRibOutIId = peerRib.node(ADJRIBOUT_NID).node(TABLES_NID).toOptimized();
+
+        createDomChain();
     }
 
     public synchronized void instantiateServiceInstance(final DataTreeChangeExtension dataTreeChangeService,
@@ -163,6 +158,11 @@ public class ApplicationPeer extends AbstractPeer implements DOMDataTreeChangeLi
         trackerRegistration = rib.getPeerTracker().registerPeer(this);
     }
 
+    @Override
+    public List<RouteTarget> getMemberships() {
+        return List.of();
+    }
+
     @Override
     public void onInitialData() {
         // FIXME: we really want to (under a synchronized block) to ensure adj-rib-in is completely empty here.