BUG-113: switch BGP to proper activators
[bgpcep.git] / bgp / parser-spi / src / main / java / org / opendaylight / protocol / bgp / parser / spi / pojo / BGPExtensionConsumerContextImpl.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. 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 java.util.ServiceLoader;
11
12 import org.opendaylight.protocol.bgp.parser.spi.AddressFamilyRegistry;
13 import org.opendaylight.protocol.bgp.parser.spi.AttributeParser;
14 import org.opendaylight.protocol.bgp.parser.spi.AttributeRegistry;
15 import org.opendaylight.protocol.bgp.parser.spi.AttributeSerializer;
16 import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionConsumerContext;
17 import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionProviderActivator;
18 import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionProviderContext;
19 import org.opendaylight.protocol.bgp.parser.spi.CapabilityParser;
20 import org.opendaylight.protocol.bgp.parser.spi.CapabilityRegistry;
21 import org.opendaylight.protocol.bgp.parser.spi.CapabilitySerializer;
22 import org.opendaylight.protocol.bgp.parser.spi.MessageParser;
23 import org.opendaylight.protocol.bgp.parser.spi.MessageRegistry;
24 import org.opendaylight.protocol.bgp.parser.spi.MessageSerializer;
25 import org.opendaylight.protocol.bgp.parser.spi.NlriParser;
26 import org.opendaylight.protocol.bgp.parser.spi.NlriRegistry;
27 import org.opendaylight.protocol.bgp.parser.spi.NlriSerializer;
28 import org.opendaylight.protocol.bgp.parser.spi.ParameterParser;
29 import org.opendaylight.protocol.bgp.parser.spi.ParameterRegistry;
30 import org.opendaylight.protocol.bgp.parser.spi.ParameterSerializer;
31 import org.opendaylight.protocol.bgp.parser.spi.SubsequentAddressFamilyRegistry;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.open.BgpParameters;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.open.bgp.parameters.CParameters;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.AddressFamily;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.SubsequentAddressFamily;
36 import org.opendaylight.yangtools.yang.binding.DataObject;
37 import org.opendaylight.yangtools.yang.binding.Notification;
38
39 public final class BGPExtensionConsumerContextImpl implements BGPExtensionProviderContext {
40         private static final class Holder {
41                 private static final BGPExtensionConsumerContext INSTANCE;
42
43                 static {
44                         try {
45                                 INSTANCE = BGPExtensionConsumerContextImpl.create();
46                         } catch (Exception e) {
47                                 throw new ExceptionInInitializerError(e);
48                         }
49                 }
50         }
51
52         private final SimpleAddressFamilyRegistry afiReg = new SimpleAddressFamilyRegistry();
53         private final SimpleAttributeRegistry attrReg = new SimpleAttributeRegistry();
54         private final SimpleCapabilityRegistry capReg = new SimpleCapabilityRegistry();
55         private final SimpleMessageRegistry msgReg = new SimpleMessageRegistry();
56         private final SimpleSubsequentAddressFamilyRegistry safiReg = new SimpleSubsequentAddressFamilyRegistry();
57         private final SimpleParameterRegistry paramReg = new SimpleParameterRegistry();
58         private final SimpleNlriRegistry nlriReg = new SimpleNlriRegistry(afiReg, safiReg);
59
60         private BGPExtensionConsumerContextImpl() {
61
62         }
63
64         public static BGPExtensionConsumerContext getSingletonInstance() {
65                 return Holder.INSTANCE;
66         }
67
68         public static BGPExtensionConsumerContext create() throws Exception {
69                 final BGPExtensionConsumerContextImpl ctx = new BGPExtensionConsumerContextImpl();
70
71                 final ServiceLoader<BGPExtensionProviderActivator> loader = ServiceLoader.load(BGPExtensionProviderActivator.class);
72                 for (BGPExtensionProviderActivator a : loader) {
73                         a.start(ctx);
74                 }
75
76                 return ctx;
77         }
78
79         @Override
80         public AddressFamilyRegistry getAddressFamilyRegistry() {
81                 return afiReg;
82         }
83
84         @Override
85         public AutoCloseable registerAddressFamily(final Class<? extends AddressFamily> clazz, final int number) {
86                 return afiReg.registerAddressFamily(clazz, number);
87         }
88
89         @Override
90         public AttributeRegistry getAttributeRegistry() {
91                 return attrReg;
92         }
93
94         @Override
95         public AutoCloseable registerAttributeParser(final int attributeType, final AttributeParser parser) {
96                 return attrReg.registerAttributeParser(attributeType, parser);
97         }
98
99         @Override
100         public AutoCloseable registerAttributeSerializer(final Class<? extends DataObject> attributeClass, final AttributeSerializer serializer) {
101                 return attrReg.registerAttributeSerializer(attributeClass, serializer);
102         }
103
104         @Override
105         public CapabilityRegistry getCapabilityRegistry() {
106                 return capReg;
107         }
108
109         @Override
110         public AutoCloseable registerCapabilityParser(final int capabilityType, final CapabilityParser parser) {
111                 return capReg.registerCapabilityParser(capabilityType, parser);
112         }
113
114         @Override
115         public AutoCloseable registerCapabilitySerializer(final Class<? extends CParameters> capabilityClass, final CapabilitySerializer serializer) {
116                 return capReg.registerCapabilitySerializer(capabilityClass, serializer);
117         }
118
119         @Override
120         public MessageRegistry getMessageRegistry() {
121                 return msgReg;
122         }
123
124         @Override
125         public AutoCloseable registerMessageParser(final int messageType, final MessageParser parser) {
126                 return msgReg.registerMessageParser(messageType, parser);
127         }
128
129         @Override
130         public AutoCloseable registerMessageSerializer(final Class<? extends Notification> messageClass, final MessageSerializer serializer) {
131                 return msgReg.registerMessageSerializer(messageClass, serializer);
132         }
133
134         @Override
135         public NlriRegistry getNlriRegistry() {
136                 return nlriReg;
137         }
138
139         @Override
140         public AutoCloseable registerNlriParser(final Class<? extends AddressFamily> afi, final Class<? extends SubsequentAddressFamily> safi,
141                         final NlriParser parser) {
142                 return nlriReg.registerNlriParser(afi, safi, parser);
143         }
144
145         @Override
146         public AutoCloseable registerNlriSerializer(final Class<? extends DataObject> nlriClass, final NlriSerializer serializer) {
147                 throw new UnsupportedOperationException("NLRI serialization not implemented");
148         }
149
150         @Override
151         public ParameterRegistry getParameterRegistry() {
152                 return paramReg;
153         }
154
155         @Override
156         public AutoCloseable registerParameterParser(final int parameterType, final ParameterParser parser) {
157                 return paramReg.registerParameterParser(parameterType, parser);
158         }
159
160         @Override
161         public AutoCloseable registerParameterSerializer(final Class<? extends BgpParameters> paramClass, final ParameterSerializer serializer) {
162                 return paramReg.registerParameterSerializer(paramClass, serializer);
163         }
164
165         @Override
166         public SubsequentAddressFamilyRegistry getSubsequentAddressFamilyRegistry() {
167                 return safiReg;
168         }
169
170         @Override
171         public AutoCloseable registerSubsequentAddressFamily(final Class<? extends SubsequentAddressFamily> clazz, final int number) {
172                 return safiReg.registerSubsequentAddressFamily(clazz, number);
173         }
174 }