BUG-1275: teach NormalizedNode builders about size hints 38/9638/1
authorRobert Varga <rovarga@cisco.com>
Mon, 4 Aug 2014 07:27:34 +0000 (09:27 +0200)
committerRobert Varga <rovarga@cisco.com>
Mon, 4 Aug 2014 07:27:34 +0000 (09:27 +0200)
With the upcoming codec work we will be able to offer sizing hints
when instantiating normalized nodes. This patch exposes the methods to
pass those hints down to the implementation maps, so they can size
themselves.

Change-Id: Idbc39bda3937d11c89b89807bd253afca5d775f7
Signed-off-by: Robert Varga <rovarga@cisco.com>
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/AbstractImmutableDataContainerNodeAttrBuilder.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/AbstractImmutableDataContainerNodeBuilder.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableAugmentationNodeBuilder.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableChoiceNodeBuilder.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableContainerNodeBuilder.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableMapEntryNodeBuilder.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableUnkeyedListEntryNodeBuilder.java

index 3a1a176b8133696d5f72cfc19cbb4b9a42d86922..e6f081b3d6251d438d941e658c52c3a16b454c8f 100644 (file)
@@ -18,16 +18,18 @@ import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.nodes.AbstractImmutableDataContainerAttrNode;
 
-abstract class AbstractImmutableDataContainerNodeAttrBuilder<I extends YangInstanceIdentifier.PathArgument, R extends DataContainerNode<I>>
-        extends AbstractImmutableDataContainerNodeBuilder<I, R>
-        implements DataContainerNodeAttrBuilder<I, R> {
-
+abstract class AbstractImmutableDataContainerNodeAttrBuilder<I extends YangInstanceIdentifier.PathArgument, R extends DataContainerNode<I>> extends AbstractImmutableDataContainerNodeBuilder<I, R> implements DataContainerNodeAttrBuilder<I, R> {
     private Map<QName, String> attributes;
 
     protected AbstractImmutableDataContainerNodeAttrBuilder() {
         this.attributes = Collections.emptyMap();
     }
 
+    protected AbstractImmutableDataContainerNodeAttrBuilder(final int sizeHint) {
+        super(sizeHint);
+        this.attributes = Collections.emptyMap();
+    }
+
     protected AbstractImmutableDataContainerNodeAttrBuilder(final AbstractImmutableDataContainerAttrNode<I> node) {
         super(node);
         this.attributes = node.getAttributes();
index 21303e62dac4e9d718275b7851878f48af4997b6..bb271684e967494043c1d13a7ff4f88d64856168 100644 (file)
@@ -19,8 +19,7 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContaine
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.nodes.AbstractImmutableDataContainerNode;
 
-abstract class AbstractImmutableDataContainerNodeBuilder<I extends YangInstanceIdentifier.PathArgument, R extends DataContainerNode<I>>
-        implements DataContainerNodeBuilder<I, R> {
+abstract class AbstractImmutableDataContainerNodeBuilder<I extends YangInstanceIdentifier.PathArgument, R extends DataContainerNode<I>> implements DataContainerNodeBuilder<I, R> {
 
     private Map<YangInstanceIdentifier.PathArgument, DataContainerChild<? extends YangInstanceIdentifier.PathArgument, ?>> value;
     private I nodeIdentifier;
@@ -38,6 +37,11 @@ abstract class AbstractImmutableDataContainerNodeBuilder<I extends YangInstanceI
         this.dirty = false;
     }
 
+    protected AbstractImmutableDataContainerNodeBuilder(final int sizeHint) {
+        this.value = new HashMap<>(sizeHint);
+        this.dirty = false;
+    }
+
     protected AbstractImmutableDataContainerNodeBuilder(final AbstractImmutableDataContainerNode<I> node) {
         this.nodeIdentifier = node.getIdentifier();
         this.value = node.getChildren();
index a21530f7847bddce2649d25b166252fe554e5a8f..ecc0d6534fde16dfd04c8cb0d26726d84fbbf914 100644 (file)
@@ -18,14 +18,17 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContaine
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.valid.DataValidationException;
 import org.opendaylight.yangtools.yang.data.impl.schema.nodes.AbstractImmutableDataContainerNode;
 
-public class ImmutableAugmentationNodeBuilder
-        extends AbstractImmutableDataContainerNodeBuilder<YangInstanceIdentifier.AugmentationIdentifier, AugmentationNode> {
+public class ImmutableAugmentationNodeBuilder extends AbstractImmutableDataContainerNodeBuilder<YangInstanceIdentifier.AugmentationIdentifier, AugmentationNode> {
 
     protected ImmutableAugmentationNodeBuilder() {
         super();
     }
 
-    public ImmutableAugmentationNodeBuilder(ImmutableAugmentationNode node) {
+    protected ImmutableAugmentationNodeBuilder(final int sizeHint) {
+        super(sizeHint);
+    }
+
+    public ImmutableAugmentationNodeBuilder(final ImmutableAugmentationNode node) {
         super(node);
     }
 
@@ -33,7 +36,11 @@ public class ImmutableAugmentationNodeBuilder
         return new ImmutableAugmentationNodeBuilder();
     }
 
-    public static DataContainerNodeBuilder<YangInstanceIdentifier.AugmentationIdentifier, AugmentationNode> create(AugmentationNode node) {
+    public static DataContainerNodeBuilder<YangInstanceIdentifier.AugmentationIdentifier, AugmentationNode> create(final int sizeHint) {
+        return new ImmutableAugmentationNodeBuilder(sizeHint);
+    }
+
+    public static DataContainerNodeBuilder<YangInstanceIdentifier.AugmentationIdentifier, AugmentationNode> create(final AugmentationNode node) {
         if (!(node instanceof ImmutableAugmentationNode)) {
             throw new UnsupportedOperationException(String.format("Cannot initialize from class %s", node.getClass()));
         }
@@ -62,9 +69,7 @@ public class ImmutableAugmentationNodeBuilder
         return new ImmutableAugmentationNode(getNodeIdentifier(), buildValue());
     }
 
-    private static final class ImmutableAugmentationNode
-            extends AbstractImmutableDataContainerNode<YangInstanceIdentifier.AugmentationIdentifier>
-            implements AugmentationNode {
+    private static final class ImmutableAugmentationNode extends AbstractImmutableDataContainerNode<YangInstanceIdentifier.AugmentationIdentifier> implements AugmentationNode {
 
         ImmutableAugmentationNode(final YangInstanceIdentifier.AugmentationIdentifier nodeIdentifier, final Map<YangInstanceIdentifier.PathArgument, DataContainerChild<? extends YangInstanceIdentifier.PathArgument, ?>> children) {
             super(children, nodeIdentifier);
index 8375fae86ca4aa18ce70dd0328d2b515d50371c5..f94abe84a6911f5a03dd7901c4ecdbcf0a836582 100644 (file)
@@ -21,6 +21,10 @@ public class ImmutableChoiceNodeBuilder extends AbstractImmutableDataContainerNo
         super();
     }
 
+    protected ImmutableChoiceNodeBuilder(final int sizeHint) {
+        super(sizeHint);
+    }
+
     protected ImmutableChoiceNodeBuilder(final ImmutableChoiceNode node) {
         super(node);
     }
@@ -29,6 +33,10 @@ public class ImmutableChoiceNodeBuilder extends AbstractImmutableDataContainerNo
         return new ImmutableChoiceNodeBuilder();
     }
 
+    public static DataContainerNodeBuilder<YangInstanceIdentifier.NodeIdentifier, ChoiceNode> create(final int sizeHint) {
+        return new ImmutableChoiceNodeBuilder(sizeHint);
+    }
+
     public static DataContainerNodeBuilder<YangInstanceIdentifier.NodeIdentifier, ChoiceNode> create(final ChoiceNode node) {
         if (!(node instanceof ImmutableChoiceNode)) {
             throw new UnsupportedOperationException(String.format("Cannot initialize from class %s", node.getClass()));
@@ -42,12 +50,10 @@ public class ImmutableChoiceNodeBuilder extends AbstractImmutableDataContainerNo
         return new ImmutableChoiceNode(getNodeIdentifier(), buildValue());
     }
 
-    private static final class ImmutableChoiceNode
-            extends AbstractImmutableDataContainerNode<YangInstanceIdentifier.NodeIdentifier>
-            implements ChoiceNode {
+    private static final class ImmutableChoiceNode extends AbstractImmutableDataContainerNode<YangInstanceIdentifier.NodeIdentifier> implements ChoiceNode {
 
         ImmutableChoiceNode(final YangInstanceIdentifier.NodeIdentifier nodeIdentifier,
-                            final Map<YangInstanceIdentifier.PathArgument, DataContainerChild<? extends YangInstanceIdentifier.PathArgument, ?>> children) {
+                final Map<YangInstanceIdentifier.PathArgument, DataContainerChild<? extends YangInstanceIdentifier.PathArgument, ?>> children) {
             super(children, nodeIdentifier);
         }
     }
index 288f3671f382a11c61bc8f27eba03363739f5237..467571245e8ebcea254635dea4038e77fbd36218 100644 (file)
@@ -16,13 +16,16 @@ import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.nodes.AbstractImmutableDataContainerAttrNode;
 
-public class ImmutableContainerNodeBuilder extends
-        AbstractImmutableDataContainerNodeAttrBuilder<YangInstanceIdentifier.NodeIdentifier, ContainerNode> {
+public class ImmutableContainerNodeBuilder extends AbstractImmutableDataContainerNodeAttrBuilder<YangInstanceIdentifier.NodeIdentifier, ContainerNode> {
 
     protected ImmutableContainerNodeBuilder() {
         super();
     }
 
+    protected ImmutableContainerNodeBuilder(final int sizeHint) {
+        super(sizeHint);
+    }
+
     protected ImmutableContainerNodeBuilder(final ImmutableContainerNode node) {
         super(node);
     }
@@ -31,6 +34,10 @@ public class ImmutableContainerNodeBuilder extends
         return new ImmutableContainerNodeBuilder();
     }
 
+    public static DataContainerNodeAttrBuilder<YangInstanceIdentifier.NodeIdentifier, ContainerNode> create(final int sizeHint) {
+        return new ImmutableContainerNodeBuilder(sizeHint);
+    }
+
     public static DataContainerNodeAttrBuilder<YangInstanceIdentifier.NodeIdentifier, ContainerNode> create(final ContainerNode node) {
         if (!(node instanceof ImmutableContainerNode)) {
             throw new UnsupportedOperationException(String.format("Cannot initialize from class %s", node.getClass()));
@@ -44,7 +51,7 @@ public class ImmutableContainerNodeBuilder extends
     }
 
     protected static final class ImmutableContainerNode extends
-            AbstractImmutableDataContainerAttrNode<YangInstanceIdentifier.NodeIdentifier> implements ContainerNode {
+    AbstractImmutableDataContainerAttrNode<YangInstanceIdentifier.NodeIdentifier> implements ContainerNode {
 
         ImmutableContainerNode(
                 final YangInstanceIdentifier.NodeIdentifier nodeIdentifier,
index cd9e6effb3fe3c1e0225148c1d3c6efec90cd6e7..a23b070140f1cbc48c85bd50f16dacae51942178 100644 (file)
@@ -20,15 +20,20 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContaine
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.valid.DataValidationException;
 import org.opendaylight.yangtools.yang.data.impl.schema.nodes.AbstractImmutableDataContainerAttrNode;
 
-public class ImmutableMapEntryNodeBuilder
-        extends AbstractImmutableDataContainerNodeAttrBuilder<YangInstanceIdentifier.NodeIdentifierWithPredicates, MapEntryNode> {
+public class ImmutableMapEntryNodeBuilder extends AbstractImmutableDataContainerNodeAttrBuilder<YangInstanceIdentifier.NodeIdentifierWithPredicates, MapEntryNode> {
 
     protected final Map<QName, YangInstanceIdentifier.PathArgument> childrenQNamesToPaths;
 
     protected ImmutableMapEntryNodeBuilder() {
+        super();
         this.childrenQNamesToPaths = new LinkedHashMap<>();
     }
 
+    protected ImmutableMapEntryNodeBuilder(final int sizeHint) {
+        super(sizeHint);
+        this.childrenQNamesToPaths = new LinkedHashMap<>(sizeHint);
+    }
+
     protected ImmutableMapEntryNodeBuilder(final ImmutableMapEntryNode node) {
         super(node);
         this.childrenQNamesToPaths = new LinkedHashMap<>();
@@ -39,6 +44,10 @@ public class ImmutableMapEntryNodeBuilder
         return new ImmutableMapEntryNodeBuilder();
     }
 
+    public static DataContainerNodeAttrBuilder<YangInstanceIdentifier.NodeIdentifierWithPredicates, MapEntryNode> create(final int sizeHint) {
+        return new ImmutableMapEntryNodeBuilder(sizeHint);
+    }
+
     public static DataContainerNodeAttrBuilder<YangInstanceIdentifier.NodeIdentifierWithPredicates, MapEntryNode> create(final MapEntryNode node) {
         if (!(node instanceof ImmutableMapEntryNode)) {
             throw new UnsupportedOperationException(String.format("Cannot initialize from class %s", node.getClass()));
@@ -67,7 +76,7 @@ public class ImmutableMapEntryNodeBuilder
         return super.withValue(value);
     }
 
-    private static boolean isAugment(YangInstanceIdentifier.PathArgument identifier) {
+    private static boolean isAugment(final YangInstanceIdentifier.PathArgument identifier) {
         return identifier instanceof YangInstanceIdentifier.AugmentationIdentifier;
     }
 
@@ -97,7 +106,7 @@ public class ImmutableMapEntryNodeBuilder
     private static final class ImmutableMapEntryNode extends AbstractImmutableDataContainerAttrNode<YangInstanceIdentifier.NodeIdentifierWithPredicates> implements MapEntryNode {
 
         ImmutableMapEntryNode(final YangInstanceIdentifier.NodeIdentifierWithPredicates nodeIdentifier,
-                              final Map<YangInstanceIdentifier.PathArgument, DataContainerChild<? extends YangInstanceIdentifier.PathArgument, ?>> children, final Map<QName, String> attributes) {
+                final Map<YangInstanceIdentifier.PathArgument, DataContainerChild<? extends YangInstanceIdentifier.PathArgument, ?>> children, final Map<QName, String> attributes) {
             super(children, nodeIdentifier, attributes);
         }
     }
index 8952c2c58086cc09e345801a9a22d894ecd06c7d..30b5c78c1616bc0e7756943c707d0dfceb50fd47 100644 (file)
@@ -16,13 +16,16 @@ import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.nodes.AbstractImmutableDataContainerAttrNode;
 
-public class ImmutableUnkeyedListEntryNodeBuilder extends
-        AbstractImmutableDataContainerNodeAttrBuilder<YangInstanceIdentifier.NodeIdentifier, UnkeyedListEntryNode> {
+public class ImmutableUnkeyedListEntryNodeBuilder extends AbstractImmutableDataContainerNodeAttrBuilder<YangInstanceIdentifier.NodeIdentifier, UnkeyedListEntryNode> {
 
     protected ImmutableUnkeyedListEntryNodeBuilder() {
         super();
     }
 
+    protected ImmutableUnkeyedListEntryNodeBuilder(final int sizeHint) {
+        super(sizeHint);
+    }
+
     protected ImmutableUnkeyedListEntryNodeBuilder(final ImmutableUnkeyedListEntryNode node) {
         super(node);
     }
@@ -31,6 +34,10 @@ public class ImmutableUnkeyedListEntryNodeBuilder extends
         return new ImmutableUnkeyedListEntryNodeBuilder();
     }
 
+    public static DataContainerNodeAttrBuilder<YangInstanceIdentifier.NodeIdentifier, UnkeyedListEntryNode> create(final int sizeHint) {
+        return new ImmutableUnkeyedListEntryNodeBuilder(sizeHint);
+    }
+
     public static DataContainerNodeAttrBuilder<YangInstanceIdentifier.NodeIdentifier, UnkeyedListEntryNode> create(final UnkeyedListEntryNode node) {
         if (!(node instanceof ImmutableUnkeyedListEntryNode)) {
             throw new UnsupportedOperationException(String.format("Cannot initialize from class %s", node.getClass()));
@@ -43,8 +50,7 @@ public class ImmutableUnkeyedListEntryNodeBuilder extends
         return new ImmutableUnkeyedListEntryNode(getNodeIdentifier(), buildValue(), getAttributes());
     }
 
-    protected static final class ImmutableUnkeyedListEntryNode extends
-            AbstractImmutableDataContainerAttrNode<YangInstanceIdentifier.NodeIdentifier> implements UnkeyedListEntryNode {
+    protected static final class ImmutableUnkeyedListEntryNode extends AbstractImmutableDataContainerAttrNode<YangInstanceIdentifier.NodeIdentifier> implements UnkeyedListEntryNode {
 
         ImmutableUnkeyedListEntryNode(
                 final YangInstanceIdentifier.NodeIdentifier nodeIdentifier,