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%2FImmutableChoiceNodeSchemaAwareBuilder.java;h=d4627c9c75006df0d7c26e6621aafc382db8e462;hb=9d74a74a9d46ff8c6878bc7d76994782d938cddc;hp=ab73930b402f09104d906d21e71f2149e7101db5;hpb=9ce137d85d9e1b113015145ef227311e49f79215;p=yangtools.git diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableChoiceNodeSchemaAwareBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableChoiceNodeSchemaAwareBuilder.java index ab73930b40..d4627c9c75 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableChoiceNodeSchemaAwareBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/builder/impl/ImmutableChoiceNodeSchemaAwareBuilder.java @@ -7,43 +7,45 @@ */ package org.opendaylight.yangtools.yang.data.impl.schema.builder.impl; -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; +import static java.util.Objects.requireNonNull; + +import java.util.Optional; +import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; +import org.opendaylight.yangtools.yang.data.impl.schema.SchemaUtils; 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.ChoiceCaseNode; -import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; - -import com.google.common.base.Preconditions; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.valid.DataValidationException; +import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode; +import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode; +@Deprecated(since = "6.0.7", forRemoval = true) public class ImmutableChoiceNodeSchemaAwareBuilder extends ImmutableChoiceNodeBuilder { - - private final org.opendaylight.yangtools.yang.model.api.ChoiceNode schema; - private ChoiceCaseNode detectedCase; + private final ChoiceSchemaNode schema; private DataNodeContainerValidator validator; - protected ImmutableChoiceNodeSchemaAwareBuilder(org.opendaylight.yangtools.yang.model.api.ChoiceNode schema) { - super(); - this.schema = schema; - super.withNodeIdentifier(new InstanceIdentifier.NodeIdentifier(schema.getQName())); + protected ImmutableChoiceNodeSchemaAwareBuilder(final ChoiceSchemaNode schema) { + this.schema = requireNonNull(schema, "Schema was null"); + super.withNodeIdentifier(NodeIdentifier.create(schema.getQName())); } @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) { - if(detectedCase == null) { - detectedCase = detectCase(child); - validator = new DataNodeContainerValidator(detectedCase); + public DataContainerNodeBuilder withChild(final DataContainerChild child) { + if (validator == null) { + Optional detectedCaseOpt = SchemaUtils.detectCase(schema, child); + DataValidationException.checkLegalChild(detectedCaseOpt.isPresent(), child.getIdentifier(), schema); + validator = new DataNodeContainerValidator(detectedCaseOpt.get()); } - validator.validateChild(child.getIdentifier()); - - return super.withChild(child); + return super.withChild(validator.validateChild(child)); } @Override @@ -52,20 +54,7 @@ public class ImmutableChoiceNodeSchemaAwareBuilder extends ImmutableChoiceNodeBu return super.build(); } - private ChoiceCaseNode detectCase(DataContainerChild child) { - for (ChoiceCaseNode choiceCaseNode : schema.getCases()) { - for (DataSchemaNode childFromCase : choiceCaseNode.getChildNodes()) { - if (childFromCase.getQName().equals(child.getNodeType())) { - return choiceCaseNode; - } - } - } - - throw new IllegalArgumentException(String.format("Unknown child node: %s, for choice: %s", child.getNodeType(), - schema.getQName())); - } - - public static DataContainerNodeBuilder create(org.opendaylight.yangtools.yang.model.api.ChoiceNode schema) { + public static @NonNull DataContainerNodeBuilder create(final ChoiceSchemaNode schema) { return new ImmutableChoiceNodeSchemaAwareBuilder(schema); } }