2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.protocol.pcep.spi.pojo;
10 import java.util.ServiceLoader;
12 import javax.annotation.concurrent.ThreadSafe;
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;
47 public final class PCEPExtensionProviderContextImpl implements PCEPExtensionProviderContext {
48 private static final class Holder {
49 private static final PCEPExtensionProviderContext INSTANCE;
53 INSTANCE = PCEPExtensionProviderContextImpl.create();
54 } catch (final Exception e) {
55 throw new ExceptionInInitializerError(e);
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();
68 protected PCEPExtensionProviderContextImpl() {
72 public static PCEPExtensionProviderContext create() throws Exception {
73 final PCEPExtensionProviderContext ctx = new PCEPExtensionProviderContextImpl();
75 final ServiceLoader<PCEPExtensionProviderActivator> loader = ServiceLoader.load(PCEPExtensionProviderActivator.class);
76 for (final PCEPExtensionProviderActivator a : loader) {
84 public static PCEPExtensionProviderContext getSingletonInstance() {
85 return Holder.INSTANCE;
89 public LabelHandlerRegistry getLabelHandlerRegistry() {
94 public MessageHandlerRegistry getMessageHandlerRegistry() {
99 public ObjectHandlerRegistry getObjectHandlerRegistry() {
104 public EROSubobjectHandlerRegistry getEROSubobjectHandlerRegistry() {
105 return this.eroSubReg;
109 public RROSubobjectHandlerRegistry getRROSubobjectHandlerRegistry() {
110 return this.rroSubReg;
114 public XROSubobjectHandlerRegistry getXROSubobjectHandlerRegistry() {
115 return this.xroSubReg;
119 public TlvHandlerRegistry getTlvHandlerRegistry() {
124 public AutoCloseable registerLabelSerializer(final Class<? extends LabelType> labelClass, final LabelSerializer serializer) {
125 return this.labelReg.registerLabelSerializer(labelClass, serializer);
129 public AutoCloseable registerLabelParser(final int cType, final LabelParser parser) {
130 return this.labelReg.registerLabelParser(cType, parser);
134 public AutoCloseable registerEROSubobjectParser(final int subobjectType, final EROSubobjectParser parser) {
135 return this.eroSubReg.registerSubobjectParser(subobjectType, parser);
139 public AutoCloseable registerEROSubobjectSerializer(final Class<? extends SubobjectType> subobjectClass,
140 final EROSubobjectSerializer serializer) {
141 return this.eroSubReg.registerSubobjectSerializer(subobjectClass, serializer);
145 public AutoCloseable registerMessageParser(final int messageType, final MessageParser parser) {
146 return this.msgReg.registerMessageParser(messageType, parser);
150 public AutoCloseable registerMessageSerializer(final Class<? extends Message> msgClass, final MessageSerializer serializer) {
151 return this.msgReg.registerMessageSerializer(msgClass, serializer);
155 public AutoCloseable registerObjectParser(final int objectClass, final int objectType, final ObjectParser parser) {
156 return this.objReg.registerObjectParser(objectClass, objectType, parser);
160 public AutoCloseable registerObjectSerializer(final Class<? extends Object> objClass, final ObjectSerializer serializer) {
161 return this.objReg.registerObjectSerializer(objClass, serializer);
165 public AutoCloseable registerRROSubobjectParser(final int subobjectType, final RROSubobjectParser parser) {
166 return this.rroSubReg.registerSubobjectParser(subobjectType, parser);
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);
177 public AutoCloseable registerTlvParser(final int tlvType, final TlvParser parser) {
178 return this.tlvReg.registerTlvParser(tlvType, parser);
182 public AutoCloseable registerTlvSerializer(final Class<? extends Tlv> tlvClass, final TlvSerializer serializer) {
183 return this.tlvReg.registerTlvSerializer(tlvClass, serializer);
187 public AutoCloseable registerXROSubobjectParser(final int subobjectType, final XROSubobjectParser parser) {
188 return this.xroSubReg.registerSubobjectParser(subobjectType, parser);
192 public AutoCloseable registerXROSubobjectSerializer(final Class<? extends SubobjectType> subobjectClass,
193 final XROSubobjectSerializer serializer) {
194 return this.xroSubReg.registerSubobjectSerializer(subobjectClass, serializer);