BUG-2299: allow PCEP extensions to be reconfigured
[bgpcep.git] / pcep / spi / src / main / java / org / opendaylight / controller / config / yang / pcep / spi / ReusablePCEPExtensionProviderContext.java
1 package org.opendaylight.controller.config.yang.pcep.spi;
2
3 import java.util.List;
4 import org.opendaylight.protocol.pcep.spi.EROSubobjectParser;
5 import org.opendaylight.protocol.pcep.spi.EROSubobjectRegistry;
6 import org.opendaylight.protocol.pcep.spi.EROSubobjectSerializer;
7 import org.opendaylight.protocol.pcep.spi.LabelParser;
8 import org.opendaylight.protocol.pcep.spi.LabelRegistry;
9 import org.opendaylight.protocol.pcep.spi.LabelSerializer;
10 import org.opendaylight.protocol.pcep.spi.MessageParser;
11 import org.opendaylight.protocol.pcep.spi.MessageRegistry;
12 import org.opendaylight.protocol.pcep.spi.MessageSerializer;
13 import org.opendaylight.protocol.pcep.spi.ObjectParser;
14 import org.opendaylight.protocol.pcep.spi.ObjectRegistry;
15 import org.opendaylight.protocol.pcep.spi.ObjectSerializer;
16 import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderActivator;
17 import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderContext;
18 import org.opendaylight.protocol.pcep.spi.RROSubobjectParser;
19 import org.opendaylight.protocol.pcep.spi.RROSubobjectRegistry;
20 import org.opendaylight.protocol.pcep.spi.RROSubobjectSerializer;
21 import org.opendaylight.protocol.pcep.spi.TlvParser;
22 import org.opendaylight.protocol.pcep.spi.TlvRegistry;
23 import org.opendaylight.protocol.pcep.spi.TlvSerializer;
24 import org.opendaylight.protocol.pcep.spi.VendorInformationObjectRegistry;
25 import org.opendaylight.protocol.pcep.spi.VendorInformationTlvRegistry;
26 import org.opendaylight.protocol.pcep.spi.XROSubobjectParser;
27 import org.opendaylight.protocol.pcep.spi.XROSubobjectRegistry;
28 import org.opendaylight.protocol.pcep.spi.XROSubobjectSerializer;
29 import org.opendaylight.protocol.pcep.spi.pojo.SimplePCEPExtensionProviderContext;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.iana.rev130816.EnterpriseNumber;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Tlv;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.vendor.information.EnterpriseSpecificInformation;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.SubobjectType;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.LabelType;
37
38 public class ReusablePCEPExtensionProviderContext implements AutoCloseable, PCEPExtensionProviderContext {
39     private final PCEPExtensionProviderContext delegate = new SimplePCEPExtensionProviderContext();
40     private List<PCEPExtensionProviderActivator> currentExtensionDependency;
41
42     @Override
43     public void close() {
44         for (final PCEPExtensionProviderActivator e : this.currentExtensionDependency) {
45             e.stop();
46         }
47     }
48
49     public void start(final List<PCEPExtensionProviderActivator> extensionDependency) {
50         for (final PCEPExtensionProviderActivator e : extensionDependency) {
51             e.start(this.delegate);
52         }
53         this.currentExtensionDependency = extensionDependency;
54     }
55
56     public void reconfigure(final List<PCEPExtensionProviderActivator> extensionDependency) {
57         // Shutdown old ones first
58         for (final PCEPExtensionProviderActivator e : this.currentExtensionDependency) {
59             if (!extensionDependency.contains(e)) {
60                 e.stop();
61             }
62         }
63         // Start new ones
64         for (final PCEPExtensionProviderActivator e : extensionDependency) {
65             if (!this.currentExtensionDependency.contains(e)) {
66                 e.start(this.delegate);
67             }
68         }
69         this.currentExtensionDependency = extensionDependency;
70     }
71
72     @Override
73     public LabelRegistry getLabelHandlerRegistry() {
74         return this.delegate.getLabelHandlerRegistry();
75     }
76
77     @Override
78     public MessageRegistry getMessageHandlerRegistry() {
79         return this.delegate.getMessageHandlerRegistry();
80     }
81
82     @Override
83     public ObjectRegistry getObjectHandlerRegistry() {
84         return this.delegate.getObjectHandlerRegistry();
85     }
86
87     @Override
88     public EROSubobjectRegistry getEROSubobjectHandlerRegistry() {
89         return this.delegate.getEROSubobjectHandlerRegistry();
90     }
91
92     @Override
93     public RROSubobjectRegistry getRROSubobjectHandlerRegistry() {
94         return this.delegate.getRROSubobjectHandlerRegistry();
95     }
96
97     @Override
98     public XROSubobjectRegistry getXROSubobjectHandlerRegistry() {
99         return this.delegate.getXROSubobjectHandlerRegistry();
100     }
101
102     @Override
103     public TlvRegistry getTlvHandlerRegistry() {
104         return this.delegate.getTlvHandlerRegistry();
105     }
106
107     @Override
108     public VendorInformationTlvRegistry getVendorInformationTlvRegistry() {
109         return this.delegate.getVendorInformationTlvRegistry();
110     }
111
112     @Override
113     public VendorInformationObjectRegistry getVendorInformationObjectRegistry() {
114         return this.delegate.getVendorInformationObjectRegistry();
115     }
116
117     @Override
118     public AutoCloseable registerLabelSerializer(final Class<? extends LabelType> labelClass, final LabelSerializer serializer) {
119         return this.delegate.registerLabelSerializer(labelClass, serializer);
120     }
121
122     @Override
123     public AutoCloseable registerLabelParser(final int cType, final LabelParser parser) {
124         return this.delegate.registerLabelParser(cType, parser);
125     }
126
127     @Override
128     public AutoCloseable registerEROSubobjectParser(final int subobjectType, final EROSubobjectParser parser) {
129         return this.delegate.registerEROSubobjectParser(subobjectType, parser);
130     }
131
132     @Override
133     public AutoCloseable registerEROSubobjectSerializer(final Class<? extends SubobjectType> subobjectClass,
134             final EROSubobjectSerializer serializer) {
135         return this.delegate.registerEROSubobjectSerializer(subobjectClass, serializer);
136     }
137
138     @Override
139     public AutoCloseable registerMessageParser(final int messageType, final MessageParser parser) {
140         return this.delegate.registerMessageParser(messageType, parser);
141     }
142
143     @Override
144     public AutoCloseable registerMessageSerializer(final Class<? extends Message> msgClass, final MessageSerializer serializer) {
145         return this.delegate.registerMessageSerializer(msgClass, serializer);
146     }
147
148     @Override
149     public AutoCloseable registerObjectParser(final int objectClass, final int objectType, final ObjectParser parser) {
150         return this.delegate.registerObjectParser(objectClass, objectType, parser);
151     }
152
153     @Override
154     public AutoCloseable registerObjectSerializer(final Class<? extends Object> objClass, final ObjectSerializer serializer) {
155         return this.delegate.registerObjectSerializer(objClass, serializer);
156     }
157
158     @Override
159     public AutoCloseable registerRROSubobjectParser(final int subobjectType, final RROSubobjectParser parser) {
160         return this.delegate.registerRROSubobjectParser(subobjectType, parser);
161     }
162
163     @Override
164     public AutoCloseable registerRROSubobjectSerializer(
165             final Class<? extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.record.route.subobjects.SubobjectType> subobjectClass,
166             final RROSubobjectSerializer serializer) {
167         return this.delegate.registerRROSubobjectSerializer(subobjectClass, serializer);
168     }
169
170     @Override
171     public AutoCloseable registerTlvSerializer(final Class<? extends Tlv> tlvClass, final TlvSerializer serializer) {
172         return this.delegate.registerTlvSerializer(tlvClass, serializer);
173     }
174
175     @Override
176     public AutoCloseable registerTlvParser(final int tlvType, final TlvParser parser) {
177         return this.delegate.registerTlvParser(tlvType, parser);
178     }
179
180     @Override
181     public AutoCloseable registerVendorInformationTlvSerializer(
182             final Class<? extends EnterpriseSpecificInformation> esInformationClass, final TlvSerializer serializer) {
183         return this.delegate.registerVendorInformationTlvSerializer(esInformationClass, serializer);
184     }
185
186     @Override
187     public AutoCloseable registerVendorInformationTlvParser(final EnterpriseNumber enterpriseNumber, final TlvParser parser) {
188         return this.delegate.registerVendorInformationTlvParser(enterpriseNumber, parser);
189     }
190
191     @Override
192     public AutoCloseable registerXROSubobjectSerializer(final Class<? extends SubobjectType> subobjectClass,
193             final XROSubobjectSerializer serializer) {
194         return this.delegate.registerXROSubobjectSerializer(subobjectClass, serializer);
195     }
196
197     @Override
198     public AutoCloseable registerXROSubobjectParser(final int subobjectType, final XROSubobjectParser parser) {
199         return this.delegate.registerXROSubobjectParser(subobjectType, parser);
200     }
201
202     @Override
203     public AutoCloseable registerVendorInformationObjectSerializer(
204             final Class<? extends EnterpriseSpecificInformation> esInformationClass, final ObjectSerializer serializer) {
205         return this.delegate.registerVendorInformationObjectSerializer(esInformationClass, serializer);
206     }
207
208     @Override
209     public AutoCloseable registerVendorInformationObjectParser(final EnterpriseNumber enterpriseNumber, final ObjectParser parser) {
210         return this.delegate.registerVendorInformationObjectParser(enterpriseNumber, parser);
211     }
212 }