Use templates for predicates 79/78179/3
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 26 Nov 2018 09:48:50 +0000 (10:48 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 26 Nov 2018 22:43:07 +0000 (23:43 +0100)
This speeds up instantiation slightly.

Change-Id: I325ff2e7ffe197553d922abd0169d5b21e15e483
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
bgp/rib-spi/pom.xml
bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/IdentifierUtils.java
bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/RibSupportUtils.java

index 0a3a267b2f095b5bf1b3fffe7d43a7438a6862ce..376cec0405c0fa9192786735b8065cbc1ba42d50 100644 (file)
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>concepts</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>util</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.opendaylight.controller</groupId>
             <artifactId>sal-core-api</artifactId>
index 26f87d9f7e35b066e56e569e69c34c043b4554f2..0ceca75b76a3e61baf120e1349ac7cda31962849 100644 (file)
@@ -13,6 +13,7 @@ import com.google.common.collect.Iterables;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.PeerId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.bgp.rib.rib.Peer;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.Tables;
+import org.opendaylight.yangtools.util.SharedSingletonMapTemplate;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
@@ -24,6 +25,8 @@ public final class IdentifierUtils {
     private static final Predicate<PathArgument> IS_TABLES = input -> input
             instanceof NodeIdentifierWithPredicates && Tables.QNAME.equals(input.getNodeType());
     private static final QName PEER_ID = QName.create(Peer.QNAME, "peer-id").intern();
+    private static final SharedSingletonMapTemplate<QName> PEER_ID_TEMPLATE =
+            SharedSingletonMapTemplate.ordered(PEER_ID);
 
     private IdentifierUtils() {
         throw new UnsupportedOperationException();
@@ -69,6 +72,6 @@ public final class IdentifierUtils {
     }
 
     public static NodeIdentifierWithPredicates domPeerId(final PeerId peer) {
-        return new NodeIdentifierWithPredicates(Peer.QNAME, PEER_ID, peer.getValue());
+        return new NodeIdentifierWithPredicates(Peer.QNAME, PEER_ID_TEMPLATE.instantiateWithValue(peer.getValue()));
     }
 }
index f4578c216d857a11e2d9a82c2d75554ed44bffcf..9489dfc620beaa4bd19286f0a84581cc7b18829f 100644 (file)
@@ -7,7 +7,7 @@
  */
 package org.opendaylight.protocol.bgp.rib.spi;
 
-import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableList;
 import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.BgpAddPathTableType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.bgp.rib.rib.peer.SupportedTablesKey;
@@ -15,15 +15,18 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.AddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.SubsequentAddressFamily;
+import org.opendaylight.yangtools.util.ImmutableOffsetMapTemplate;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
 
 public final class RibSupportUtils {
+    private static final ImmutableOffsetMapTemplate<QName> AFI_SAFI_TEMPLATE =
+            ImmutableOffsetMapTemplate.ordered(ImmutableList.of(QName.create(Tables.QNAME, "afi").intern(),
+                QName.create(Tables.QNAME, "safi").intern()));
 
-    private static final QName AFI_QNAME = QName.create(Tables.QNAME, "afi").intern();
-    private static final QName SAFI_QNAME = QName.create(Tables.QNAME, "safi").intern();
-    private static final QName ADD_PATH_AFI_QNAME = QName.create(BgpAddPathTableType.QNAME, "afi").intern();
-    private static final QName ADD_PATH_SAFI_QNAME = QName.create(BgpAddPathTableType.QNAME, "safi").intern();
+    private static final ImmutableOffsetMapTemplate<QName> ADD_PATH_AFI_SAFI_TEMPLATE =
+            ImmutableOffsetMapTemplate.ordered(ImmutableList.of(QName.create(BgpAddPathTableType.QNAME, "afi").intern(),
+                QName.create(BgpAddPathTableType.QNAME, "safi").intern()));
 
     private RibSupportUtils() {
         throw new UnsupportedOperationException("Utility class");
@@ -51,13 +54,10 @@ public final class RibSupportUtils {
      */
     public static NodeIdentifierWithPredicates toYangKey(final QName id, final Class<? extends AddressFamily> afi,
             final Class<? extends SubsequentAddressFamily> safi) {
-        final ImmutableMap<QName, Object> keyValues = ImmutableMap.of(
-                AFI_QNAME, BindingReflections.findQName(afi),
-                SAFI_QNAME, BindingReflections.findQName(safi));
-        return new NodeIdentifierWithPredicates(id, keyValues);
+        return new NodeIdentifierWithPredicates(id, AFI_SAFI_TEMPLATE.instantiateWithValues(
+            BindingReflections.findQName(afi), BindingReflections.findQName(safi)));
     }
 
-
     /**
      * Creates Yang Instance Identifier path argument from supplied AFI and SAFI.
      *
@@ -68,10 +68,8 @@ public final class RibSupportUtils {
      */
     public static NodeIdentifierWithPredicates toYangPathKey(final QName id, final Class<? extends AddressFamily> afi,
             final Class<? extends SubsequentAddressFamily> safi) {
-        final ImmutableMap<QName, Object> keyValues = ImmutableMap.of(
-                ADD_PATH_AFI_QNAME, BindingReflections.findQName(afi),
-                ADD_PATH_SAFI_QNAME, BindingReflections.findQName(safi));
-        return new NodeIdentifierWithPredicates(id, keyValues);
+        return new NodeIdentifierWithPredicates(id, ADD_PATH_AFI_SAFI_TEMPLATE.instantiateWithValues(
+            BindingReflections.findQName(afi), BindingReflections.findQName(safi)));
     }
 
     /**