From 0863fff8d65c6034f90f3e09366a853c7e1db8ca Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 4 Aug 2014 09:27:34 +0200 Subject: [PATCH] BUG-1275: teach NormalizedNode builders about size hints 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 --- ...ImmutableDataContainerNodeAttrBuilder.java | 10 ++++++---- ...ractImmutableDataContainerNodeBuilder.java | 8 ++++++-- .../ImmutableAugmentationNodeBuilder.java | 19 ++++++++++++------- .../impl/ImmutableChoiceNodeBuilder.java | 14 ++++++++++---- .../impl/ImmutableContainerNodeBuilder.java | 13 ++++++++++--- .../impl/ImmutableMapEntryNodeBuilder.java | 17 +++++++++++++---- .../ImmutableUnkeyedListEntryNodeBuilder.java | 14 ++++++++++---- 7 files changed, 67 insertions(+), 28 deletions(-) diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/AbstractImmutableDataContainerNodeAttrBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/AbstractImmutableDataContainerNodeAttrBuilder.java index 3a1a176b81..e6f081b3d6 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/AbstractImmutableDataContainerNodeAttrBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/AbstractImmutableDataContainerNodeAttrBuilder.java @@ -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> - extends AbstractImmutableDataContainerNodeBuilder - implements DataContainerNodeAttrBuilder { - +abstract class AbstractImmutableDataContainerNodeAttrBuilder> extends AbstractImmutableDataContainerNodeBuilder implements DataContainerNodeAttrBuilder { private Map attributes; protected AbstractImmutableDataContainerNodeAttrBuilder() { this.attributes = Collections.emptyMap(); } + protected AbstractImmutableDataContainerNodeAttrBuilder(final int sizeHint) { + super(sizeHint); + this.attributes = Collections.emptyMap(); + } + protected AbstractImmutableDataContainerNodeAttrBuilder(final AbstractImmutableDataContainerAttrNode node) { super(node); this.attributes = node.getAttributes(); diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/AbstractImmutableDataContainerNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/AbstractImmutableDataContainerNodeBuilder.java index 21303e62da..bb271684e9 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/AbstractImmutableDataContainerNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/AbstractImmutableDataContainerNodeBuilder.java @@ -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> - implements DataContainerNodeBuilder { +abstract class AbstractImmutableDataContainerNodeBuilder> implements DataContainerNodeBuilder { private Map> value; private I nodeIdentifier; @@ -38,6 +37,11 @@ abstract class AbstractImmutableDataContainerNodeBuilder(sizeHint); + this.dirty = false; + } + protected AbstractImmutableDataContainerNodeBuilder(final AbstractImmutableDataContainerNode node) { this.nodeIdentifier = node.getIdentifier(); this.value = node.getChildren(); diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableAugmentationNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableAugmentationNodeBuilder.java index a21530f784..ecc0d6534f 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableAugmentationNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableAugmentationNodeBuilder.java @@ -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 { +public class ImmutableAugmentationNodeBuilder extends AbstractImmutableDataContainerNodeBuilder { 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 create(AugmentationNode node) { + public static DataContainerNodeBuilder create(final int sizeHint) { + return new ImmutableAugmentationNodeBuilder(sizeHint); + } + + public static DataContainerNodeBuilder 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 - implements AugmentationNode { + private static final class ImmutableAugmentationNode extends AbstractImmutableDataContainerNode implements AugmentationNode { ImmutableAugmentationNode(final YangInstanceIdentifier.AugmentationIdentifier nodeIdentifier, final Map> children) { super(children, nodeIdentifier); diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableChoiceNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableChoiceNodeBuilder.java index 8375fae86c..f94abe84a6 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableChoiceNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableChoiceNodeBuilder.java @@ -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 create(final int sizeHint) { + return new ImmutableChoiceNodeBuilder(sizeHint); + } + public static DataContainerNodeBuilder 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 - implements ChoiceNode { + private static final class ImmutableChoiceNode extends AbstractImmutableDataContainerNode implements ChoiceNode { ImmutableChoiceNode(final YangInstanceIdentifier.NodeIdentifier nodeIdentifier, - final Map> children) { + final Map> children) { super(children, nodeIdentifier); } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableContainerNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableContainerNodeBuilder.java index 288f3671f3..467571245e 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableContainerNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableContainerNodeBuilder.java @@ -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 { +public class ImmutableContainerNodeBuilder extends AbstractImmutableDataContainerNodeAttrBuilder { 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 create(final int sizeHint) { + return new ImmutableContainerNodeBuilder(sizeHint); + } + public static DataContainerNodeAttrBuilder 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 implements ContainerNode { + AbstractImmutableDataContainerAttrNode implements ContainerNode { ImmutableContainerNode( final YangInstanceIdentifier.NodeIdentifier nodeIdentifier, diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableMapEntryNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableMapEntryNodeBuilder.java index cd9e6effb3..a23b070140 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableMapEntryNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableMapEntryNodeBuilder.java @@ -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 { +public class ImmutableMapEntryNodeBuilder extends AbstractImmutableDataContainerNodeAttrBuilder { protected final Map 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 create(final int sizeHint) { + return new ImmutableMapEntryNodeBuilder(sizeHint); + } + public static DataContainerNodeAttrBuilder 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 implements MapEntryNode { ImmutableMapEntryNode(final YangInstanceIdentifier.NodeIdentifierWithPredicates nodeIdentifier, - final Map> children, final Map attributes) { + final Map> children, final Map attributes) { super(children, nodeIdentifier, attributes); } } diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableUnkeyedListEntryNodeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableUnkeyedListEntryNodeBuilder.java index 8952c2c580..30b5c78c16 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableUnkeyedListEntryNodeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableUnkeyedListEntryNodeBuilder.java @@ -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 { +public class ImmutableUnkeyedListEntryNodeBuilder extends AbstractImmutableDataContainerNodeAttrBuilder { 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 create(final int sizeHint) { + return new ImmutableUnkeyedListEntryNodeBuilder(sizeHint); + } + public static DataContainerNodeAttrBuilder 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 implements UnkeyedListEntryNode { + protected static final class ImmutableUnkeyedListEntryNode extends AbstractImmutableDataContainerAttrNode implements UnkeyedListEntryNode { ImmutableUnkeyedListEntryNode( final YangInstanceIdentifier.NodeIdentifier nodeIdentifier, -- 2.36.6