Populate SimpleBindingSubTlvsRegistry statically
[bgpcep.git] / bgp / extensions / linkstate / src / main / java / org / opendaylight / protocol / bgp / linkstate / spi / pojo / SimpleBindingSubTlvsRegistry.java
index e0d3807330e7cc7b19ca3dc3167cf666b479c7a2..437c38085905444f8fd75d9afc5370a908edaac1 100644 (file)
@@ -10,6 +10,17 @@ package org.opendaylight.protocol.bgp.linkstate.spi.pojo;
 import io.netty.buffer.ByteBuf;
 import java.util.ArrayList;
 import java.util.List;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.binding.sid.sub.tlvs.BackupUnnumberedParser;
+import org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.binding.sid.sub.tlvs.EroMetricParser;
+import org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.binding.sid.sub.tlvs.Ipv4BackupEro;
+import org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.binding.sid.sub.tlvs.Ipv4EroParser;
+import org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.binding.sid.sub.tlvs.Ipv4PrefixSidParser;
+import org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.binding.sid.sub.tlvs.Ipv6BackupEro;
+import org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.binding.sid.sub.tlvs.Ipv6EroParser;
+import org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.binding.sid.sub.tlvs.Ipv6PrefixSidParser;
+import org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.binding.sid.sub.tlvs.SIDParser;
+import org.opendaylight.protocol.bgp.linkstate.impl.attribute.sr.binding.sid.sub.tlvs.UnnumberedEroParser;
 import org.opendaylight.protocol.bgp.linkstate.spi.BindingSubTlvsParser;
 import org.opendaylight.protocol.bgp.linkstate.spi.BindingSubTlvsSerializer;
 import org.opendaylight.protocol.concepts.HandlerRegistry;
@@ -17,44 +28,85 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.link
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev200120.binding.sid.tlv.BindingSubTlvs;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev200120.binding.sid.tlv.BindingSubTlvsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev200120.binding.sub.tlvs.BindingSubTlv;
-import org.opendaylight.yangtools.concepts.Registration;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev200120.binding.sub.tlvs.binding.sub.tlv.EroMetricCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev200120.binding.sub.tlvs.binding.sub.tlv.Ipv4EroBackupCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev200120.binding.sub.tlvs.binding.sub.tlv.Ipv4EroCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev200120.binding.sub.tlvs.binding.sub.tlv.Ipv6EroBackupCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev200120.binding.sub.tlvs.binding.sub.tlv.Ipv6EroCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev200120.binding.sub.tlvs.binding.sub.tlv.Ipv6PrefixSidCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev200120.binding.sub.tlvs.binding.sub.tlv.PrefixSidCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev200120.binding.sub.tlvs.binding.sub.tlv.SidLabelCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev200120.binding.sub.tlvs.binding.sub.tlv.UnnumberedInterfaceIdBackupEroCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.segment.routing.ext.rev200120.binding.sub.tlvs.binding.sub.tlv.UnnumberedInterfaceIdEroCase;
 import org.opendaylight.yangtools.yang.binding.DataContainer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public final class SimpleBindingSubTlvsRegistry {
     private static final Logger LOG = LoggerFactory.getLogger(SimpleBindingSubTlvsRegistry.class);
-    private static final SimpleBindingSubTlvsRegistry SINGLETON = new SimpleBindingSubTlvsRegistry();
+    private static final @NonNull SimpleBindingSubTlvsRegistry INSTANCE = new SimpleBindingSubTlvsRegistry();
+
     private final HandlerRegistry<DataContainer, BindingSubTlvsParser, BindingSubTlvsSerializer> handlers =
             new HandlerRegistry<>();
 
     private SimpleBindingSubTlvsRegistry() {
-    }
+        final SIDParser sidParser = new SIDParser();
+        handlers.registerParser(sidParser.getType(), sidParser);
+        handlers.registerSerializer(SidLabelCase.class, sidParser);
 
+        final Ipv4PrefixSidParser prefixSidParser = new Ipv4PrefixSidParser();
+        handlers.registerParser(prefixSidParser.getType(), prefixSidParser);
+        handlers.registerSerializer(PrefixSidCase.class, prefixSidParser);
 
-    public static SimpleBindingSubTlvsRegistry getInstance() {
-        return SINGLETON;
-    }
+        final Ipv6PrefixSidParser ipv6PrefixSidParser = new Ipv6PrefixSidParser();
+        handlers.registerParser(ipv6PrefixSidParser.getType(), ipv6PrefixSidParser);
+        handlers.registerSerializer(Ipv6PrefixSidCase.class, ipv6PrefixSidParser);
+
+        final EroMetricParser eroMetricParser = new EroMetricParser();
+        handlers.registerParser(eroMetricParser.getType(), eroMetricParser);
+        handlers.registerSerializer(EroMetricCase.class, eroMetricParser);
+
+        final Ipv4EroParser ipv4EroParser = new Ipv4EroParser();
+        handlers.registerParser(ipv4EroParser.getType(), ipv4EroParser);
+        handlers.registerSerializer(Ipv4EroCase.class, ipv4EroParser);
 
-    public Registration registerBindingSubTlvsParser(final int bindingSubTlvsType, final BindingSubTlvsParser parser) {
-        return this.handlers.registerParser(bindingSubTlvsType, parser);
+        final Ipv4BackupEro ipv4BackupEro = new Ipv4BackupEro();
+        handlers.registerParser(ipv4BackupEro.getType(), ipv4BackupEro);
+        handlers.registerSerializer(Ipv4EroBackupCase.class, ipv4BackupEro);
+
+        final Ipv6EroParser ipv6EroParser = new Ipv6EroParser();
+        handlers.registerParser(ipv6EroParser.getType(), ipv6EroParser);
+        handlers.registerSerializer(Ipv6EroCase.class, ipv6EroParser);
+
+        final Ipv6BackupEro ipv6BackupEro = new Ipv6BackupEro();
+        handlers.registerParser(ipv6BackupEro.getType(), ipv6BackupEro);
+        handlers.registerSerializer(Ipv6EroBackupCase.class, ipv6BackupEro);
+
+        final UnnumberedEroParser unnumberedEroParser = new UnnumberedEroParser();
+        handlers.registerParser(unnumberedEroParser.getType(), unnumberedEroParser);
+        handlers.registerSerializer(UnnumberedInterfaceIdEroCase.class, unnumberedEroParser);
+
+        final BackupUnnumberedParser backupUnnumberedParser = new BackupUnnumberedParser();
+        handlers.registerParser(backupUnnumberedParser.getType(), backupUnnumberedParser);
+        handlers.registerSerializer(UnnumberedInterfaceIdBackupEroCase.class, backupUnnumberedParser);
     }
 
-    public Registration registerBindingSubTlvsSerializer(final Class<? extends BindingSubTlv> esiType,
-            final BindingSubTlvsSerializer serializer) {
-        return this.handlers.registerSerializer(esiType, serializer);
+    public static @NonNull SimpleBindingSubTlvsRegistry getInstance() {
+        return INSTANCE;
     }
 
     public void serializeBindingSubTlvs(final List<BindingSubTlvs> bindingSubTlvs, final ByteBuf aggregator) {
-        for (final BindingSubTlvs subTlv : bindingSubTlvs) {
-            final BindingSubTlv bindingSubTlv = subTlv.getBindingSubTlv();
-            final BindingSubTlvsSerializer serializer = this.handlers.getSerializer(
-                bindingSubTlv.implementedInterface());
-            if (serializer == null) {
-                LOG.info("Unknown binding sub Tlv type {}", subTlv);
-                return;
+        if (bindingSubTlvs != null) {
+            for (final BindingSubTlvs subTlv : bindingSubTlvs) {
+                final BindingSubTlv bindingSubTlv = subTlv.getBindingSubTlv();
+                final BindingSubTlvsSerializer serializer = handlers.getSerializer(
+                    bindingSubTlv.implementedInterface());
+                if (serializer == null) {
+                    LOG.info("Unknown binding sub Tlv type {}", subTlv);
+                    return;
+                }
+                serializer.serializeSubTlv(bindingSubTlv, aggregator);
             }
-            serializer.serializeSubTlv(bindingSubTlv, aggregator);
         }
     }