Move RibSupportUtils
[bgpcep.git] / bgp / rib-impl / src / main / java / org / opendaylight / protocol / bgp / rib / impl / AdjRibOutListener.java
index d033e4f13160b65f16cf9033565240078107d967..3de8380761cca78083eaa17b4401f0177a9eb6e0 100644 (file)
@@ -14,6 +14,7 @@ import static org.opendaylight.protocol.bgp.rib.spi.RIBNodeIdentifiers.TABLES_NI
 
 import java.util.Collection;
 import java.util.Collections;
+import java.util.List;
 import java.util.concurrent.atomic.LongAdder;
 import java.util.stream.Collectors;
 import org.eclipse.jdt.annotation.NonNull;
@@ -26,7 +27,6 @@ import org.opendaylight.protocol.bgp.rib.impl.spi.CodecsRegistry;
 import org.opendaylight.protocol.bgp.rib.impl.state.peer.PrefixesSentCounters;
 import org.opendaylight.protocol.bgp.rib.spi.IdentifierUtils;
 import org.opendaylight.protocol.bgp.rib.spi.RIBSupport;
-import org.opendaylight.protocol.bgp.rib.spi.RibSupportUtils;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev180329.ipv4.routes.ipv4.routes.Ipv4Route;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.PathId;
@@ -45,8 +45,8 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodes;
-import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate;
-import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
+import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate;
+import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidateNode;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -64,6 +64,7 @@ final class AdjRibOutListener implements ClusteredDOMDataTreeChangeListener, Pre
     private final ChannelOutputLimiter session;
     private final Codecs codecs;
     private final RIBSupport<?, ?> support;
+    // FIXME: this field needs to be eliminated: either subclass this class or create a filtering ribsupport
     private final boolean mpSupport;
     private final ListenerRegistration<AdjRibOutListener> registerDataTreeChangeListener;
     private final LongAdder prefixesSentCounter = new LongAdder();
@@ -108,7 +109,7 @@ final class AdjRibOutListener implements ClusteredDOMDataTreeChangeListener, Pre
     }
 
     @Override
-    public void onDataTreeChanged(final Collection<DataTreeCandidate> changes) {
+    public void onDataTreeChanged(final List<DataTreeCandidate> changes) {
         LOG.debug("Data change received for AdjRibOut {}", changes);
         for (final DataTreeCandidate tc : changes) {
             LOG.trace("Change {} type {}", tc.getRootNode(), tc.getRootNode().getModificationType());
@@ -135,13 +136,13 @@ final class AdjRibOutListener implements ClusteredDOMDataTreeChangeListener, Pre
             case DELETE:
             case DISAPPEARED:
                 // FIXME: we can batch deletions into a single batch
-                update = withdraw((MapEntryNode) route.getDataBefore().get());
+                update = withdraw((MapEntryNode) route.getDataBefore().orElseThrow());
                 LOG.debug("Withdrawing routes {}", update);
                 break;
             case APPEARED:
             case SUBTREE_MODIFIED:
             case WRITE:
-                update = advertise((MapEntryNode) route.getDataAfter().get());
+                update = advertise((MapEntryNode) route.getDataAfter().orElseThrow());
                 LOG.debug("Advertising routes {}", update);
                 break;
             default:
@@ -161,18 +162,16 @@ final class AdjRibOutListener implements ClusteredDOMDataTreeChangeListener, Pre
     }
 
     private Update withdraw(final MapEntryNode route) {
-        if (!mpSupport) {
-            return buildUpdate(Collections.emptyList(), Collections.singleton(route), routeAttributes(route));
-        }
-        return support.buildUpdate(Collections.emptyList(), Collections.singleton(route), routeAttributes(route));
+        return mpSupport
+            ? support.buildUpdate(Collections.emptyList(), Collections.singleton(route), routeAttributes(route))
+                : buildUpdate(Collections.emptyList(), Collections.singleton(route), routeAttributes(route));
     }
 
     private Update advertise(final MapEntryNode route) {
         prefixesSentCounter.increment();
-        if (!mpSupport) {
-            return buildUpdate(Collections.singleton(route), Collections.emptyList(), routeAttributes(route));
-        }
-        return support.buildUpdate(Collections.singleton(route), Collections.emptyList(), routeAttributes(route));
+        return mpSupport
+            ? support.buildUpdate(Collections.singleton(route), Collections.emptyList(), routeAttributes(route))
+                : buildUpdate(Collections.singleton(route), Collections.emptyList(), routeAttributes(route));
     }
 
     private static Update buildUpdate(