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=65394235dd76559feeb04737c84ac930ce0d81c9;hb=f3be50ed801e5de305eb46b824e6bc3c6075e4bc;hp=d0b87666a43a61509f3c6367f3380ffa4b825af9;hpb=258e272a3de877caddeebc9940eb34b4b303cecb;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 d0b87666a4..65394235dd 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 @@ -7,10 +7,8 @@ */ package org.opendaylight.mdsal.binding.dom.codec.impl; -import com.google.common.base.Throwables; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; -import java.lang.invoke.MethodHandle; import java.util.List; import java.util.Map; import org.eclipse.jdt.annotation.NonNull; @@ -45,30 +43,28 @@ 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; - private final MethodHandle proxyConstructor; AbstractDataObjectCodecContext(final CommonDataObjectCodecPrototype prototype, - final CodecDataObjectAnalysis analysis) { + final DataContainerAnalysis analysis) { super(prototype); byBindingArgClass = analysis.byBindingArgClass; byStreamClass = analysis.byStreamClass; byYang = analysis.byYang; leafChild = analysis.leafNodes; - proxyConstructor = analysis.proxyConstructor; } @Override public final WithStatus getSchema() { // FIXME: Bad cast, we should be returning an EffectiveStatement perhaps? - return (WithStatus) type().statement(); + return (WithStatus) prototype().runtimeType().statement(); } @Override - CommonDataObjectCodecPrototype streamChildPrototype(final Class childClass) { + DataContainerPrototype streamChildPrototype(final Class childClass) { return byStreamClass.get(childClass); } @@ -78,28 +74,18 @@ public abstract sealed class AbstractDataObjectCodecContext 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); - } + .getCodecContext(); context.addYangPathArgument(arg, builder); - return context; + if (context instanceof CommonDataObjectCodecContext dataObject) { + return dataObject; + } else if (context instanceof ChoiceCodecContext choice) { + return choice.bindingPathArgumentChild(arg, builder); + } else { + throw new IllegalStateException("Unhandled context " + context); + } } - @Nullable CommonDataObjectCodecPrototype pathChildPrototype(final @NonNull Class argType) { + @Nullable DataContainerPrototype pathChildPrototype(final @NonNull Class argType) { return byBindingArgClass.get(argType); } @@ -108,16 +94,6 @@ public abstract sealed class AbstractDataObjectCodecContext