<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>
@NonNullByDefault
public interface BmpExtensionProviderActivator {
- List<Registration> start(BmpExtensionProviderContext context);
+ List<? extends Registration> start(BmpExtensionProviderContext context);
}
--- /dev/null
+/*
+ * 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();
+ }
+}
+++ /dev/null
-/*
- * 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;
- }
-}
+++ /dev/null
-<?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