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%2FImmutableContainerNodeSchemaAwareBuilder.java;h=6e4a52a07bd7f661e99bf2db8de82fb127ea110a;hb=f4c0b909fc3efc28e71b5dab4ea601f978163f88;hp=5f00539c38acc5bb8f5760e9666548a5507b99c8;hpb=31999de503573f020d4c26d07b4e304e2de2de2d;p=yangtools.git diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableContainerNodeSchemaAwareBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableContainerNodeSchemaAwareBuilder.java index 5f00539c38..6e4a52a07b 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableContainerNodeSchemaAwareBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableContainerNodeSchemaAwareBuilder.java @@ -7,36 +7,48 @@ */ package org.opendaylight.yangtools.yang.data.impl.schema.builder.impl; -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; +import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; 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.impl.schema.builder.impl.valid.DataNodeContainerValidator; -import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; +import org.opendaylight.yangtools.yang.model.api.ContainerLike; public final class ImmutableContainerNodeSchemaAwareBuilder extends ImmutableContainerNodeBuilder { - private final DataNodeContainerValidator validator; - // TODO remove schema aware builders, replace by validator called at build() + private ImmutableContainerNodeSchemaAwareBuilder(final ContainerLike schema) { + this.validator = new DataNodeContainerValidator(schema); + super.withNodeIdentifier(NodeIdentifier.create(schema.getQName())); + } - private ImmutableContainerNodeSchemaAwareBuilder(ContainerSchemaNode schema) { - super(); + private ImmutableContainerNodeSchemaAwareBuilder(final ContainerLike schema, final ImmutableContainerNode node) { + super(node); this.validator = new DataNodeContainerValidator(schema); - super.withNodeIdentifier(new InstanceIdentifier.NodeIdentifier(schema.getQName())); + super.withNodeIdentifier(NodeIdentifier.create(schema.getQName())); } - public static DataContainerNodeBuilder create(ContainerSchemaNode schema) { + public static @NonNull DataContainerNodeBuilder create(final ContainerLike schema) { return new ImmutableContainerNodeSchemaAwareBuilder(schema); } + public static @NonNull DataContainerNodeBuilder create(final ContainerLike schema, + final ContainerNode node) { + if (!(node instanceof ImmutableContainerNode)) { + throw new UnsupportedOperationException(String.format("Cannot initialize from class %s", node.getClass())); + } + return new ImmutableContainerNodeSchemaAwareBuilder(schema, (ImmutableContainerNode)node); + } + @Override - public DataContainerNodeBuilder withNodeIdentifier(InstanceIdentifier.NodeIdentifier nodeIdentifier) { + public DataContainerNodeBuilder withNodeIdentifier( + final NodeIdentifier withNodeIdentifier) { throw new UnsupportedOperationException("Node identifier created from schema"); } @Override - public DataContainerNodeBuilder withChild(DataContainerChild child) { + public DataContainerNodeBuilder withChild(final DataContainerChild child) { validator.validateChild(child.getIdentifier()); return super.withChild(child); }