Remove hand-written ServiceLoader services
[bgpcep.git] / bmp / bmp-parser-impl / src / main / java / org / opendaylight / protocol / bmp / parser / BmpActivator.java
1 /*
2  * Copyright (c) 2015 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.bmp.parser;
9
10 import java.util.ArrayList;
11 import java.util.List;
12 import org.kohsuke.MetaInfServices;
13 import org.opendaylight.protocol.bgp.parser.spi.AddressFamilyRegistry;
14 import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionConsumerContext;
15 import org.opendaylight.protocol.bgp.parser.spi.MessageRegistry;
16 import org.opendaylight.protocol.bgp.parser.spi.SubsequentAddressFamilyRegistry;
17 import org.opendaylight.protocol.bmp.parser.message.InitiationHandler;
18 import org.opendaylight.protocol.bmp.parser.message.PeerDownHandler;
19 import org.opendaylight.protocol.bmp.parser.message.PeerUpHandler;
20 import org.opendaylight.protocol.bmp.parser.message.RouteMirroringMessageHandler;
21 import org.opendaylight.protocol.bmp.parser.message.RouteMonitoringMessageHandler;
22 import org.opendaylight.protocol.bmp.parser.message.StatisticsReportHandler;
23 import org.opendaylight.protocol.bmp.parser.message.TerminationHandler;
24 import org.opendaylight.protocol.bmp.parser.tlv.DescriptionTlvHandler;
25 import org.opendaylight.protocol.bmp.parser.tlv.MirrorInformationTlvHandler;
26 import org.opendaylight.protocol.bmp.parser.tlv.NameTlvHandler;
27 import org.opendaylight.protocol.bmp.parser.tlv.ReasonTlvHandler;
28 import org.opendaylight.protocol.bmp.parser.tlv.StatType000TlvHandler;
29 import org.opendaylight.protocol.bmp.parser.tlv.StatType001TlvHandler;
30 import org.opendaylight.protocol.bmp.parser.tlv.StatType002TlvHandler;
31 import org.opendaylight.protocol.bmp.parser.tlv.StatType003TlvHandler;
32 import org.opendaylight.protocol.bmp.parser.tlv.StatType004TlvHandler;
33 import org.opendaylight.protocol.bmp.parser.tlv.StatType005TlvHandler;
34 import org.opendaylight.protocol.bmp.parser.tlv.StatType006TlvHandler;
35 import org.opendaylight.protocol.bmp.parser.tlv.StatType007TlvHandler;
36 import org.opendaylight.protocol.bmp.parser.tlv.StatType008TlvHandler;
37 import org.opendaylight.protocol.bmp.parser.tlv.StatType009TlvHandler;
38 import org.opendaylight.protocol.bmp.parser.tlv.StatType010TlvHandler;
39 import org.opendaylight.protocol.bmp.parser.tlv.StatType011TlvHandler;
40 import org.opendaylight.protocol.bmp.parser.tlv.StatType012TlvHandler;
41 import org.opendaylight.protocol.bmp.parser.tlv.StatType013TlvHandler;
42 import org.opendaylight.protocol.bmp.parser.tlv.StringTlvHandler;
43 import org.opendaylight.protocol.bmp.spi.registry.AbstractBmpExtensionProviderActivator;
44 import org.opendaylight.protocol.bmp.spi.registry.BmpExtensionProviderActivator;
45 import org.opendaylight.protocol.bmp.spi.registry.BmpExtensionProviderContext;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.InitiationMessage;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.PeerDownNotification;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.PeerUpNotification;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.RouteMirroringMessage;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.RouteMonitoringMessage;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.StatsReportsMessage;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.TerminationMessage;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.description.tlv.DescriptionTlv;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.mirror.information.tlv.MirrorInformationTlv;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.name.tlv.NameTlv;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.reason.tlv.ReasonTlv;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.AdjRibsInRoutesTlv;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.DuplicatePrefixAdvertisementsTlv;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.DuplicateUpdatesTlv;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.DuplicateWithdrawsTlv;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.InvalidatedAsConfedLoopTlv;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.InvalidatedAsPathLoopTlv;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.InvalidatedClusterListLoopTlv;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.InvalidatedOriginatorIdTlv;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.LocRibRoutesTlv;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.PerAfiSafiAdjRibInTlv;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.PerAfiSafiLocRibTlv;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.PrefixesTreatedAsWithdrawTlv;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.RejectedPrefixesTlv;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.stat.tlvs.UpdatesTreatedAsWithdrawTlv;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev200120.string.tlv.StringTlv;
72
73 @MetaInfServices(value = BmpExtensionProviderActivator.class)
74 public final class BmpActivator extends AbstractBmpExtensionProviderActivator {
75     private final MessageRegistry messageRegistry;
76     private final AddressFamilyRegistry afiRegistry;
77     private final SubsequentAddressFamilyRegistry safiRegistry;
78
79     // FIXME: this needs to be properly injected
80     public BmpActivator(final BGPExtensionConsumerContext context) {
81         this.messageRegistry = context.getMessageRegistry();
82         this.afiRegistry = context.getAddressFamilyRegistry();
83         this.safiRegistry = context.getSubsequentAddressFamilyRegistry();
84     }
85
86     @Override
87     protected List<AutoCloseable> startImpl(final BmpExtensionProviderContext context) {
88         final List<AutoCloseable> regs = new ArrayList<>();
89         registerBmpTlvHandlers(regs, context);
90         registerBmpStatTlvHandlers(regs, context);
91         registerBmpMessageHandlers(regs, context);
92         return regs;
93     }
94
95     private void registerBmpMessageHandlers(final List<AutoCloseable> regs, final BmpExtensionProviderContext context) {
96         final InitiationHandler initiationHandler = new InitiationHandler(context.getBmpInitiationTlvRegistry());
97         regs.add(context.registerBmpMessageParser(initiationHandler.getBmpMessageType(), initiationHandler));
98         regs.add(context.registerBmpMessageSerializer(InitiationMessage.class, initiationHandler));
99
100         final TerminationHandler terminationHandler = new TerminationHandler(context.getBmpTerminationTlvRegistry());
101         regs.add(context.registerBmpMessageParser(terminationHandler.getBmpMessageType(), terminationHandler));
102         regs.add(context.registerBmpMessageSerializer(TerminationMessage.class, terminationHandler));
103
104         final PeerUpHandler peerUpHandler = new PeerUpHandler(this.messageRegistry, context.getBmpPeerUpTlvRegistry());
105         regs.add(context.registerBmpMessageParser(peerUpHandler.getBmpMessageType(), peerUpHandler));
106         regs.add(context.registerBmpMessageSerializer(PeerUpNotification.class, peerUpHandler));
107
108         final PeerDownHandler peerDownHandler = new PeerDownHandler(this.messageRegistry);
109         regs.add(context.registerBmpMessageParser(peerDownHandler.getBmpMessageType(), peerDownHandler));
110         regs.add(context.registerBmpMessageSerializer(PeerDownNotification.class, peerDownHandler));
111
112         final StatisticsReportHandler statisticsReportHandler = new StatisticsReportHandler(this.messageRegistry,
113                 context.getBmpStatisticsTlvRegistry());
114         regs.add(context.registerBmpMessageParser(statisticsReportHandler.getBmpMessageType(),
115                 statisticsReportHandler));
116         regs.add(context.registerBmpMessageSerializer(StatsReportsMessage.class, statisticsReportHandler));
117
118         final RouteMonitoringMessageHandler routeMonitoringMessageHandler =
119                 new RouteMonitoringMessageHandler(this.messageRegistry);
120         regs.add(context.registerBmpMessageParser(routeMonitoringMessageHandler.getBmpMessageType(),
121                 routeMonitoringMessageHandler));
122         regs.add(context.registerBmpMessageSerializer(RouteMonitoringMessage.class, routeMonitoringMessageHandler));
123
124         final RouteMirroringMessageHandler routeMirroringMessageHandler =
125                 new RouteMirroringMessageHandler(this.messageRegistry, context.getBmpRouteMirroringTlvRegistry());
126         regs.add(context.registerBmpMessageParser(routeMirroringMessageHandler.getBmpMessageType(),
127                 routeMirroringMessageHandler));
128         regs.add(context.registerBmpMessageSerializer(RouteMirroringMessage.class, routeMirroringMessageHandler));
129
130     }
131
132     private static void registerBmpTlvHandlers(final List<AutoCloseable> regs,
133             final BmpExtensionProviderContext context) {
134         final DescriptionTlvHandler descriptionTlvHandler = new DescriptionTlvHandler();
135         regs.add(context.registerBmpInitiationTlvParser(DescriptionTlvHandler.TYPE, descriptionTlvHandler));
136         regs.add(context.registerBmpInitiationTlvSerializer(DescriptionTlv.class, descriptionTlvHandler));
137
138         final NameTlvHandler nameTlvHandler = new NameTlvHandler();
139         regs.add(context.registerBmpInitiationTlvParser(NameTlvHandler.TYPE, nameTlvHandler));
140         regs.add(context.registerBmpInitiationTlvSerializer(NameTlv.class, nameTlvHandler));
141
142         final StringTlvHandler stringTlvHandler = new StringTlvHandler();
143         regs.add(context.registerBmpInitiationTlvParser(StringTlvHandler.TYPE, stringTlvHandler));
144         regs.add(context.registerBmpInitiationTlvSerializer(StringTlv.class, stringTlvHandler));
145         regs.add(context.registerBmpTerminationTlvParser(StringTlvHandler.TYPE, stringTlvHandler));
146         regs.add(context.registerBmpTerminationTlvSerializer(StringTlv.class, stringTlvHandler));
147         regs.add(context.registerBmpPeerUpTlvParser(StringTlvHandler.TYPE, stringTlvHandler));
148         regs.add(context.registerBmpPeerUpTlvSerializer(StringTlv.class, stringTlvHandler));
149
150         final ReasonTlvHandler reasonTlvHandler = new ReasonTlvHandler();
151         regs.add(context.registerBmpTerminationTlvParser(ReasonTlvHandler.TYPE, reasonTlvHandler));
152         regs.add(context.registerBmpTerminationTlvSerializer(ReasonTlv.class, reasonTlvHandler));
153
154         final MirrorInformationTlvHandler informationTlvHandler = new MirrorInformationTlvHandler();
155         regs.add(context.registerBmpRouteMirroringTlvParser(MirrorInformationTlvHandler.TYPE, informationTlvHandler));
156         regs.add(context.registerBmpRouteMirroringTlvSerializer(MirrorInformationTlv.class, informationTlvHandler));
157     }
158
159     private void registerBmpStatTlvHandlers(final List<AutoCloseable> regs,
160             final BmpExtensionProviderContext context) {
161         final StatType000TlvHandler statType000TlvHandler = new StatType000TlvHandler();
162         regs.add(context.registerBmpStatisticsTlvParser(StatType000TlvHandler.TYPE, statType000TlvHandler));
163         regs.add(context.registerBmpStatisticsTlvSerializer(RejectedPrefixesTlv.class, statType000TlvHandler));
164
165         final StatType001TlvHandler statType001TlvHandler = new StatType001TlvHandler();
166         regs.add(context.registerBmpStatisticsTlvParser(StatType001TlvHandler.TYPE, statType001TlvHandler));
167         regs.add(context.registerBmpStatisticsTlvSerializer(DuplicatePrefixAdvertisementsTlv.class,
168                 statType001TlvHandler));
169
170         final StatType002TlvHandler statType002TlvHandler = new StatType002TlvHandler();
171         regs.add(context.registerBmpStatisticsTlvParser(StatType002TlvHandler.TYPE, statType002TlvHandler));
172         regs.add(context.registerBmpStatisticsTlvSerializer(DuplicateWithdrawsTlv.class, statType002TlvHandler));
173
174         final StatType003TlvHandler statType003TlvHandler = new StatType003TlvHandler();
175         regs.add(context.registerBmpStatisticsTlvParser(StatType003TlvHandler.TYPE, statType003TlvHandler));
176         regs.add(context.registerBmpStatisticsTlvSerializer(InvalidatedClusterListLoopTlv.class,
177                 statType003TlvHandler));
178
179         final StatType004TlvHandler statType004TlvHandler = new StatType004TlvHandler();
180         regs.add(context.registerBmpStatisticsTlvParser(StatType004TlvHandler.TYPE, statType004TlvHandler));
181         regs.add(context.registerBmpStatisticsTlvSerializer(InvalidatedAsPathLoopTlv.class, statType004TlvHandler));
182
183         final StatType005TlvHandler statType005TlvHandler = new StatType005TlvHandler();
184         regs.add(context.registerBmpStatisticsTlvParser(StatType005TlvHandler.TYPE, statType005TlvHandler));
185         regs.add(context.registerBmpStatisticsTlvSerializer(InvalidatedOriginatorIdTlv.class, statType005TlvHandler));
186
187         final StatType006TlvHandler statType006TlvHandler = new StatType006TlvHandler();
188         regs.add(context.registerBmpStatisticsTlvParser(StatType006TlvHandler.TYPE, statType006TlvHandler));
189         regs.add(context.registerBmpStatisticsTlvSerializer(InvalidatedAsConfedLoopTlv.class, statType006TlvHandler));
190
191         final StatType007TlvHandler statType007TlvHandler = new StatType007TlvHandler();
192         regs.add(context.registerBmpStatisticsTlvParser(StatType007TlvHandler.TYPE, statType007TlvHandler));
193         regs.add(context.registerBmpStatisticsTlvSerializer(AdjRibsInRoutesTlv.class, statType007TlvHandler));
194
195         final StatType008TlvHandler statType008TlvHandler = new StatType008TlvHandler();
196         regs.add(context.registerBmpStatisticsTlvParser(StatType008TlvHandler.TYPE, statType008TlvHandler));
197         regs.add(context.registerBmpStatisticsTlvSerializer(LocRibRoutesTlv.class, statType008TlvHandler));
198
199         final StatType009TlvHandler statType009TlvHandler =
200                 new StatType009TlvHandler(this.afiRegistry, this.safiRegistry);
201         regs.add(context.registerBmpStatisticsTlvParser(StatType009TlvHandler.TYPE, statType009TlvHandler));
202         regs.add(context.registerBmpStatisticsTlvSerializer(PerAfiSafiAdjRibInTlv.class, statType009TlvHandler));
203
204         final StatType010TlvHandler statType010TlvHandler =
205                 new StatType010TlvHandler(this.afiRegistry, this.safiRegistry);
206         regs.add(context.registerBmpStatisticsTlvParser(StatType010TlvHandler.TYPE, statType010TlvHandler));
207         regs.add(context.registerBmpStatisticsTlvSerializer(PerAfiSafiLocRibTlv.class, statType010TlvHandler));
208
209         final StatType011TlvHandler statType011TlvHandler = new StatType011TlvHandler();
210         regs.add(context.registerBmpStatisticsTlvParser(StatType011TlvHandler.TYPE, statType011TlvHandler));
211         regs.add(context.registerBmpStatisticsTlvSerializer(UpdatesTreatedAsWithdrawTlv.class, statType011TlvHandler));
212
213         final StatType012TlvHandler statType012TlvHandler = new StatType012TlvHandler();
214         regs.add(context.registerBmpStatisticsTlvParser(StatType012TlvHandler.TYPE, statType012TlvHandler));
215         regs.add(context.registerBmpStatisticsTlvSerializer(PrefixesTreatedAsWithdrawTlv.class, statType012TlvHandler));
216
217         final StatType013TlvHandler statType013TlvHandler = new StatType013TlvHandler();
218         regs.add(context.registerBmpStatisticsTlvParser(StatType013TlvHandler.TYPE, statType013TlvHandler));
219         regs.add(context.registerBmpStatisticsTlvSerializer(DuplicateUpdatesTlv.class, statType013TlvHandler));
220
221     }
222 }