Convert bmp-spi to OSGi DS 90/96690/2
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 28 Jun 2021 09:17:40 +0000 (11:17 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 28 Jun 2021 09:19:17 +0000 (11:19 +0200)
Follow the same pattern as we've done in bgp-parser-spi, ditching yet
another BluePrint container.

JIRA: BGPCEP-950
Change-Id: I9a787edf34fe9a6fb667b2f7f63d583f387a2a37
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
bmp/bmp-spi/pom.xml
bmp/bmp-spi/src/main/java/org/opendaylight/protocol/bmp/spi/registry/BmpExtensionProviderActivator.java
bmp/bmp-spi/src/main/java/org/opendaylight/protocol/bmp/spi/registry/DefaultBmpExtensionConsumerContext.java [new file with mode: 0644]
bmp/bmp-spi/src/main/java/org/opendaylight/protocol/bmp/spi/registry/SimpleBmpExtensionProviderContextActivator.java [deleted file]
bmp/bmp-spi/src/main/resources/OSGI-INF/blueprint/bgp-bmp-spi.xml [deleted file]

index cde5a6a3e1ed37d6e4827c37f9d15c94a88f69d4..e139f2605a8d1bb4f01dfd32a0f2086ea98cc897 100644 (file)
             <groupId>org.opendaylight.mdsal</groupId>
             <artifactId>yang-binding</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>osgi.cmpn</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.guicedee.services</groupId>
+            <artifactId>javax.inject</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.kohsuke.metainf-services</groupId>
+            <artifactId>metainf-services</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>mockito-configuration</artifactId>
index c7b5e08803ffddd5e88bd48cfede322e39a1e17e..36130dc225f6ecdbe899f34303577ef34162031d 100644 (file)
@@ -14,5 +14,5 @@ import org.opendaylight.yangtools.concepts.Registration;
 @NonNullByDefault
 public interface BmpExtensionProviderActivator {
 
-    List<Registration> start(BmpExtensionProviderContext context);
+    List<? extends Registration> start(BmpExtensionProviderContext context);
 }
diff --git a/bmp/bmp-spi/src/main/java/org/opendaylight/protocol/bmp/spi/registry/DefaultBmpExtensionConsumerContext.java b/bmp/bmp-spi/src/main/java/org/opendaylight/protocol/bmp/spi/registry/DefaultBmpExtensionConsumerContext.java
new file mode 100644 (file)
index 0000000..0662898
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2021 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.bmp.spi.registry;
+
+import com.google.common.annotations.VisibleForTesting;
+import java.util.Arrays;
+import java.util.List;
+import java.util.ServiceLoader;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+import org.eclipse.jdt.annotation.NonNull;
+import org.kohsuke.MetaInfServices;
+import org.opendaylight.protocol.bmp.spi.parser.BmpTlvRegistry;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferencePolicyOption;
+
+@Singleton
+@Component(immediate = true, service = BmpExtensionConsumerContext.class)
+@MetaInfServices
+public final class DefaultBmpExtensionConsumerContext implements BmpExtensionConsumerContext {
+    private final @NonNull SimpleBmpExtensionProviderContext delegate = new SimpleBmpExtensionProviderContext();
+
+    public DefaultBmpExtensionConsumerContext() {
+        this(ServiceLoader.load(BmpExtensionProviderActivator.class));
+    }
+
+    @VisibleForTesting
+    public DefaultBmpExtensionConsumerContext(final BmpExtensionProviderActivator... extensionActivators) {
+        this(Arrays.asList(extensionActivators));
+    }
+
+    @Inject
+    public DefaultBmpExtensionConsumerContext(final Iterable<BmpExtensionProviderActivator> extensionActivators) {
+        extensionActivators.forEach(activator -> activator.start(delegate));
+    }
+
+    @Activate
+    public DefaultBmpExtensionConsumerContext(final @Reference(policyOption = ReferencePolicyOption.GREEDY)
+            List<BmpExtensionProviderActivator> extensionActivators) {
+        extensionActivators.forEach(activator -> activator.start(delegate));
+    }
+
+    @Override
+    public BmpMessageRegistry getBmpMessageRegistry() {
+        return delegate.getBmpMessageRegistry();
+    }
+
+    @Override
+    public BmpTlvRegistry getBmpStatisticsTlvRegistry() {
+        return delegate.getBmpStatisticsTlvRegistry();
+    }
+
+    @Override
+    public BmpTlvRegistry getBmpInitiationTlvRegistry() {
+        return delegate.getBmpInitiationTlvRegistry();
+    }
+
+    @Override
+    public BmpTlvRegistry getBmpPeerUpTlvRegistry() {
+        return delegate.getBmpPeerUpTlvRegistry();
+    }
+
+    @Override
+    public BmpTlvRegistry getBmpTerminationTlvRegistry() {
+        return delegate.getBmpTerminationTlvRegistry();
+    }
+
+    @Override
+    public BmpTlvRegistry getBmpRouteMirroringTlvRegistry() {
+        return delegate.getBmpRouteMirroringTlvRegistry();
+    }
+}
diff --git a/bmp/bmp-spi/src/main/java/org/opendaylight/protocol/bmp/spi/registry/SimpleBmpExtensionProviderContextActivator.java b/bmp/bmp-spi/src/main/java/org/opendaylight/protocol/bmp/spi/registry/SimpleBmpExtensionProviderContextActivator.java
deleted file mode 100644 (file)
index 558ecd9..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2016 Brocade Communications Systems, Inc. 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.bmp.spi.registry;
-
-import static java.util.Objects.requireNonNull;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.opendaylight.yangtools.concepts.Registration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Starts and stops BmpExtensionProviderActivator instances for a BmpExtensionProviderContext.
- *
- * @author Thomas Pantelis
- */
-public class SimpleBmpExtensionProviderContextActivator implements AutoCloseable {
-    private static final Logger LOG = LoggerFactory.getLogger(SimpleBmpExtensionProviderContextActivator.class);
-
-    private final BmpExtensionProviderContext providerContext;
-    private final List<BmpExtensionProviderActivator> extensionActivators;
-
-    private List<Registration> regs;
-
-    public SimpleBmpExtensionProviderContextActivator(final BmpExtensionProviderContext providerContext,
-            final List<BmpExtensionProviderActivator> extensionActivators) {
-        this.providerContext = requireNonNull(providerContext);
-        this.extensionActivators = requireNonNull(extensionActivators);
-    }
-
-    public void start() {
-        LOG.debug("Starting {} BmpExtensionProviderActivator instances", extensionActivators.size());
-
-        final List<Registration> tmp = new ArrayList<>();
-        for (BmpExtensionProviderActivator act : extensionActivators) {
-            tmp.addAll(act.start(providerContext));
-        }
-        regs = List.copyOf(tmp);
-    }
-
-    @Override
-    public void close() {
-        LOG.debug("Stopping {} BmpExtensionProviderActivator instances", this.extensionActivators.size());
-        regs.forEach(Registration::close);
-        regs = null;
-    }
-}
diff --git a/bmp/bmp-spi/src/main/resources/OSGI-INF/blueprint/bgp-bmp-spi.xml b/bmp/bmp-spi/src/main/resources/OSGI-INF/blueprint/bgp-bmp-spi.xml
deleted file mode 100644 (file)
index a7ea0a7..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Copyright (c) 2016 Brocade Communications Systems, Inc. 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
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0">
-
-  <!-- Obtains the specific list of BmpExtensionProviderActivator OSGi services announced via
-       META-INF/services/org.opendaylight.protocol.bmp.spi.registry.BmpExtensionProviderActivator resources.
-  -->
-  <odl:specific-reference-list id="extensionActivators" interface="org.opendaylight.protocol.bmp.spi.registry.BmpExtensionProviderActivator"/>
-
-  <bean id="extensionProviderContext" class="org.opendaylight.protocol.bmp.spi.registry.SimpleBmpExtensionProviderContext"/>
-
-  <bean id="extensionProviderContextActivator" class="org.opendaylight.protocol.bmp.spi.registry.SimpleBmpExtensionProviderContextActivator"
-      init-method="start" destroy-method="close">
-    <argument ref="extensionProviderContext"/>
-    <argument ref="extensionActivators"/>
-  </bean>
-
-  <service ref="extensionProviderContext">
-    <interfaces>
-      <value>org.opendaylight.protocol.bmp.spi.registry.BmpExtensionProviderContext</value>
-      <value>org.opendaylight.protocol.bmp.spi.registry.BmpExtensionConsumerContext</value>
-    </interfaces>
-  </service>
-</blueprint>
\ No newline at end of file