Fix rsvp.yang
[bgpcep.git] / rsvp / impl / src / main / java / org / opendaylight / protocol / rsvp / parser / impl / RSVPActivator.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.rsvp.parser.impl;
9
10 import java.util.ArrayList;
11 import java.util.List;
12 import org.opendaylight.protocol.rsvp.parser.impl.subobject.ero.EROAsNumberSubobjectParser;
13 import org.opendaylight.protocol.rsvp.parser.impl.subobject.ero.EROIpv4PrefixSubobjectParser;
14 import org.opendaylight.protocol.rsvp.parser.impl.subobject.ero.EROIpv6PrefixSubobjectParser;
15 import org.opendaylight.protocol.rsvp.parser.impl.subobject.ero.EROLabelSubobjectParser;
16 import org.opendaylight.protocol.rsvp.parser.impl.subobject.ero.EROPathKey128SubobjectParser;
17 import org.opendaylight.protocol.rsvp.parser.impl.subobject.ero.EROPathKey32SubobjectParser;
18 import org.opendaylight.protocol.rsvp.parser.impl.subobject.ero.EROUnnumberedInterfaceSubobjectParser;
19 import org.opendaylight.protocol.rsvp.parser.impl.subobject.ero.SEROBasicProtectionSubobjectParser;
20 import org.opendaylight.protocol.rsvp.parser.impl.subobject.ero.SERODynamicProtectionSubobjectParser;
21 import org.opendaylight.protocol.rsvp.parser.impl.subobject.label.GeneralizedLabelParser;
22 import org.opendaylight.protocol.rsvp.parser.impl.subobject.label.Type1LabelParser;
23 import org.opendaylight.protocol.rsvp.parser.impl.subobject.label.WavebandSwitchingLabelParser;
24 import org.opendaylight.protocol.rsvp.parser.impl.subobject.rro.RROIpv4PrefixSubobjectParser;
25 import org.opendaylight.protocol.rsvp.parser.impl.subobject.rro.RROIpv6PrefixSubobjectParser;
26 import org.opendaylight.protocol.rsvp.parser.impl.subobject.rro.RROLabelSubobjectParser;
27 import org.opendaylight.protocol.rsvp.parser.impl.subobject.rro.RROPathKey128SubobjectParser;
28 import org.opendaylight.protocol.rsvp.parser.impl.subobject.rro.RROPathKey32SubobjectParser;
29 import org.opendaylight.protocol.rsvp.parser.impl.subobject.rro.RROUnnumberedInterfaceSubobjectParser;
30 import org.opendaylight.protocol.rsvp.parser.impl.subobject.rro.SRROBasicProtectionSubobjectParser;
31 import org.opendaylight.protocol.rsvp.parser.impl.subobject.rro.SRRODynamicProtectionSubobjectParser;
32 import org.opendaylight.protocol.rsvp.parser.impl.subobject.xro.XROAsNumberSubobjectParser;
33 import org.opendaylight.protocol.rsvp.parser.impl.subobject.xro.XROIpv4PrefixSubobjectParser;
34 import org.opendaylight.protocol.rsvp.parser.impl.subobject.xro.XROIpv6PrefixSubobjectParser;
35 import org.opendaylight.protocol.rsvp.parser.impl.subobject.xro.XROPathKey128SubobjectParser;
36 import org.opendaylight.protocol.rsvp.parser.impl.subobject.xro.XROPathKey32SubobjectParser;
37 import org.opendaylight.protocol.rsvp.parser.impl.subobject.xro.XROSrlgSubobjectParser;
38 import org.opendaylight.protocol.rsvp.parser.impl.subobject.xro.XROUnnumberedInterfaceSubobjectParser;
39 import org.opendaylight.protocol.rsvp.parser.impl.te.AdminStatusObjectParser;
40 import org.opendaylight.protocol.rsvp.parser.impl.te.AssociationObjectParserIPV4;
41 import org.opendaylight.protocol.rsvp.parser.impl.te.AssociationObjectParserIPV6;
42 import org.opendaylight.protocol.rsvp.parser.impl.te.AttributesObjectParser;
43 import org.opendaylight.protocol.rsvp.parser.impl.te.BandwidthObjectParser;
44 import org.opendaylight.protocol.rsvp.parser.impl.te.DetourObjectIpv4Parser;
45 import org.opendaylight.protocol.rsvp.parser.impl.te.DetourObjectIpv6Parser;
46 import org.opendaylight.protocol.rsvp.parser.impl.te.DynamicProtectionObjectParser;
47 import org.opendaylight.protocol.rsvp.parser.impl.te.ExcludeRouteObjectParser;
48 import org.opendaylight.protocol.rsvp.parser.impl.te.ExplicitRouteObjectParser;
49 import org.opendaylight.protocol.rsvp.parser.impl.te.FastRerouteObjectParser;
50 import org.opendaylight.protocol.rsvp.parser.impl.te.FlowSpecObjectParser;
51 import org.opendaylight.protocol.rsvp.parser.impl.te.InformationalFastRerouteObjectParser;
52 import org.opendaylight.protocol.rsvp.parser.impl.te.MetricObjectParser;
53 import org.opendaylight.protocol.rsvp.parser.impl.te.PrimaryPathRouteObjectParser;
54 import org.opendaylight.protocol.rsvp.parser.impl.te.ProtectionObjectParser;
55 import org.opendaylight.protocol.rsvp.parser.impl.te.RecordRouteObjectParser;
56 import org.opendaylight.protocol.rsvp.parser.impl.te.ReoptimizationBandwidthObjectParser;
57 import org.opendaylight.protocol.rsvp.parser.impl.te.RequiredAttributesObjectParser;
58 import org.opendaylight.protocol.rsvp.parser.impl.te.SecondaryExplicitRouteObjectParser;
59 import org.opendaylight.protocol.rsvp.parser.impl.te.SecondaryRecordRouteObjectParser;
60 import org.opendaylight.protocol.rsvp.parser.impl.te.SenderTspecObjectParser;
61 import org.opendaylight.protocol.rsvp.parser.impl.te.SessionAttributeLspObjectParser;
62 import org.opendaylight.protocol.rsvp.parser.impl.te.SessionAttributeLspRaObjectParser;
63 import org.opendaylight.protocol.rsvp.parser.spi.AbstractRSVPExtensionProviderActivator;
64 import org.opendaylight.protocol.rsvp.parser.spi.LabelRegistry;
65 import org.opendaylight.protocol.rsvp.parser.spi.RSVPExtensionProviderContext;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.admin.status.object.AdminStatusObject;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.association.object.AssociationObject;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.bandwidth.object.bandwidth.object.basic.bandwidth.object._case.BasicBandwidthObject;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.bandwidth.object.bandwidth.object.reoptimization.bandwidth.object._case.ReoptimizationBandwidthObject;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.AsNumberCase;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.IpPrefixCase;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.LabelCase;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.SrlgCase;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.UnnumberedCase;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.detour.object.detour.object.Ipv4DetourObject;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.detour.object.detour.object.Ipv6DetourObject;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.exclude.route.object.ExcludeRouteObject;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.explicit.route.object.ExplicitRouteObject;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.explicit.route.subobjects.subobject.type.PathKeyCase;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.fast.reroute.object.fast.reroute.object.basic.fast.reroute.object._case.BasicFastRerouteObject;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.fast.reroute.object.fast.reroute.object.legacy.fast.reroute.object._case.LegacyFastRerouteObject;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.flow.spec.object.FlowSpecObject;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.label.subobject.label.type.GeneralizedLabelCase;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.label.subobject.label.type.Type1LabelCase;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.label.subobject.label.type.WavebandSwitchingLabelCase;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.lsp.attributes.object.LspAttributesObject;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.lsp.required.attributes.object.LspRequiredAttributesObject;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.metric.object.MetricObject;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.primary.path.route.object.PrimaryPathRouteObject;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.protection.object.protection.object.basic.protection.object._case.BasicProtectionObject;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.protection.object.protection.object.dynamic.control.protection.object._case.DynamicControlProtectionObject;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.object.RecordRouteObject;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.secondary.explicit.route.object.SecondaryExplicitRouteObject;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.secondary.explicit.route.subobjects.subobject.type.BasicProtectionCase;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.secondary.explicit.route.subobjects.subobject.type.DynamicControlProtectionCase;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.secondary.record.route.object.SecondaryRecordRouteObject;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.session.attribute.object.session.attribute.object.basic.session.attribute.object._case.BasicSessionAttributeObject;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.session.attribute.object.session.attribute.object.session.attribute.object.with.resources.affinities._case.SessionAttributeObjectWithResourcesAffinities;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.tspec.object.TspecObject;
100 import org.opendaylight.yangtools.concepts.Registration;
101
102 public class RSVPActivator extends AbstractRSVPExtensionProviderActivator {
103     @Override
104     protected List<Registration> startImpl(final RSVPExtensionProviderContext context) {
105         final List<Registration> regs = new ArrayList<>();
106
107         registerLabelParsers(regs, context);
108         final LabelRegistry labelReg = context.getLabelHandlerRegistry();
109         registerRROParsers(regs, context, labelReg);
110         registerXROParsers(regs, context);
111         registerEROParsers(regs, context, labelReg);
112         registerRsvpTEParsers(context);
113
114         return regs;
115     }
116
117     private static void registerRsvpTEParsers(final RSVPExtensionProviderContext context) {
118         final DetourObjectIpv4Parser detourIpv4 = new DetourObjectIpv4Parser();
119         context.registerRsvpObjectParser(DetourObjectIpv4Parser.CLASS_NUM, DetourObjectIpv4Parser.CTYPE, detourIpv4);
120         context.registerRsvpObjectSerializer(Ipv4DetourObject.class, detourIpv4);
121
122         final DetourObjectIpv6Parser detourIpv6 = new DetourObjectIpv6Parser();
123         context.registerRsvpObjectParser(DetourObjectIpv6Parser.CLASS_NUM, DetourObjectIpv6Parser.CTYPE, detourIpv6);
124         context.registerRsvpObjectSerializer(Ipv6DetourObject.class, detourIpv6);
125
126         final FastRerouteObjectParser fastC1 = new FastRerouteObjectParser();
127         context.registerRsvpObjectParser(FastRerouteObjectParser.CLASS_NUM, FastRerouteObjectParser.CTYPE, fastC1);
128         context.registerRsvpObjectSerializer(BasicFastRerouteObject.class, fastC1);
129
130         final InformationalFastRerouteObjectParser fastC7 = new InformationalFastRerouteObjectParser();
131         context.registerRsvpObjectParser(InformationalFastRerouteObjectParser.CLASS_NUM,
132             InformationalFastRerouteObjectParser.CTYPE, fastC7);
133         context.registerRsvpObjectSerializer(LegacyFastRerouteObject.class, fastC7);
134
135         final SenderTspecObjectParser tSpec = new SenderTspecObjectParser();
136         context.registerRsvpObjectParser(SenderTspecObjectParser.CLASS_NUM, SenderTspecObjectParser.CTYPE, tSpec);
137         context.registerRsvpObjectSerializer(TspecObject.class, tSpec);
138
139         final FlowSpecObjectParser fSpec = new FlowSpecObjectParser();
140         context.registerRsvpObjectParser(FlowSpecObjectParser.CLASS_NUM, FlowSpecObjectParser.CTYPE, fSpec);
141         context.registerRsvpObjectSerializer(FlowSpecObject.class, fSpec);
142
143         final SessionAttributeLspObjectParser sAttributeC7 = new SessionAttributeLspObjectParser();
144         context.registerRsvpObjectParser(SessionAttributeLspObjectParser.CLASS_NUM, SessionAttributeLspObjectParser
145             .CTYPE, sAttributeC7);
146         context.registerRsvpObjectSerializer(BasicSessionAttributeObject.class, sAttributeC7);
147
148         final SessionAttributeLspRaObjectParser sAttributeC1 = new SessionAttributeLspRaObjectParser();
149         context.registerRsvpObjectParser(SessionAttributeLspRaObjectParser.CLASS_NUM,
150             SessionAttributeLspRaObjectParser.CTYPE, sAttributeC1);
151         context.registerRsvpObjectSerializer(SessionAttributeObjectWithResourcesAffinities.class, sAttributeC1);
152
153         final RecordRouteObjectParser rroParser = new RecordRouteObjectParser(context.getRROSubobjectHandlerRegistry());
154         context.registerRsvpObjectParser(RecordRouteObjectParser.CLASS_NUM, RecordRouteObjectParser.CTYPE, rroParser);
155         context.registerRsvpObjectSerializer(RecordRouteObject.class, rroParser);
156
157         final ExcludeRouteObjectParser xroParser = new ExcludeRouteObjectParser(context
158             .getXROSubobjectHandlerRegistry());
159         context.registerRsvpObjectParser(ExcludeRouteObjectParser.CLASS_NUM, ExcludeRouteObjectParser.CTYPE, xroParser);
160         context.registerRsvpObjectSerializer(ExcludeRouteObject.class, xroParser);
161
162         final ExplicitRouteObjectParser eroParser = new ExplicitRouteObjectParser(context
163             .getEROSubobjectHandlerRegistry());
164         context.registerRsvpObjectParser(ExplicitRouteObjectParser.CLASS_NUM, ExplicitRouteObjectParser.CTYPE,
165             eroParser);
166         context.registerRsvpObjectSerializer(ExplicitRouteObject.class, eroParser);
167
168         final AssociationObjectParserIPV4 ipv4AsoParser = new AssociationObjectParserIPV4();
169         context.registerRsvpObjectParser(AssociationObjectParserIPV4.CLASS_NUM,
170             AssociationObjectParserIPV4.CTYPE_IPV4, ipv4AsoParser);
171         final AssociationObjectParserIPV6 ipv6AsoParser = new AssociationObjectParserIPV6();
172         context.registerRsvpObjectParser(AssociationObjectParserIPV6.CLASS_NUM,
173             AssociationObjectParserIPV6.CTYPE_IPV6, ipv6AsoParser);
174         context.registerRsvpObjectSerializer(AssociationObject.class, ipv4AsoParser);
175
176         final AdminStatusObjectParser admParser = new AdminStatusObjectParser();
177         context.registerRsvpObjectParser(AdminStatusObjectParser.CLASS_NUM, AdminStatusObjectParser.CTYPE, admParser);
178         context.registerRsvpObjectSerializer(AdminStatusObject.class, admParser);
179
180         final BandwidthObjectParser bandT1Parser = new BandwidthObjectParser();
181         context.registerRsvpObjectParser(BandwidthObjectParser.CLASS_NUM, BandwidthObjectParser.CTYPE, bandT1Parser);
182         context.registerRsvpObjectSerializer(BasicBandwidthObject.class, bandT1Parser);
183
184         final ReoptimizationBandwidthObjectParser bandT2Parser = new ReoptimizationBandwidthObjectParser();
185         context.registerRsvpObjectParser(ReoptimizationBandwidthObjectParser.CLASS_NUM,
186             ReoptimizationBandwidthObjectParser.CTYPE, bandT2Parser);
187         context.registerRsvpObjectSerializer(ReoptimizationBandwidthObject.class, bandT2Parser);
188
189         final MetricObjectParser metricParser = new MetricObjectParser();
190         context.registerRsvpObjectParser(MetricObjectParser.CLASS_NUM, MetricObjectParser.CTYPE, metricParser);
191         context.registerRsvpObjectSerializer(MetricObject.class, metricParser);
192
193         final PrimaryPathRouteObjectParser primatyParser = new PrimaryPathRouteObjectParser(context
194             .getEROSubobjectHandlerRegistry());
195         context.registerRsvpObjectParser(PrimaryPathRouteObjectParser.CLASS_NUM, PrimaryPathRouteObjectParser.CTYPE,
196             primatyParser);
197         context.registerRsvpObjectSerializer(PrimaryPathRouteObject.class, primatyParser);
198
199         final AttributesObjectParser lspAttributeParser = new AttributesObjectParser();
200         context.registerRsvpObjectParser(AttributesObjectParser.CLASS_NUM, AttributesObjectParser.CTYPE,
201             lspAttributeParser);
202         context.registerRsvpObjectSerializer(LspAttributesObject.class, lspAttributeParser);
203
204         final RequiredAttributesObjectParser lspRequiredAttParser = new RequiredAttributesObjectParser();
205         context.registerRsvpObjectParser(RequiredAttributesObjectParser.CLASS_NUM, RequiredAttributesObjectParser.CTYPE,
206             lspRequiredAttParser);
207         context.registerRsvpObjectSerializer(LspRequiredAttributesObject.class, lspRequiredAttParser);
208
209         final ProtectionObjectParser protectionType1Parser = new ProtectionObjectParser();
210         context.registerRsvpObjectParser(ProtectionObjectParser.CLASS_NUM, ProtectionObjectParser.CTYPE,
211             protectionType1Parser);
212         context.registerRsvpObjectSerializer(BasicProtectionObject.class, protectionType1Parser);
213
214         final DynamicProtectionObjectParser protectionType2Parser = new DynamicProtectionObjectParser();
215         context.registerRsvpObjectParser(DynamicProtectionObjectParser.CLASS_NUM, DynamicProtectionObjectParser
216             .CTYPE, protectionType2Parser);
217         context.registerRsvpObjectSerializer(DynamicControlProtectionObject.class, protectionType2Parser);
218
219         final SecondaryExplicitRouteObjectParser serTypeParser = new SecondaryExplicitRouteObjectParser(context
220             .getEROSubobjectHandlerRegistry());
221         context.registerRsvpObjectParser(SecondaryExplicitRouteObjectParser.CLASS_NUM,
222             SecondaryExplicitRouteObjectParser.CTYPE, serTypeParser);
223         context.registerRsvpObjectSerializer(SecondaryExplicitRouteObject.class, serTypeParser);
224
225         final SecondaryRecordRouteObjectParser srroTypeParser = new SecondaryRecordRouteObjectParser(context
226             .getRROSubobjectHandlerRegistry());
227         context.registerRsvpObjectParser(SecondaryRecordRouteObjectParser.CLASS_NUM, SecondaryRecordRouteObjectParser
228             .CTYPE, srroTypeParser);
229         context.registerRsvpObjectSerializer(SecondaryRecordRouteObject.class, srroTypeParser);
230     }
231
232     private static void registerLabelParsers(final List<Registration> regs,
233             final RSVPExtensionProviderContext  context) {
234         final Type1LabelParser type1Parser = new Type1LabelParser();
235         regs.add(context.registerLabelParser(Type1LabelParser.CTYPE, type1Parser));
236         regs.add(context.registerLabelSerializer(Type1LabelCase.class, type1Parser));
237
238         final GeneralizedLabelParser generalizedParser = new GeneralizedLabelParser();
239         regs.add(context.registerLabelParser(GeneralizedLabelParser.CTYPE, generalizedParser));
240         regs.add(context.registerLabelSerializer(GeneralizedLabelCase.class, generalizedParser));
241
242         final WavebandSwitchingLabelParser wavebandParser = new WavebandSwitchingLabelParser();
243         regs.add(context.registerLabelParser(WavebandSwitchingLabelParser.CTYPE, wavebandParser));
244         regs.add(context.registerLabelSerializer(WavebandSwitchingLabelCase.class, wavebandParser));
245     }
246
247     private static void registerRROParsers(final List<Registration> regs, final RSVPExtensionProviderContext context,
248             final LabelRegistry labelReg) {
249         final RROIpv4PrefixSubobjectParser ipv4prefixParser = new RROIpv4PrefixSubobjectParser();
250         regs.add(context.registerRROSubobjectParser(RROIpv4PrefixSubobjectParser.TYPE, ipv4prefixParser));
251         regs.add(context.registerRROSubobjectSerializer(
252             org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects
253                 .subobject.type.IpPrefixCase.class,
254             ipv4prefixParser));
255         regs.add(context.registerRROSubobjectParser(RROIpv6PrefixSubobjectParser.TYPE, new
256             RROIpv6PrefixSubobjectParser()));
257
258         final RROUnnumberedInterfaceSubobjectParser unnumberedParser = new RROUnnumberedInterfaceSubobjectParser();
259         regs.add(context.registerRROSubobjectParser(RROUnnumberedInterfaceSubobjectParser.TYPE, unnumberedParser));
260         regs.add(context.registerRROSubobjectSerializer(
261             org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects
262                 .subobject.type.UnnumberedCase.class,
263             unnumberedParser));
264
265         final RROPathKey32SubobjectParser pathKey32Parser = new RROPathKey32SubobjectParser();
266         final RROPathKey128SubobjectParser pathKey128Parser = new RROPathKey128SubobjectParser();
267         regs.add(context.registerRROSubobjectParser(RROPathKey32SubobjectParser.TYPE, pathKey32Parser));
268         regs.add(context.registerRROSubobjectParser(RROPathKey128SubobjectParser.TYPE, pathKey128Parser));
269         regs.add(context.registerRROSubobjectSerializer(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns
270             .yang.rsvp.rev150820.record.route.subobjects.subobject.type.PathKeyCase.class, pathKey32Parser));
271
272         final RROLabelSubobjectParser labelParser = new RROLabelSubobjectParser(labelReg);
273         regs.add(context.registerRROSubobjectParser(RROLabelSubobjectParser.TYPE, labelParser));
274         regs.add(context.registerRROSubobjectSerializer(
275             org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects
276                 .subobject.type.LabelCase.class,
277             labelParser));
278
279         final SRROBasicProtectionSubobjectParser srroBasicParser = new SRROBasicProtectionSubobjectParser();
280         final SRRODynamicProtectionSubobjectParser srroDynamicParser = new SRRODynamicProtectionSubobjectParser();
281         regs.add(context.registerRROSubobjectParser(SRROBasicProtectionSubobjectParser.TYPE, srroBasicParser));
282         regs.add(context.registerRROSubobjectSerializer(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang
283             .rsvp.rev150820.secondary.record.route.subobjects.subobject.type
284             .BasicProtectionCase.class, srroBasicParser));
285         regs.add(context.registerRROSubobjectSerializer(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang
286             .rsvp.rev150820.secondary.record.route.subobjects.subobject.type
287             .DynamicControlProtectionCase.class, srroDynamicParser));
288     }
289
290     private static void registerXROParsers(final List<Registration> regs, final RSVPExtensionProviderContext context) {
291         final XROIpv4PrefixSubobjectParser ipv4prefixParser = new XROIpv4PrefixSubobjectParser();
292         regs.add(context.registerXROSubobjectParser(XROIpv4PrefixSubobjectParser.TYPE, ipv4prefixParser));
293         regs.add(context.registerXROSubobjectSerializer(IpPrefixCase.class, ipv4prefixParser));
294         regs.add(context.registerXROSubobjectParser(XROIpv6PrefixSubobjectParser.TYPE, new
295             XROIpv6PrefixSubobjectParser()));
296
297         final XROAsNumberSubobjectParser asNumberParser = new XROAsNumberSubobjectParser();
298         regs.add(context.registerXROSubobjectParser(XROAsNumberSubobjectParser.TYPE, asNumberParser));
299         regs.add(context.registerXROSubobjectSerializer(AsNumberCase.class, asNumberParser));
300
301         final XROSrlgSubobjectParser srlgParser = new XROSrlgSubobjectParser();
302         regs.add(context.registerXROSubobjectParser(XROSrlgSubobjectParser.TYPE, srlgParser));
303         regs.add(context.registerXROSubobjectSerializer(SrlgCase.class, srlgParser));
304
305         final XROUnnumberedInterfaceSubobjectParser unnumberedParser = new XROUnnumberedInterfaceSubobjectParser();
306         regs.add(context.registerXROSubobjectParser(XROUnnumberedInterfaceSubobjectParser.TYPE, unnumberedParser));
307         regs.add(context.registerXROSubobjectSerializer(UnnumberedCase.class, unnumberedParser));
308
309         final XROPathKey32SubobjectParser pathKeyParser = new XROPathKey32SubobjectParser();
310         regs.add(context.registerXROSubobjectParser(XROPathKey32SubobjectParser.TYPE, pathKeyParser));
311         regs.add(context.registerXROSubobjectParser(XROPathKey128SubobjectParser.TYPE, new
312             XROPathKey128SubobjectParser()));
313         regs.add(context.registerXROSubobjectSerializer(PathKeyCase.class, pathKeyParser));
314     }
315
316     private static void registerEROParsers(final List<Registration> regs, final RSVPExtensionProviderContext context,
317         final LabelRegistry labelReg) {
318         final EROIpv4PrefixSubobjectParser ipv4prefixParser = new EROIpv4PrefixSubobjectParser();
319         regs.add(context.registerEROSubobjectParser(EROIpv4PrefixSubobjectParser.TYPE, ipv4prefixParser));
320         regs.add(context.registerEROSubobjectSerializer(IpPrefixCase.class, ipv4prefixParser));
321         regs.add(context.registerEROSubobjectParser(EROIpv6PrefixSubobjectParser.TYPE, new
322             EROIpv6PrefixSubobjectParser()));
323
324         final EROAsNumberSubobjectParser asNumberParser = new EROAsNumberSubobjectParser();
325         regs.add(context.registerEROSubobjectParser(EROAsNumberSubobjectParser.TYPE, asNumberParser));
326         regs.add(context.registerEROSubobjectSerializer(AsNumberCase.class, asNumberParser));
327
328         final EROUnnumberedInterfaceSubobjectParser unnumberedParser = new EROUnnumberedInterfaceSubobjectParser();
329         regs.add(context.registerEROSubobjectParser(EROUnnumberedInterfaceSubobjectParser.TYPE, unnumberedParser));
330         regs.add(context.registerEROSubobjectSerializer(UnnumberedCase.class, unnumberedParser));
331
332         final EROPathKey32SubobjectParser pathKeyParser = new EROPathKey32SubobjectParser();
333         regs.add(context.registerEROSubobjectParser(EROPathKey32SubobjectParser.TYPE, pathKeyParser));
334         regs.add(context.registerEROSubobjectParser(EROPathKey128SubobjectParser.TYPE, new
335             EROPathKey128SubobjectParser()));
336         regs.add(context.registerEROSubobjectSerializer(PathKeyCase.class, pathKeyParser));
337
338         final EROLabelSubobjectParser labelParser = new EROLabelSubobjectParser(labelReg);
339         regs.add(context.registerEROSubobjectParser(EROLabelSubobjectParser.TYPE, labelParser));
340         regs.add(context.registerEROSubobjectSerializer(LabelCase.class, labelParser));
341
342         final SERODynamicProtectionSubobjectParser seroDynamicParser = new SERODynamicProtectionSubobjectParser();
343         final SEROBasicProtectionSubobjectParser seroBasicParser = new SEROBasicProtectionSubobjectParser();
344         regs.add(context.registerEROSubobjectParser(SERODynamicProtectionSubobjectParser.TYPE, seroBasicParser));
345         regs.add(context.registerEROSubobjectSerializer(DynamicControlProtectionCase.class, seroDynamicParser));
346         regs.add(context.registerEROSubobjectSerializer(BasicProtectionCase.class, seroBasicParser));
347     }
348 }