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.CSubobject;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.SubobjectType;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.LabelType;
48 public final class PCEPExtensionProviderContextImpl implements PCEPExtensionProviderContext {
49 private static final class Holder {
50 private static final PCEPExtensionProviderContext INSTANCE;
54 INSTANCE = PCEPExtensionProviderContextImpl.create();
55 } catch (final Exception e) {
56 throw new ExceptionInInitializerError(e);
61 private final SimpleLabelHandlerRegistry labelReg = new SimpleLabelHandlerRegistry();
62 private final SimpleMessageHandlerRegistry msgReg = new SimpleMessageHandlerRegistry();
63 private final SimpleObjectHandlerRegistry objReg = new SimpleObjectHandlerRegistry();
64 private final SimpleEROSubobjectHandlerRegistry eroSubReg = new SimpleEROSubobjectHandlerRegistry();
65 private final SimpleRROSubobjectHandlerRegistry rroSubReg = new SimpleRROSubobjectHandlerRegistry();
66 private final SimpleXROSubobjectHandlerRegistry xroSubReg = new SimpleXROSubobjectHandlerRegistry();
67 private final SimpleTlvHandlerRegistry tlvReg = new SimpleTlvHandlerRegistry();
69 protected PCEPExtensionProviderContextImpl() {
73 public static PCEPExtensionProviderContext create() throws Exception {
74 final PCEPExtensionProviderContext ctx = new PCEPExtensionProviderContextImpl();
76 final ServiceLoader<PCEPExtensionProviderActivator> loader = ServiceLoader.load(PCEPExtensionProviderActivator.class);
77 for (final PCEPExtensionProviderActivator a : loader) {
85 public static PCEPExtensionProviderContext getSingletonInstance() {
86 return Holder.INSTANCE;
90 public LabelHandlerRegistry getLabelHandlerRegistry() {
95 public MessageHandlerRegistry getMessageHandlerRegistry() {
100 public ObjectHandlerRegistry getObjectHandlerRegistry() {
105 public EROSubobjectHandlerRegistry getEROSubobjectHandlerRegistry() {
106 return this.eroSubReg;
110 public RROSubobjectHandlerRegistry getRROSubobjectHandlerRegistry() {
111 return this.rroSubReg;
115 public XROSubobjectHandlerRegistry getXROSubobjectHandlerRegistry() {
116 return this.xroSubReg;
120 public TlvHandlerRegistry getTlvHandlerRegistry() {
125 public AutoCloseable registerLabelSerializer(final Class<? extends LabelType> labelClass, final LabelSerializer serializer) {
126 return this.labelReg.registerLabelSerializer(labelClass, serializer);
130 public AutoCloseable registerLabelParser(final int cType, final LabelParser parser) {
131 return this.labelReg.registerLabelParser(cType, parser);
135 public AutoCloseable registerEROSubobjectParser(final int subobjectType, final EROSubobjectParser parser) {
136 return this.eroSubReg.registerSubobjectParser(subobjectType, parser);
140 public AutoCloseable registerEROSubobjectSerializer(final Class<? extends SubobjectType> subobjectClass,
141 final EROSubobjectSerializer serializer) {
142 return this.eroSubReg.registerSubobjectSerializer(subobjectClass, serializer);
146 public AutoCloseable registerMessageParser(final int messageType, final MessageParser parser) {
147 return this.msgReg.registerMessageParser(messageType, parser);
151 public AutoCloseable registerMessageSerializer(final Class<? extends Message> msgClass, final MessageSerializer serializer) {
152 return this.msgReg.registerMessageSerializer(msgClass, serializer);
156 public AutoCloseable registerObjectParser(final int objectClass, final int objectType, final ObjectParser parser) {
157 return this.objReg.registerObjectParser(objectClass, objectType, parser);
161 public AutoCloseable registerObjectSerializer(final Class<? extends Object> objClass, final ObjectSerializer serializer) {
162 return this.objReg.registerObjectSerializer(objClass, serializer);
166 public AutoCloseable registerRROSubobjectParser(final int subobjectType, final RROSubobjectParser parser) {
167 return this.rroSubReg.registerSubobjectParser(subobjectType, parser);
171 public AutoCloseable registerRROSubobjectSerializer(final Class<? extends CSubobject> 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);