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=312361bb4180b76f6b56195bf0892362a65770ef;hb=4a5d26c9de475a4cff151ee4255e027211c2eeb4;hp=ab73930b402f09104d906d21e71f2149e7101db5;hpb=faf92f0f91762e34f2b8c2f4b30ea81eaae52405;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..312361bb41 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,15 +7,14 @@ */ package org.opendaylight.yangtools.yang.data.impl.schema.builder.impl; +import com.google.common.base.Supplier; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; 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.builder.api.DataContainerNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.valid.DataNodeContainerValidator; +import org.opendaylight.yangtools.yang.data.impl.schema.transform.base.SchemaUtils; import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode; -import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; - -import com.google.common.base.Preconditions; public class ImmutableChoiceNodeSchemaAwareBuilder extends ImmutableChoiceNodeBuilder { @@ -35,9 +34,15 @@ public class ImmutableChoiceNodeSchemaAwareBuilder extends ImmutableChoiceNodeBu } @Override - public DataContainerNodeBuilder withChild(DataContainerChild child) { + public DataContainerNodeBuilder withChild(final DataContainerChild child) { if(detectedCase == null) { - detectedCase = detectCase(child); + detectedCase = SchemaUtils.detectCase(schema, child).or(new Supplier() { + @Override + public ChoiceCaseNode get() { + throw new IllegalArgumentException(String.format("Unknown child node: %s, for choice: %s", child.getNodeType(), + schema.getQName())); + } + }); validator = new DataNodeContainerValidator(detectedCase); } @@ -52,19 +57,6 @@ 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) { return new ImmutableChoiceNodeSchemaAwareBuilder(schema); }