X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-data-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Fimpl%2Fschema%2Fbuilder%2Fimpl%2FImmutableAugmentationNodeBuilder.java;h=e445f42fb630f23e68a66ba5ed5d44c4678c2acc;hb=1e24596294bdc2a57a808b77a2d9862198e4f46e;hp=481ddb09ff181a5fec4ea2271e24d846b066b526;hpb=6e5d0f5533b9c7eb029f477a5fe2f74b0c8882e8;p=yangtools.git 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 481ddb09ff..e445f42fb6 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 @@ -8,44 +8,83 @@ package org.opendaylight.yangtools.yang.data.impl.schema.builder.impl; import java.util.Map; - -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; +import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.valid.DataValidationException; import org.opendaylight.yangtools.yang.data.impl.schema.nodes.AbstractImmutableDataContainerNode; -import com.google.common.base.Preconditions; - public class ImmutableAugmentationNodeBuilder - extends AbstractImmutableDataContainerNodeBuilder { + extends AbstractImmutableDataContainerNodeBuilder { + + protected ImmutableAugmentationNodeBuilder() { + } + + protected ImmutableAugmentationNodeBuilder(final int sizeHint) { + super(sizeHint); + } + + public ImmutableAugmentationNodeBuilder(final ImmutableAugmentationNode node) { + super(node); + } - public static DataContainerNodeBuilder create() { + public static @NonNull DataContainerNodeBuilder create() { return new ImmutableAugmentationNodeBuilder(); } + public static @NonNull DataContainerNodeBuilder create( + final int sizeHint) { + return new ImmutableAugmentationNodeBuilder(sizeHint); + } + + public static @NonNull DataContainerNodeBuilder create( + final AugmentationNode node) { + if (!(node instanceof ImmutableAugmentationNode)) { + throw new UnsupportedOperationException(String.format("Cannot initialize from class %s", node.getClass())); + } + + return new ImmutableAugmentationNodeBuilder((ImmutableAugmentationNode)node); + } + @Override - public DataContainerNodeBuilder withChild( - DataContainerChild child) { + public DataContainerNodeBuilder withChild( + final DataContainerChild child) { // Check nested augments - Preconditions.checkArgument(child instanceof AugmentationNode == false, - "Unable to add: %s, as a child for: %s, Nested augmentations are not permitted", child.getNodeType(), - nodeIdentifier == null ? this : nodeIdentifier); + if (child instanceof AugmentationNode) { + final AugmentationIdentifier myId = getNodeIdentifier(); + throw new DataValidationException(String.format( + "Unable to add: %s, as a child for: %s, Nested augmentations are not permitted", child.getIdentifier(), + myId == null ? this : myId)); + } return super.withChild(child); } + @Override + public DataContainerNodeBuilder withoutChild(final PathArgument key) { + return super.withoutChild(key); + } + @Override public AugmentationNode build() { - return new ImmutableAugmentationNode(nodeIdentifier, value); + return new ImmutableAugmentationNode(getNodeIdentifier(), buildValue()); } - static final class ImmutableAugmentationNode - extends AbstractImmutableDataContainerNode + private static final class ImmutableAugmentationNode + extends AbstractImmutableDataContainerNode implements AugmentationNode { - ImmutableAugmentationNode(InstanceIdentifier.AugmentationIdentifier nodeIdentifier, Map> children) { + ImmutableAugmentationNode(final AugmentationIdentifier nodeIdentifier, + final Map children) { super(children, nodeIdentifier); } + + @Override + protected Class implementedType() { + return AugmentationNode.class; + } } }