BUG-50 : added tests for IRO and RRO subobjects.
[bgpcep.git] / pcep / spi / src / main / java / org / opendaylight / protocol / pcep / spi / pojo / PCEPExtensionProviderContextImpl.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.pcep.spi.pojo;
9
10 import java.util.ServiceLoader;
11
12 import javax.annotation.concurrent.ThreadSafe;
13
14 import org.opendaylight.protocol.pcep.spi.EROSubobjectHandlerRegistry;
15 import org.opendaylight.protocol.pcep.spi.EROSubobjectParser;
16 import org.opendaylight.protocol.pcep.spi.EROSubobjectSerializer;
17 import org.opendaylight.protocol.pcep.spi.LabelHandlerRegistry;
18 import org.opendaylight.protocol.pcep.spi.LabelParser;
19 import org.opendaylight.protocol.pcep.spi.LabelSerializer;
20 import org.opendaylight.protocol.pcep.spi.MessageHandlerRegistry;
21 import org.opendaylight.protocol.pcep.spi.MessageParser;
22 import org.opendaylight.protocol.pcep.spi.MessageSerializer;
23 import org.opendaylight.protocol.pcep.spi.ObjectHandlerRegistry;
24 import org.opendaylight.protocol.pcep.spi.ObjectParser;
25 import org.opendaylight.protocol.pcep.spi.ObjectSerializer;
26 import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderActivator;
27 import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderContext;
28 import org.opendaylight.protocol.pcep.spi.RROSubobjectHandlerRegistry;
29 import org.opendaylight.protocol.pcep.spi.RROSubobjectParser;
30 import org.opendaylight.protocol.pcep.spi.RROSubobjectSerializer;
31 import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
32 import org.opendaylight.protocol.pcep.spi.TlvParser;
33 import org.opendaylight.protocol.pcep.spi.TlvSerializer;
34 import org.opendaylight.protocol.pcep.spi.XROSubobjectHandlerRegistry;
35 import org.opendaylight.protocol.pcep.spi.XROSubobjectParser;
36 import org.opendaylight.protocol.pcep.spi.XROSubobjectSerializer;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Tlv;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.SubobjectType;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.LabelType;
42
43 /**
44  *
45  */
46 @ThreadSafe
47 public final class PCEPExtensionProviderContextImpl implements PCEPExtensionProviderContext {
48         private static final class Holder {
49                 private static final PCEPExtensionProviderContext INSTANCE;
50
51                 static {
52                         try {
53                                 INSTANCE = PCEPExtensionProviderContextImpl.create();
54                         } catch (final Exception e) {
55                                 throw new ExceptionInInitializerError(e);
56                         }
57                 }
58         }
59
60         private final SimpleLabelHandlerRegistry labelReg = new SimpleLabelHandlerRegistry();
61         private final SimpleMessageHandlerRegistry msgReg = new SimpleMessageHandlerRegistry();
62         private final SimpleObjectHandlerRegistry objReg = new SimpleObjectHandlerRegistry();
63         private final SimpleEROSubobjectHandlerRegistry eroSubReg = new SimpleEROSubobjectHandlerRegistry();
64         private final SimpleRROSubobjectHandlerRegistry rroSubReg = new SimpleRROSubobjectHandlerRegistry();
65         private final SimpleXROSubobjectHandlerRegistry xroSubReg = new SimpleXROSubobjectHandlerRegistry();
66         private final SimpleTlvHandlerRegistry tlvReg = new SimpleTlvHandlerRegistry();
67
68         protected PCEPExtensionProviderContextImpl() {
69
70         }
71
72         public static PCEPExtensionProviderContext create() throws Exception {
73                 final PCEPExtensionProviderContext ctx = new PCEPExtensionProviderContextImpl();
74
75                 final ServiceLoader<PCEPExtensionProviderActivator> loader = ServiceLoader.load(PCEPExtensionProviderActivator.class);
76                 for (final PCEPExtensionProviderActivator a : loader) {
77                         a.start(ctx);
78                 }
79
80                 return ctx;
81
82         }
83
84         public static PCEPExtensionProviderContext getSingletonInstance() {
85                 return Holder.INSTANCE;
86         }
87
88         @Override
89         public LabelHandlerRegistry getLabelHandlerRegistry() {
90                 return this.labelReg;
91         }
92
93         @Override
94         public MessageHandlerRegistry getMessageHandlerRegistry() {
95                 return this.msgReg;
96         }
97
98         @Override
99         public ObjectHandlerRegistry getObjectHandlerRegistry() {
100                 return this.objReg;
101         }
102
103         @Override
104         public EROSubobjectHandlerRegistry getEROSubobjectHandlerRegistry() {
105                 return this.eroSubReg;
106         }
107
108         @Override
109         public RROSubobjectHandlerRegistry getRROSubobjectHandlerRegistry() {
110                 return this.rroSubReg;
111         }
112
113         @Override
114         public XROSubobjectHandlerRegistry getXROSubobjectHandlerRegistry() {
115                 return this.xroSubReg;
116         }
117
118         @Override
119         public TlvHandlerRegistry getTlvHandlerRegistry() {
120                 return this.tlvReg;
121         }
122
123         @Override
124         public AutoCloseable registerLabelSerializer(final Class<? extends LabelType> labelClass, final LabelSerializer serializer) {
125                 return this.labelReg.registerLabelSerializer(labelClass, serializer);
126         }
127
128         @Override
129         public AutoCloseable registerLabelParser(final int cType, final LabelParser parser) {
130                 return this.labelReg.registerLabelParser(cType, parser);
131         }
132
133         @Override
134         public AutoCloseable registerEROSubobjectParser(final int subobjectType, final EROSubobjectParser parser) {
135                 return this.eroSubReg.registerSubobjectParser(subobjectType, parser);
136         }
137
138         @Override
139         public AutoCloseable registerEROSubobjectSerializer(final Class<? extends SubobjectType> subobjectClass,
140                         final EROSubobjectSerializer serializer) {
141                 return this.eroSubReg.registerSubobjectSerializer(subobjectClass, serializer);
142         }
143
144         @Override
145         public AutoCloseable registerMessageParser(final int messageType, final MessageParser parser) {
146                 return this.msgReg.registerMessageParser(messageType, parser);
147         }
148
149         @Override
150         public AutoCloseable registerMessageSerializer(final Class<? extends Message> msgClass, final MessageSerializer serializer) {
151                 return this.msgReg.registerMessageSerializer(msgClass, serializer);
152         }
153
154         @Override
155         public AutoCloseable registerObjectParser(final int objectClass, final int objectType, final ObjectParser parser) {
156                 return this.objReg.registerObjectParser(objectClass, objectType, parser);
157         }
158
159         @Override
160         public AutoCloseable registerObjectSerializer(final Class<? extends Object> objClass, final ObjectSerializer serializer) {
161                 return this.objReg.registerObjectSerializer(objClass, serializer);
162         }
163
164         @Override
165         public AutoCloseable registerRROSubobjectParser(final int subobjectType, final RROSubobjectParser parser) {
166                 return this.rroSubReg.registerSubobjectParser(subobjectType, parser);
167         }
168
169         @Override
170         public AutoCloseable registerRROSubobjectSerializer(
171                         final Class<? extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.record.route.subobjects.SubobjectType> subobjectClass,
172                         final RROSubobjectSerializer serializer) {
173                 return this.rroSubReg.registerSubobjectSerializer(subobjectClass, serializer);
174         }
175
176         @Override
177         public AutoCloseable registerTlvParser(final int tlvType, final TlvParser parser) {
178                 return this.tlvReg.registerTlvParser(tlvType, parser);
179         }
180
181         @Override
182         public AutoCloseable registerTlvSerializer(final Class<? extends Tlv> tlvClass, final TlvSerializer serializer) {
183                 return this.tlvReg.registerTlvSerializer(tlvClass, serializer);
184         }
185
186         @Override
187         public AutoCloseable registerXROSubobjectParser(final int subobjectType, final XROSubobjectParser parser) {
188                 return this.xroSubReg.registerSubobjectParser(subobjectType, parser);
189         }
190
191         @Override
192         public AutoCloseable registerXROSubobjectSerializer(final Class<? extends SubobjectType> subobjectClass,
193                         final XROSubobjectSerializer serializer) {
194                 return this.xroSubReg.registerSubobjectSerializer(subobjectClass, serializer);
195         }
196 }