X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=data%2Fyang-data-util%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Futil%2FChoiceNodeContextNode.java;h=c2b3d694ea43fea7aad8d5e6f0cd81b90dc8209b;hb=6e3a97a77736137f798bd712ae2652e13df07935;hp=a93d1f1883b8b3900dea5fe6351b434687ae3517;hpb=33c637e8cca6b731c2a75af4a2698f750d1e9b03;p=yangtools.git diff --git a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ChoiceNodeContextNode.java b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ChoiceNodeContextNode.java index a93d1f1883..c2b3d694ea 100644 --- a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ChoiceNodeContextNode.java +++ b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ChoiceNodeContextNode.java @@ -7,21 +7,28 @@ */ package org.opendaylight.yangtools.yang.data.util; +import static com.google.common.base.Verify.verifyNotNull; + import com.google.common.collect.ImmutableMap; import java.util.Set; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode; import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; +import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; final class ChoiceNodeContextNode extends AbstractMixinContextNode { - private final ImmutableMap> byQName; private final ImmutableMap> byArg; + private final ImmutableMap> byQName; + private final ImmutableMap, QName> childToCase; ChoiceNodeContextNode(final ChoiceSchemaNode schema) { super(NodeIdentifier.create(schema.getQName()), schema); + ImmutableMap.Builder, QName> childToCaseBuilder = ImmutableMap.builder(); ImmutableMap.Builder> byQNameBuilder = ImmutableMap.builder(); ImmutableMap.Builder> byArgBuilder = ImmutableMap.builder(); @@ -29,11 +36,14 @@ final class ChoiceNodeContextNode extends AbstractMixinContextNode childOp = DataSchemaContextNode.of(cazeChild); byArgBuilder.put(childOp.getIdentifier(), childOp); + childToCaseBuilder.put(childOp, caze.getQName()); for (QName qname : childOp.getQNameIdentifiers()) { byQNameBuilder.put(qname, childOp); } } } + + childToCase = childToCaseBuilder.build(); byQName = byQNameBuilder.build(); byArg = byArgBuilder.build(); } @@ -52,4 +62,29 @@ final class ChoiceNodeContextNode extends AbstractMixinContextNode getQNameIdentifiers() { return byQName.keySet(); } -} + + @Override + protected DataSchemaContextNode enterChild(final QName child, final SchemaInferenceStack stack) { + return pushToStack(getChild(child), stack); + } + + @Override + protected DataSchemaContextNode enterChild(final PathArgument child, final SchemaInferenceStack stack) { + return pushToStack(getChild(child), stack); + } + + @Override + protected void pushToStack(final @NonNull SchemaInferenceStack stack) { + stack.enterChoice(getIdentifier().getNodeType()); + } + + private @Nullable DataSchemaContextNode pushToStack(final @Nullable DataSchemaContextNode child, + final @NonNull SchemaInferenceStack stack) { + if (child != null) { + final var caseName = verifyNotNull(childToCase.get(child), "No case statement for %s in %s", child, this); + stack.enterSchemaTree(caseName); + child.pushToStack(stack); + } + return child; + } +} \ No newline at end of file