Use OSGi DS in bgp-parser-spi
[bgpcep.git] / bgp / parser-spi / src / main / java / org / opendaylight / protocol / bgp / parser / spi / pojo / DefaultBGPExtensionConsumerContext.java
1 /*
2  * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.protocol.bgp.parser.spi.pojo;
9
10 import com.google.common.annotations.VisibleForTesting;
11 import java.util.Arrays;
12 import java.util.List;
13 import java.util.ServiceLoader;
14 import javax.inject.Inject;
15 import javax.inject.Singleton;
16 import org.eclipse.jdt.annotation.NonNull;
17 import org.kohsuke.MetaInfServices;
18 import org.opendaylight.protocol.bgp.parser.spi.AddressFamilyRegistry;
19 import org.opendaylight.protocol.bgp.parser.spi.AttributeRegistry;
20 import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionConsumerContext;
21 import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionProviderActivator;
22 import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionProviderContext;
23 import org.opendaylight.protocol.bgp.parser.spi.BgpPrefixSidTlvRegistry;
24 import org.opendaylight.protocol.bgp.parser.spi.CapabilityRegistry;
25 import org.opendaylight.protocol.bgp.parser.spi.MessageRegistry;
26 import org.opendaylight.protocol.bgp.parser.spi.NlriRegistry;
27 import org.opendaylight.protocol.bgp.parser.spi.ParameterRegistry;
28 import org.opendaylight.protocol.bgp.parser.spi.SubsequentAddressFamilyRegistry;
29 import org.opendaylight.protocol.bgp.parser.spi.extended.community.ExtendedCommunityRegistry;
30 import org.osgi.service.component.annotations.Activate;
31 import org.osgi.service.component.annotations.Component;
32 import org.osgi.service.component.annotations.Reference;
33 import org.osgi.service.component.annotations.ReferencePolicyOption;
34
35 /**
36  * Starts and stops {@link BGPExtensionProviderActivator} instances for an {@link BGPExtensionProviderContext}.
37  */
38 @Singleton
39 @Component(immediate = true, service = BGPExtensionConsumerContext.class)
40 @MetaInfServices
41 public final class DefaultBGPExtensionConsumerContext implements BGPExtensionConsumerContext {
42     private final @NonNull SimpleBGPExtensionProviderContext delegate = new SimpleBGPExtensionProviderContext();
43
44     public DefaultBGPExtensionConsumerContext() {
45         this(ServiceLoader.load(BGPExtensionProviderActivator.class));
46     }
47
48     @VisibleForTesting
49     public DefaultBGPExtensionConsumerContext(final BGPExtensionProviderActivator... extensionActivators) {
50         this(Arrays.asList(extensionActivators));
51     }
52
53     @Inject
54     public DefaultBGPExtensionConsumerContext(final Iterable<BGPExtensionProviderActivator> extensionActivators) {
55         extensionActivators.forEach(activator -> activator.start(delegate));
56     }
57
58     @Activate
59     public DefaultBGPExtensionConsumerContext(final @Reference(policyOption = ReferencePolicyOption.GREEDY)
60             List<BGPExtensionProviderActivator> extensionActivators) {
61         extensionActivators.forEach(activator -> activator.start(delegate));
62     }
63
64     @Override
65     public AddressFamilyRegistry getAddressFamilyRegistry() {
66         return delegate.getAddressFamilyRegistry();
67     }
68
69     @Override
70     public AttributeRegistry getAttributeRegistry() {
71         return delegate.getAttributeRegistry();
72     }
73
74     @Override
75     public CapabilityRegistry getCapabilityRegistry() {
76         return delegate.getCapabilityRegistry();
77     }
78
79     @Override
80     public MessageRegistry getMessageRegistry() {
81         return delegate.getMessageRegistry();
82     }
83
84     @Override
85     public NlriRegistry getNlriRegistry() {
86         return delegate.getNlriRegistry();
87     }
88
89     @Override
90     public ParameterRegistry getParameterRegistry() {
91         return delegate.getParameterRegistry();
92     }
93
94     @Override
95     public SubsequentAddressFamilyRegistry getSubsequentAddressFamilyRegistry() {
96         return delegate.getSubsequentAddressFamilyRegistry();
97     }
98
99     @Override
100     public ExtendedCommunityRegistry getExtendedCommunityRegistry() {
101         return delegate.getExtendedCommunityRegistry();
102     }
103
104     @Override
105     public BgpPrefixSidTlvRegistry getBgpPrefixSidTlvRegistry() {
106         return delegate.getBgpPrefixSidTlvRegistry();
107     }
108 }