Populate SimpleBindingSubTlvsRegistry statically 77/93777/2
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 11 Nov 2020 10:55:25 +0000 (11:55 +0100)
committerRobert Varga <nite@hq.sk>
Wed, 11 Nov 2020 14:51:25 +0000 (14:51 +0000)
This is a standalone dispatch registry. Wire it statically as a
first step before we optimize it.

Change-Id: I107fc20024b83dcc4b086fae5e0caa5f012e0ca0
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
bgp/extensions/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/impl/BGPActivator.java
bgp/extensions/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/spi/pojo/SimpleBindingSubTlvsRegistry.java

index 9f983461353b7aa54964fe538c671adc7cbb5eea..275f67013b2ceac4ceacd408de965fa90d357f08 100644 (file)
@@ -12,16 +12,6 @@ import java.util.ArrayList;
 import java.util.List;
 import org.kohsuke.MetaInfServices;
 import org.opendaylight.protocol.bgp.linkstate.impl.attribute.LinkstateAttributeParser;
-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.impl.nlri.Ipv4PrefixNlriParser;
 import org.opendaylight.protocol.bgp.linkstate.impl.nlri.Ipv6PrefixNlriParser;
 import org.opendaylight.protocol.bgp.linkstate.impl.nlri.LinkNlriParser;
@@ -47,7 +37,6 @@ import org.opendaylight.protocol.bgp.linkstate.impl.tlvs.OspfRouteTlvParser;
 import org.opendaylight.protocol.bgp.linkstate.impl.tlvs.ReachTlvParser;
 import org.opendaylight.protocol.bgp.linkstate.impl.tlvs.RemoteNodeDescriptorTlvParser;
 import org.opendaylight.protocol.bgp.linkstate.impl.tlvs.RouterIdTlvParser;
-import org.opendaylight.protocol.bgp.linkstate.spi.pojo.SimpleBindingSubTlvsRegistry;
 import org.opendaylight.protocol.bgp.linkstate.spi.pojo.SimpleNlriTypeRegistry;
 import org.opendaylight.protocol.bgp.parser.spi.AbstractBGPExtensionProviderActivator;
 import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionProviderActivator;
@@ -62,16 +51,6 @@ 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.linkstate.rev200120.linkstate.object.type.PrefixCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev200120.linkstate.object.type.TeLspCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev200120.linkstate.routes.LinkstateRoutes;
-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.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.next.hop.c.next.hop.Ipv4NextHopCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.next.hop.c.next.hop.Ipv6NextHopCase;
 import org.opendaylight.yangtools.concepts.Registration;
@@ -121,56 +100,9 @@ public final class BGPActivator extends AbstractBGPExtensionProviderActivator {
 
         registerNlriCodecs(regs, nlriTypeReg);
         registerNlriTlvCodecs(regs, nlriTypeReg);
-        registerBindingSubTlvs(regs);
         return regs;
     }
 
-    private static void registerBindingSubTlvs(final List<Registration> regs) {
-        final SimpleBindingSubTlvsRegistry simpleReg = SimpleBindingSubTlvsRegistry.getInstance();
-
-        final SIDParser sidParser = new SIDParser();
-        regs.add(simpleReg.registerBindingSubTlvsParser(sidParser.getType(), sidParser));
-        regs.add(simpleReg.registerBindingSubTlvsSerializer(SidLabelCase.class, sidParser));
-
-        final Ipv4PrefixSidParser prefixSidParser = new Ipv4PrefixSidParser();
-        regs.add(simpleReg.registerBindingSubTlvsParser(prefixSidParser.getType(), prefixSidParser));
-        regs.add(simpleReg.registerBindingSubTlvsSerializer(PrefixSidCase.class, prefixSidParser));
-
-        final Ipv6PrefixSidParser ipv6PrefixSidParser = new Ipv6PrefixSidParser();
-        regs.add(simpleReg.registerBindingSubTlvsParser(ipv6PrefixSidParser.getType(), ipv6PrefixSidParser));
-        regs.add(simpleReg.registerBindingSubTlvsSerializer(Ipv6PrefixSidCase.class, ipv6PrefixSidParser));
-
-        final EroMetricParser eroMetricParser = new EroMetricParser();
-        regs.add(simpleReg.registerBindingSubTlvsParser(eroMetricParser.getType(), eroMetricParser));
-        regs.add(simpleReg.registerBindingSubTlvsSerializer(EroMetricCase.class, eroMetricParser));
-
-        final Ipv4EroParser ipv4EroParser = new Ipv4EroParser();
-        regs.add(simpleReg.registerBindingSubTlvsParser(ipv4EroParser.getType(), ipv4EroParser));
-        regs.add(simpleReg.registerBindingSubTlvsSerializer(Ipv4EroCase.class, ipv4EroParser));
-
-        final Ipv4BackupEro ipv4BackupEro = new Ipv4BackupEro();
-        regs.add(simpleReg.registerBindingSubTlvsParser(ipv4BackupEro.getType(), ipv4BackupEro));
-        regs.add(simpleReg.registerBindingSubTlvsSerializer(Ipv4EroBackupCase.class, ipv4BackupEro));
-
-        final Ipv6EroParser ipv6EroParser = new Ipv6EroParser();
-        regs.add(simpleReg.registerBindingSubTlvsParser(ipv6EroParser.getType(), ipv6EroParser));
-        regs.add(simpleReg.registerBindingSubTlvsSerializer(Ipv6EroCase.class, ipv6EroParser));
-
-        final Ipv6BackupEro ipv6BackupEro = new Ipv6BackupEro();
-        regs.add(simpleReg.registerBindingSubTlvsParser(ipv6BackupEro.getType(), ipv6BackupEro));
-        regs.add(simpleReg.registerBindingSubTlvsSerializer(Ipv6EroBackupCase.class, ipv6BackupEro));
-
-        final UnnumberedEroParser unnumberedEroParser = new UnnumberedEroParser();
-        regs.add(simpleReg.registerBindingSubTlvsParser(unnumberedEroParser.getType(), unnumberedEroParser));
-        regs.add(simpleReg.registerBindingSubTlvsSerializer(UnnumberedInterfaceIdEroCase.class,
-            unnumberedEroParser));
-
-        final BackupUnnumberedParser backupUnnumberedParser = new BackupUnnumberedParser();
-        regs.add(simpleReg.registerBindingSubTlvsParser(backupUnnumberedParser.getType(), backupUnnumberedParser));
-        regs.add(simpleReg.registerBindingSubTlvsSerializer(UnnumberedInterfaceIdBackupEroCase.class,
-            backupUnnumberedParser));
-    }
-
     private static void registerNlriCodecs(final List<Registration> regs, final SimpleNlriTypeRegistry nlriTypeReg) {
 
         final NodeNlriParser nodeParser = new NodeNlriParser();
index 29e6822c502fc82d1dbb4c1a17937453dada4fd5..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,38 +28,78 @@ 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);
 
-    public static SimpleBindingSubTlvsRegistry getInstance() {
-        return SINGLETON;
-    }
+        final Ipv4PrefixSidParser prefixSidParser = new Ipv4PrefixSidParser();
+        handlers.registerParser(prefixSidParser.getType(), prefixSidParser);
+        handlers.registerSerializer(PrefixSidCase.class, prefixSidParser);
+
+        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);
+
+        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);
 
-    public Registration registerBindingSubTlvsParser(final int bindingSubTlvsType, final BindingSubTlvsParser parser) {
-        return this.handlers.registerParser(bindingSubTlvsType, parser);
+        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) {
         if (bindingSubTlvs != null) {
             for (final BindingSubTlvs subTlv : bindingSubTlvs) {
                 final BindingSubTlv bindingSubTlv = subTlv.getBindingSubTlv();
-                final BindingSubTlvsSerializer serializer = this.handlers.getSerializer(
+                final BindingSubTlvsSerializer serializer = handlers.getSerializer(
                     bindingSubTlv.implementedInterface());
                 if (serializer == null) {
                     LOG.info("Unknown binding sub Tlv type {}", subTlv);