Remove blueprint from bgp-openconfig-rp-statement 84/93684/2
authorRobert Varga <robert.varga@pantheon.tech>
Sun, 8 Nov 2020 15:35:17 +0000 (16:35 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Sun, 8 Nov 2020 16:29:20 +0000 (17:29 +0100)
This is a rather straightforward conversion, also add @Singleton
as appropriate.

JIRA: BGPCEP-938
Change-Id: Ibc5d4af8cf88a05f615a7c50a9a8c115b8c2e058
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
bgp/openconfig-rp-statement/pom.xml
bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/AbstractCommunityHandler.java
bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/OSGiStatementActivator.java [new file with mode: 0644]
bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/StatementActivator.java
bgp/openconfig-rp-statement/src/main/resources/OSGI-INF/blueprint/bgp-openconfig-routing-policy-statement.xml [deleted file]

index 12ba52d2b836aab67e3e92b1da27e919a9ea2948..4267d5bc1a31e037469893742271d73bf3b34a89 100644 (file)
             <groupId>org.kohsuke.metainf-services</groupId>
             <artifactId>metainf-services</artifactId>
         </dependency>
+        <dependency>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+            <scope>provided</scope>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>osgi.cmpn</artifactId>
+        </dependency>
 
         <!-- Test dependencies -->
         <dependency>
index b993c475b3c473ddd755b17ad4a1c90acc937ac8..bd7f9a618f0b535d40f7881d2116e457761df6a7 100644 (file)
@@ -12,8 +12,7 @@ import static java.util.Objects.requireNonNull;
 import com.google.common.cache.CacheBuilder;
 import com.google.common.cache.CacheLoader;
 import com.google.common.cache.LoadingCache;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-import java.util.Collections;
+import com.google.common.util.concurrent.FluentFuture;
 import java.util.List;
 import java.util.Optional;
 import java.util.concurrent.ExecutionException;
@@ -37,34 +36,28 @@ public class AbstractCommunityHandler {
             = InstanceIdentifier.create(RoutingPolicy.class).child(DefinedSets.class)
             .augmentation(DefinedSets1.class).child(BgpDefinedSets.class)
             .child(CommunitySets.class);
-    private final DataBroker databroker;
-    protected final LoadingCache<String, List<Communities>> communitySets = CacheBuilder.newBuilder()
+    protected final LoadingCache<String, List<Communities>> communitySets;
+
+    public AbstractCommunityHandler(final DataBroker dataBroker) {
+        requireNonNull(dataBroker);
+        communitySets = CacheBuilder.newBuilder()
             .build(new CacheLoader<String, List<Communities>>() {
                 @Override
                 public List<Communities> load(final String key) throws ExecutionException, InterruptedException {
-                    return loadCommunitySet(key);
+                    final FluentFuture<Optional<CommunitySet>> future;
+                    try (ReadTransaction tr = dataBroker.newReadOnlyTransaction()) {
+                        future = tr.read(LogicalDatastoreType.CONFIGURATION,
+                            COMMUNITY_SETS_IID.child(CommunitySet.class, new CommunitySetKey(key)));
+                    }
+
+                    return future.get().map(set -> set.nonnullCommunities().stream()
+                        .map(ge -> new CommunitiesBuilder()
+                            .setAsNumber(ge.getAsNumber())
+                            .setSemantics(ge.getSemantics())
+                            .build())
+                        .collect(Collectors.toUnmodifiableList()))
+                        .orElse(List.of());
                 }
             });
-
-    public AbstractCommunityHandler(final DataBroker dataBroker) {
-        this.databroker = requireNonNull(dataBroker);
-    }
-
-    @SuppressFBWarnings(value = "UPM_UNCALLED_PRIVATE_METHOD",
-            justification = "https://github.com/spotbugs/spotbugs/issues/811")
-    private List<Communities> loadCommunitySet(final String key) throws ExecutionException, InterruptedException {
-        final ReadTransaction tr = this.databroker.newReadOnlyTransaction();
-        final Optional<CommunitySet> result =
-                tr.read(LogicalDatastoreType.CONFIGURATION, COMMUNITY_SETS_IID
-                        .child(CommunitySet.class, new CommunitySetKey(key))).get();
-
-
-        if (!result.isPresent()) {
-            return Collections.emptyList();
-        }
-
-        return result.get().getCommunities()
-                .stream().map(ge -> new CommunitiesBuilder().setAsNumber(ge.getAsNumber())
-                        .setSemantics(ge.getSemantics()).build()).collect(Collectors.toList());
     }
 }
diff --git a/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/OSGiStatementActivator.java b/bgp/openconfig-rp-statement/src/main/java/org/opendaylight/protocol/bgp/openconfig/routing/policy/statement/OSGiStatementActivator.java
new file mode 100644 (file)
index 0000000..cce449c
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * 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;
+
+import static com.google.common.base.Verify.verifyNotNull;
+
+import java.util.List;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.registry.AbstractBGPStatementProviderActivator;
+import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.registry.StatementProviderActivator;
+import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.registry.StatementRegistryProvider;
+import org.opendaylight.yangtools.concepts.Registration;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
+
+@Component(immediate = true, service = StatementProviderActivator.class,
+           property = "type=org.opendaylight.protocol.bgp.openconfig.routing.policy.statement.StatementActivator")
+public final class OSGiStatementActivator extends AbstractBGPStatementProviderActivator {
+    @Reference
+    DataBroker dataBroker;
+
+    private StatementActivator delegate;
+
+    @Override
+    protected List<? extends Registration> startImpl(final StatementRegistryProvider context) {
+        return verifyNotNull(delegate).startImpl(context);
+    }
+
+    @Activate
+    void activate() {
+        delegate = new StatementActivator(dataBroker);
+    }
+
+    @Deactivate
+    void deactivate() {
+        delegate = null;
+    }
+}
index e4395206304e8ea4d82d8dc1d211dbe43dc6bcac..69b7325357ece5642180a600367b6a35a47e3a2a 100644 (file)
@@ -9,8 +9,11 @@ package org.opendaylight.protocol.bgp.openconfig.routing.policy.statement;
 
 import static java.util.Objects.requireNonNull;
 
-import java.util.ArrayList;
+import com.google.common.base.MoreObjects;
 import java.util.List;
+import java.util.ServiceLoader;
+import javax.inject.Inject;
+import javax.inject.Singleton;
 import org.kohsuke.MetaInfServices;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.registry.AbstractBGPStatementProviderActivator;
@@ -50,71 +53,58 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odl.bgp.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odl.bgp._default.policy.rev200120.VpnNonMemberCondition;
 import org.opendaylight.yangtools.concepts.Registration;
 
+@Singleton
 @MetaInfServices(value = StatementProviderActivator.class)
 public final class StatementActivator extends AbstractBGPStatementProviderActivator {
     private final DataBroker dataBroker;
 
-    // FIXME: this needs to be properly injected
+    public StatementActivator() {
+        this(ServiceLoader.load(DataBroker.class).findFirst().orElseThrow(
+            () -> new IllegalStateException("No DataBroker found")));
+    }
+
+    @Inject
     public StatementActivator(final DataBroker dataBroker) {
         this.dataBroker = requireNonNull(dataBroker);
     }
 
     @Override
-    protected synchronized List<Registration> startImpl(final StatementRegistryProvider provider) {
-        final List<Registration> registration = new ArrayList<>(14);
-        registerActions(provider, registration);
-        registerConditions(provider, registration);
-        return registration;
-    }
-
-    private void registerConditions(final StatementRegistryProvider provider, final List<Registration> registration) {
-        registration.add(provider.registerBgpConditionsAugmentationPolicy(MatchRoleSetCondition.class,
-                new MatchRoleSetHandler(this.dataBroker)));
-
-        registration.add(provider.registerBgpConditionsAugmentationPolicy(MatchOriginatorIdSetCondition.class,
-                new MatchOriginatorIdSetHandler(this.dataBroker)));
-
-        registration.add(provider.registerBgpConditionsAugmentationPolicy(MatchClusterIdSetCondition.class,
-                new MatchClusterIdSetHandler(this.dataBroker)));
-
-        registration.add(provider.registerBgpConditionsPolicy(MatchAsPathSet.class,
-                new MatchAsPathSetHandler(this.dataBroker)));
-
-        registration.add(provider.registerBgpConditionsPolicy(MatchExtCommunitySet.class,
-                new MatchExtCommunitySetHandler(this.dataBroker)));
-
-        registration.add(provider.registerBgpConditionsPolicy(MatchCommunitySet.class,
-                new MatchCommunitySetHandler(this.dataBroker)));
-
-        registration.add(provider.registerBgpConditionsAugmentationPolicy(MatchBgpNeighborCondition.class,
-                new MatchBgpNeighborSetHandler(this.dataBroker)));
-
-        registration.add(provider.registerBgpConditionsAugmentationPolicy(MatchAfiSafiNotInCondition.class,
-                MatchAfiSafiNotInHandler.getInstance()));
-
-        registration.add(provider.registerBgpConditionsAugmentationPolicy(VpnNonMemberCondition.class,
+    protected synchronized List<Registration> startImpl(final StatementRegistryProvider context) {
+        return List.of(
+            // Register actions
+            context.registerBgpActionPolicy(SetAsPathPrepend.class, AsPathPrepend.getInstance()),
+            context.registerBgpActionAugmentationPolicy(LocalAsPathPrepend.class,
+                LocalAsPathPrependHandler.getInstance()),
+            context.registerBgpActionPolicy(SetCommunity.class, new SetCommunityHandler(dataBroker)),
+            context.registerBgpActionPolicy(SetExtCommunity.class, new SetExtCommunityHandler(dataBroker)),
+            context.registerBgpActionAugmentationPolicy(SetOriginatorIdPrepend.class,
+                SetOriginatorIdPrependHandler.getInstance()),
+            context.registerBgpActionAugmentationPolicy(NonTransitiveAttributesFilter.class,
+                NonTransitiveAttributesFilterHandler.getInstance()),
+            context.registerBgpActionAugmentationPolicy(SetClusterIdPrepend.class,
+                SetClusterIdPrependHandler.getInstance()),
+
+            // Register conditions
+            context.registerBgpConditionsAugmentationPolicy(MatchRoleSetCondition.class,
+                new MatchRoleSetHandler(dataBroker)),
+            context.registerBgpConditionsAugmentationPolicy(MatchOriginatorIdSetCondition.class,
+                new MatchOriginatorIdSetHandler(dataBroker)),
+            context.registerBgpConditionsAugmentationPolicy(MatchClusterIdSetCondition.class,
+                new MatchClusterIdSetHandler(dataBroker)),
+            context.registerBgpConditionsPolicy(MatchAsPathSet.class, new MatchAsPathSetHandler(dataBroker)),
+            context.registerBgpConditionsPolicy(MatchExtCommunitySet.class,
+                new MatchExtCommunitySetHandler(dataBroker)),
+            context.registerBgpConditionsPolicy(MatchCommunitySet.class, new MatchCommunitySetHandler(dataBroker)),
+            context.registerBgpConditionsAugmentationPolicy(MatchBgpNeighborCondition.class,
+                new MatchBgpNeighborSetHandler(dataBroker)),
+            context.registerBgpConditionsAugmentationPolicy(MatchAfiSafiNotInCondition.class,
+                MatchAfiSafiNotInHandler.getInstance()),
+            context.registerBgpConditionsAugmentationPolicy(VpnNonMemberCondition.class,
                 VpnNonMemberHandler.getInstance()));
     }
 
-    private void registerActions(final StatementRegistryProvider provider, final List<Registration> registration) {
-        registration.add(provider.registerBgpActionPolicy(SetAsPathPrepend.class, AsPathPrepend.getInstance()));
-
-        registration.add(provider.registerBgpActionAugmentationPolicy(LocalAsPathPrepend.class,
-                LocalAsPathPrependHandler.getInstance()));
-
-        registration.add(provider.registerBgpActionPolicy(SetCommunity.class,
-                new SetCommunityHandler(this.dataBroker)));
-
-        registration.add(provider.registerBgpActionPolicy(SetExtCommunity.class,
-                new SetExtCommunityHandler(this.dataBroker)));
-
-        registration.add(provider.registerBgpActionAugmentationPolicy(SetOriginatorIdPrepend.class,
-                SetOriginatorIdPrependHandler.getInstance()));
-
-        registration.add(provider.registerBgpActionAugmentationPolicy(NonTransitiveAttributesFilter.class,
-                NonTransitiveAttributesFilterHandler.getInstance()));
-
-        registration.add(provider.registerBgpActionAugmentationPolicy(SetClusterIdPrepend.class,
-                SetClusterIdPrependHandler.getInstance()));
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this).add("dataBroker", dataBroker).toString();
     }
 }
diff --git a/bgp/openconfig-rp-statement/src/main/resources/OSGI-INF/blueprint/bgp-openconfig-routing-policy-statement.xml b/bgp/openconfig-rp-statement/src/main/resources/OSGI-INF/blueprint/bgp-openconfig-routing-policy-statement.xml
deleted file mode 100644 (file)
index 743aa62..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0">
-
-    <reference id="dataBroker" interface="org.opendaylight.mdsal.binding.api.DataBroker"/>
-    <bean id="StatementActivator"
-          class="org.opendaylight.protocol.bgp.openconfig.routing.policy.statement.StatementActivator">
-        <argument ref="dataBroker"/>
-    </bean>
-
-    <service ref="StatementActivator"
-             interface="org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.registry.StatementProviderActivator"
-             odl:type="org.opendaylight.protocol.bgp.openconfig.routing.policy.statement.StatementActivator"/>  
-</blueprint>