X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=binding%2Fmdsal-binding-dom-codec%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fbinding%2Fdom%2Fcodec%2Fimpl%2FAbstractDataObjectCodecContext.java;h=83e9b0f721511dafc0b1aa28e148adba2ddac910;hb=889d6606afceea88af3884ee340008c0f8810496;hp=0afa5e63e45a932d1ba14757198ffe58c21c7cda;hpb=74ef67db283874e6024413355267120c77a6095c;p=mdsal.git diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/AbstractDataObjectCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/AbstractDataObjectCodecContext.java index 0afa5e63e4..83e9b0f721 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/AbstractDataObjectCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/AbstractDataObjectCodecContext.java @@ -17,7 +17,7 @@ import org.opendaylight.mdsal.binding.dom.codec.api.IncorrectNestingException; import org.opendaylight.mdsal.binding.runtime.api.CompositeRuntimeType; import org.opendaylight.yangtools.yang.binding.Augmentation; import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.DataObjectStep; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode; @@ -43,8 +43,8 @@ import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus; public abstract sealed class AbstractDataObjectCodecContext extends CommonDataObjectCodecContext permits AugmentationCodecContext, DataObjectCodecContext { - private final ImmutableMap, CommonDataObjectCodecPrototype> byBindingArgClass; - private final ImmutableMap, CommonDataObjectCodecPrototype> byStreamClass; + private final ImmutableMap, DataContainerPrototype> byBindingArgClass; + private final ImmutableMap, DataContainerPrototype> byStreamClass; private final ImmutableMap byYang; private final ImmutableMap leafChild; @@ -60,42 +60,32 @@ public abstract sealed class AbstractDataObjectCodecContext streamChildPrototype(final Class childClass) { + DataContainerPrototype streamChildPrototype(final Class childClass) { return byStreamClass.get(childClass); } @Override - public final CommonDataObjectCodecContext bindingPathArgumentChild(final InstanceIdentifier.PathArgument arg, + public final CommonDataObjectCodecContext bindingPathArgumentChild(final DataObjectStep step, final List builder) { - final var argType = arg.getType(); - final var context = childNonNull(pathChildPrototype(argType), argType, - "Class %s is not valid child of %s", argType, getBindingClass()) + final var type = step.type(); + final var context = childNonNull(pathChildPrototype(type), type, + "Class %s is not valid child of %s", type, getBindingClass()) .getCodecContext(); - if (context instanceof ChoiceCodecContext choice) { - choice.addYangPathArgument(arg, builder); - - final var caseType = arg.getCaseType(); - final var type = arg.getType(); - final DataContainerCodecContext caze; - if (caseType.isPresent()) { - // Non-ambiguous addressing this should not pose any problems - caze = choice.getStreamChild(caseType.orElseThrow()); - } else { - caze = choice.getCaseByChildClass(type); - } - - caze.addYangPathArgument(arg, builder); - return caze.bindingPathArgumentChild(arg, builder); + context.addYangPathArgument(step, builder); + if (context instanceof CommonDataObjectCodecContext dataObject) { + return dataObject; + } else if (context instanceof ChoiceCodecContext choice) { + return choice.bindingPathArgumentChild(step, builder); + } else { + throw new IllegalStateException("Unhandled context " + context); } - context.addYangPathArgument(arg, builder); - return context; } - @Nullable CommonDataObjectCodecPrototype pathChildPrototype(final @NonNull Class argType) { + @Nullable DataContainerPrototype pathChildPrototype(final @NonNull Class argType) { return byBindingArgClass.get(argType); }