Bump upstreams to 2022.09
[bgpcep.git] / bgp / openconfig-rp-statement / src / main / java / org / opendaylight / protocol / bgp / openconfig / routing / policy / statement / conditions / MatchAsPathSetHandler.java
index 2f86b475113d9485623bdfd0647037b1b29b1e33..0eecb6951857ed5883b7126a2f6e32454f3138f8 100644 (file)
@@ -5,26 +5,27 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.protocol.bgp.openconfig.routing.policy.statement.conditions;
 
 import static java.util.Objects.requireNonNull;
 
-import com.google.common.base.Optional;
 import com.google.common.cache.CacheBuilder;
 import com.google.common.cache.CacheLoader;
 import com.google.common.cache.LoadingCache;
+import com.google.common.util.concurrent.FluentFuture;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
+import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import org.apache.commons.lang3.StringUtils;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.ReadTransaction;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.RouteEntryBaseAttributes;
 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.policy.condition.BgpConditionsPolicy;
 import org.opendaylight.protocol.bgp.rib.spi.policy.BGPRouteEntryExportParameters;
@@ -35,23 +36,27 @@ import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.policy.rev15100
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.policy.rev151009.routing.policy.defined.sets.bgp.defined.sets.AsPathSets;
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.policy.rev151009.routing.policy.defined.sets.bgp.defined.sets.as.path.sets.AsPathSet;
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.policy.rev151009.routing.policy.defined.sets.bgp.defined.sets.as.path.sets.AsPathSetKey;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.AfiSafiType;
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.policy.types.rev151009.MatchSetOptionsType;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.routing.policy.rev151009.OpenconfigRoutingPolicyData;
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.routing.policy.rev151009.routing.policy.top.RoutingPolicy;
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.routing.policy.rev151009.routing.policy.top.routing.policy.DefinedSets;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.path.attributes.Attributes;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.path.attributes.attributes.AsPath;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.path.attributes.attributes.as.path.Segments;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.AsPathSegment;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.path.attributes.Attributes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.path.attributes.attributes.AsPath;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.path.attributes.attributes.as.path.Segments;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.AsPathSegment;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
 /**
  * Match a set of AS (All, ANY, INVERT).
  */
 public final class MatchAsPathSetHandler implements BgpConditionsPolicy<MatchAsPathSet, AsPath> {
-    private static final InstanceIdentifier<AsPathSets> AS_PATHS_SETS_IID
-            = InstanceIdentifier.create(RoutingPolicy.class).child(DefinedSets.class)
-            .augmentation(DefinedSets1.class).child(BgpDefinedSets.class)
+    private static final InstanceIdentifier<AsPathSets> AS_PATHS_SETS_IID =
+        InstanceIdentifier.builderOfInherited(OpenconfigRoutingPolicyData.class, RoutingPolicy.class).build()
+            .child(DefinedSets.class)
+            .augmentation(DefinedSets1.class)
+            .child(BgpDefinedSets.class)
             .child(AsPathSets.class);
     private final DataBroker dataBroker;
     private final LoadingCache<String, AsPathSet> sets = CacheBuilder.newBuilder()
@@ -67,32 +72,33 @@ public final class MatchAsPathSetHandler implements BgpConditionsPolicy<MatchAsP
     }
 
     private AsPathSet loadSets(final String key) throws ExecutionException, InterruptedException {
-        final ReadOnlyTransaction tr = this.dataBroker.newReadOnlyTransaction();
-        final Optional<AsPathSet> result = tr.read(LogicalDatastoreType.CONFIGURATION,
-                AS_PATHS_SETS_IID.child(AsPathSet.class, new AsPathSetKey(key))).get();
-        return result.orNull();
+        final FluentFuture<Optional<AsPathSet>> future;
+        try (ReadTransaction tr = dataBroker.newReadOnlyTransaction()) {
+            future = tr.read(LogicalDatastoreType.CONFIGURATION,
+                    AS_PATHS_SETS_IID.child(AsPathSet.class, new AsPathSetKey(key)));
+        }
+        return future.get().orElse(null);
     }
 
     @Override
     public boolean matchImportCondition(
+            final AfiSafiType afiSafi,
             final RouteEntryBaseAttributes routeEntryInfo,
             final BGPRouteEntryImportParameters routeEntryImportParameters,
             final AsPath asPath,
             final MatchAsPathSet conditions) {
-        return matchAsPathSetCondition(asPath, conditions.getAsPathSet(),
-                conditions.getMatchSetOptions());
+        return matchAsPathSetCondition(asPath, conditions.getAsPathSet(), conditions.getMatchSetOptions());
     }
 
 
     @Override
     public boolean matchExportCondition(
+            final AfiSafiType afiSafi,
             final RouteEntryBaseAttributes routeEntryInfo,
             final BGPRouteEntryExportParameters routeEntryExportParameters,
             final AsPath asPath,
             final MatchAsPathSet conditions) {
-        return matchAsPathSetCondition(asPath, conditions.getAsPathSet(),
-                conditions.getMatchSetOptions());
-
+        return matchAsPathSetCondition(asPath, conditions.getAsPathSet(), conditions.getMatchSetOptions());
     }
 
     @Override
@@ -100,13 +106,12 @@ public final class MatchAsPathSetHandler implements BgpConditionsPolicy<MatchAsP
         return attributes.getAsPath();
     }
 
-
     private boolean matchAsPathSetCondition(final AsPath asPath, final String asPathSetName,
             final MatchSetOptionsType matchSetOptions) {
         if (asPath == null) {
             return false;
         }
-        final AsPathSet asPathSetFilter = this.sets.getUnchecked(StringUtils
+        final AsPathSet asPathSetFilter = sets.getUnchecked(StringUtils
                 .substringBetween(asPathSetName, "=\"", "\""));
 
         final List<Segments> segments = asPath.getSegments();
@@ -130,7 +135,7 @@ public final class MatchAsPathSetHandler implements BgpConditionsPolicy<MatchAsP
 
         List<AsNumber> allAs = Stream.of(l1, l2).flatMap(Collection::stream).collect(Collectors.toList());
 
-        final List<AsNumber> asPathSetFilterList = asPathSetFilter.getAsPathSetMember();
+        final Set<AsNumber> asPathSetFilterList = asPathSetFilter.getAsPathSetMember();
         if (matchSetOptions.equals(MatchSetOptionsType.ALL)) {
             return allAs.containsAll(asPathSetFilterList)
                     && asPathSetFilterList.containsAll(allAs);
@@ -142,4 +147,4 @@ public final class MatchAsPathSetHandler implements BgpConditionsPolicy<MatchAsP
         //(matchSetOptions.equals(MatchSetOptionsType.INVERT))
         return noneInCommon;
     }
-}
\ No newline at end of file
+}