BUG-113: switch BGP to proper activators
[bgpcep.git] / bgp / parser-spi / src / main / java / org / opendaylight / protocol / bgp / parser / spi / osgi / OSGiBGPExtensionProviderContext.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.osgi;
9
10 import org.opendaylight.protocol.bgp.parser.spi.AttributeParser;
11 import org.opendaylight.protocol.bgp.parser.spi.AttributeSerializer;
12 import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionProviderContext;
13 import org.opendaylight.protocol.bgp.parser.spi.CapabilityParser;
14 import org.opendaylight.protocol.bgp.parser.spi.CapabilitySerializer;
15 import org.opendaylight.protocol.bgp.parser.spi.MessageParser;
16 import org.opendaylight.protocol.bgp.parser.spi.MessageSerializer;
17 import org.opendaylight.protocol.bgp.parser.spi.NlriParser;
18 import org.opendaylight.protocol.bgp.parser.spi.NlriSerializer;
19 import org.opendaylight.protocol.bgp.parser.spi.ParameterParser;
20 import org.opendaylight.protocol.bgp.parser.spi.ParameterSerializer;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.open.BgpParameters;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.open.bgp.parameters.CParameters;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.AddressFamily;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.SubsequentAddressFamily;
25 import org.opendaylight.yangtools.yang.binding.DataObject;
26 import org.opendaylight.yangtools.yang.binding.Notification;
27 import org.osgi.framework.BundleContext;
28
29 final class OSGiBGPExtensionProviderContext extends OSGiBGPExtensionConsumerContext implements BGPExtensionProviderContext {
30
31         OSGiBGPExtensionProviderContext(final BundleContext context) {
32                 super(context);
33         }
34
35         interface ClassRegistration<T> {
36                 public int getRegisteredNumber();
37                 public Class<? extends T> getRegisteredClass();
38         }
39
40         interface ParserRegistration<PARSER> {
41                 public int getRegisteredNumber();
42                 public Class<PARSER> getRegisteredParserClass();
43                 public PARSER getRegisteredParserObject();
44         }
45
46         interface SerializerRegistration<SERIALIZER> {
47                 public Class<?> getRegisteredObjectClass();
48                 public Class<SERIALIZER> getRegisteredSerializerClass();
49                 public SERIALIZER getRegisteredSerializer();
50         }
51
52         @Override
53         public AutoCloseable registerAddressFamily(final Class<? extends AddressFamily> clazz, final int number) {
54                 return register(ClassRegistration.class, new ClassRegistration<AddressFamily>() {
55                         @Override
56                         public int getRegisteredNumber() {
57                                 return number;
58                         }
59                         @Override
60                         public Class<? extends AddressFamily> getRegisteredClass() {
61                                 return clazz;
62                         }
63                 });
64         }
65
66         @Override
67         public AutoCloseable registerSubsequentAddressFamily(final Class<? extends SubsequentAddressFamily> clazz, final int number) {
68                 return register(ClassRegistration.class, new ClassRegistration<SubsequentAddressFamily>() {
69                         @Override
70                         public int getRegisteredNumber() {
71                                 return number;
72                         }
73                         @Override
74                         public Class<? extends SubsequentAddressFamily> getRegisteredClass() {
75                                 return clazz;
76                         }
77                 });
78         }
79
80         @Override
81         public AutoCloseable registerAttributeParser(final int attributeType, final AttributeParser parser) {
82                 return register(ParserRegistration.class, new ParserRegistration<AttributeParser>() {
83                         @Override
84                         public int getRegisteredNumber() {
85                                 return attributeType;
86                         }
87
88                         @Override
89                         public Class<AttributeParser> getRegisteredParserClass() {
90                                 return AttributeParser.class;
91                         }
92
93                         @Override
94                         public AttributeParser getRegisteredParserObject() {
95                                 return parser;
96                         }
97                 });
98         }
99
100         @Override
101         public AutoCloseable registerAttributeSerializer(final Class<? extends DataObject> attributeClass, final AttributeSerializer serializer) {
102                 return register(SerializerRegistration.class, new SerializerRegistration<AttributeSerializer>() {
103                         @Override
104                         public Class<?> getRegisteredObjectClass() {
105                                 return attributeClass;
106                         }
107
108                         @Override
109                         public Class<AttributeSerializer> getRegisteredSerializerClass() {
110                                 return AttributeSerializer.class;
111                         }
112
113                         @Override
114                         public AttributeSerializer getRegisteredSerializer() {
115                                 return serializer;
116                         }
117                 });
118         }
119
120         @Override
121         public AutoCloseable registerCapabilityParser(final int capabilityType, final CapabilityParser parser) {
122                 return register(ParserRegistration.class, new ParserRegistration<CapabilityParser>() {
123                         @Override
124                         public int getRegisteredNumber() {
125                                 return capabilityType;
126                         }
127
128                         @Override
129                         public Class<CapabilityParser> getRegisteredParserClass() {
130                                 return CapabilityParser.class;
131                         }
132
133                         @Override
134                         public CapabilityParser getRegisteredParserObject() {
135                                 return parser;
136                         }
137                 });
138         }
139
140         @Override
141         public AutoCloseable registerCapabilitySerializer(final Class<? extends CParameters> capabilityClass, final CapabilitySerializer serializer) {
142                 return register(SerializerRegistration.class, new SerializerRegistration<CapabilitySerializer>() {
143                         @Override
144                         public Class<?> getRegisteredObjectClass() {
145                                 return capabilityClass;
146                         }
147
148                         @Override
149                         public Class<CapabilitySerializer> getRegisteredSerializerClass() {
150                                 return CapabilitySerializer.class;
151                         }
152
153                         @Override
154                         public CapabilitySerializer getRegisteredSerializer() {
155                                 return serializer;
156                         }
157                 });
158         }
159
160         @Override
161         public AutoCloseable registerMessageParser(final int messageType, final MessageParser parser) {
162                 return register(ParserRegistration.class, new ParserRegistration<MessageParser>() {
163                         @Override
164                         public int getRegisteredNumber() {
165                                 return messageType;
166                         }
167
168                         @Override
169                         public Class<MessageParser> getRegisteredParserClass() {
170                                 return MessageParser.class;
171                         }
172
173                         @Override
174                         public MessageParser getRegisteredParserObject() {
175                                 return parser;
176                         }
177                 });
178         }
179
180         @Override
181         public AutoCloseable registerMessageSerializer(final Class<? extends Notification> messageClass, final MessageSerializer serializer) {
182                 return register(SerializerRegistration.class, new SerializerRegistration<MessageSerializer>() {
183                         @Override
184                         public Class<?> getRegisteredObjectClass() {
185                                 return messageClass;
186                         }
187
188                         @Override
189                         public Class<MessageSerializer> getRegisteredSerializerClass() {
190                                 return MessageSerializer.class;
191                         }
192
193                         @Override
194                         public MessageSerializer getRegisteredSerializer() {
195                                 return serializer;
196                         }
197                 });
198         }
199
200         @Override
201         public AutoCloseable registerNlriParser(final Class<? extends AddressFamily> afi, final Class<? extends SubsequentAddressFamily> safi,
202                         final NlriParser parser) {
203                 // TODO Auto-generated method stub
204                 return null;
205         }
206
207         @Override
208         public AutoCloseable registerNlriSerializer(final Class<? extends DataObject> nlriClass, final NlriSerializer serializer) {
209                 return register(SerializerRegistration.class, new SerializerRegistration<NlriSerializer>() {
210                         @Override
211                         public Class<?> getRegisteredObjectClass() {
212                                 return nlriClass;
213                         }
214
215                         @Override
216                         public Class<NlriSerializer> getRegisteredSerializerClass() {
217                                 return NlriSerializer.class;
218                         }
219
220                         @Override
221                         public NlriSerializer getRegisteredSerializer() {
222                                 return serializer;
223                         }
224                 });
225         }
226
227         @Override
228         public AutoCloseable registerParameterParser(final int parameterType, final ParameterParser parser) {
229                 return register(ParserRegistration.class, new ParserRegistration<ParameterParser>() {
230                         @Override
231                         public int getRegisteredNumber() {
232                                 return parameterType;
233                         }
234
235                         @Override
236                         public Class<ParameterParser> getRegisteredParserClass() {
237                                 return ParameterParser.class;
238                         }
239
240                         @Override
241                         public ParameterParser getRegisteredParserObject() {
242                                 return parser;
243                         }
244                 });
245         }
246
247         @Override
248         public AutoCloseable registerParameterSerializer(final Class<? extends BgpParameters> paramClass, final ParameterSerializer serializer) {
249                 return register(SerializerRegistration.class, new SerializerRegistration<ParameterSerializer>() {
250                         @Override
251                         public Class<?> getRegisteredObjectClass() {
252                                 return paramClass;
253                         }
254
255                         @Override
256                         public Class<ParameterSerializer> getRegisteredSerializerClass() {
257                                 return ParameterSerializer.class;
258                         }
259
260                         @Override
261                         public ParameterSerializer getRegisteredSerializer() {
262                                 return serializer;
263                         }
264                 });
265         }
266 }