From: Robert Varga Date: Sun, 4 Jun 2023 22:47:14 +0000 (+0200) Subject: Split out CaseNodeCodecContext.Prototype X-Git-Tag: v12.0.0~87 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=88bb933413dc22a72a5fd0307ce3455fbd15397d;p=mdsal.git Split out CaseNodeCodecContext.Prototype Add an explicit subclass of DataObjectCodecProtype to serve case nodes. Change-Id: I77a752be75673d1ffa768c5d76c422f082e03880 Signed-off-by: Robert Varga --- diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CaseNodeCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CaseNodeCodecContext.java index 0352a82676..69c94c6a93 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CaseNodeCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CaseNodeCodecContext.java @@ -14,11 +14,23 @@ import org.opendaylight.mdsal.binding.runtime.api.CaseRuntimeType; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +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.NormalizedNode; final class CaseNodeCodecContext extends DataObjectCodecContext { - CaseNodeCodecContext(final DataContainerCodecPrototype prototype) { + static final class Prototype extends DataObjectCodecPrototype { + Prototype(final Class cls, final CaseRuntimeType type, final CodecContextFactory factory) { + super(cls, NodeIdentifier.create(type.statement().argument()), type, factory); + } + + @Override + DataContainerCodecContext createInstance() { + return new CaseNodeCodecContext<>(this); + } + } + + private CaseNodeCodecContext(final Prototype prototype) { super(prototype, CodecItemFactory.of(prototype.getBindingClass())); } diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ChoiceNodeCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ChoiceNodeCodecContext.java index 639e2dc5f7..90038cac5c 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ChoiceNodeCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ChoiceNodeCodecContext.java @@ -117,20 +117,22 @@ final class ChoiceNodeCodecContext extends DataContainerCo final var factory = prototype.getFactory(); final var localCases = new HashSet(); for (var caseType : choiceType.validCaseChildren()) { - final var cazeDef = loadCase(factory, caseType); + final var caseProto = new CaseNodeCodecContext.Prototype(loadCase(factory.getRuntimeContext(), caseType), + caseType, factory); + localCases.add(caseType.getIdentifier()); - byClassBuilder.put(cazeDef.getBindingClass(), cazeDef); + byClassBuilder.put(caseProto.getBindingClass(), caseProto); // Updates collection of case children @SuppressWarnings("unchecked") - final var cazeCls = (Class) cazeDef.getBindingClass(); + final var cazeCls = (Class) caseProto.getBindingClass(); for (var cazeChild : getChildrenClasses(cazeCls)) { - childToCase.put(cazeChild, cazeDef); + childToCase.put(cazeChild, caseProto); } // Updates collection of YANG instance identifier to case - for (var stmt : cazeDef.getType().statement().effectiveSubstatements()) { + for (var stmt : caseProto.getType().statement().effectiveSubstatements()) { if (stmt instanceof DataSchemaNode cazeChild) { - byYangCaseChildBuilder.put(NodeIdentifier.create(cazeChild.getQName()), cazeDef); + byYangCaseChildBuilder.put(NodeIdentifier.create(cazeChild.getQName()), caseProto); } } } @@ -188,11 +190,6 @@ final class ChoiceNodeCodecContext extends DataContainerCo byClass = ImmutableMap.copyOf(byClassBuilder); } - private static DataContainerCodecPrototype loadCase(final CodecContextFactory factory, - final CaseRuntimeType caseType) { - return DataContainerCodecPrototype.from(loadCase(factory.getRuntimeContext(), caseType), caseType, factory); - } - private static Class loadCase(final BindingRuntimeContext context, final CaseRuntimeType caseType) { final var className = caseType.getIdentifier(); try { diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectCodecPrototype.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectCodecPrototype.java index 2f6bacc525..06b4c90b15 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectCodecPrototype.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectCodecPrototype.java @@ -11,7 +11,6 @@ import static java.util.Objects.requireNonNull; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.binding.dom.codec.impl.NodeCodecContext.CodecContextFactory; -import org.opendaylight.mdsal.binding.runtime.api.CaseRuntimeType; import org.opendaylight.mdsal.binding.runtime.api.ChoiceRuntimeType; import org.opendaylight.mdsal.binding.runtime.api.ContainerLikeRuntimeType; import org.opendaylight.mdsal.binding.runtime.api.ContainerRuntimeType; @@ -61,8 +60,6 @@ non-sealed class DataObjectCodecPrototype extend : new ListNodeCodecContext(this); } else if (type instanceof ChoiceRuntimeType) { return new ChoiceNodeCodecContext(this); - } else if (type instanceof CaseRuntimeType) { - return new CaseNodeCodecContext(this); } throw new IllegalArgumentException("Unsupported type " + getBindingClass() + " " + type); }