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%2FDataContainerCodecContext.java;h=ebd628c0ff1c5c4fcdb41cf482a2c4d1df95a573;hb=f3be50ed801e5de305eb46b824e6bc3c6075e4bc;hp=acaefd748a119b5310faf0e30845b802952df263;hpb=258e272a3de877caddeebc9940eb34b4b303cecb;p=mdsal.git diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecContext.java index acaefd748a..ebd628c0ff 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecContext.java @@ -12,6 +12,7 @@ import static java.util.Objects.requireNonNull; import com.google.common.collect.ImmutableCollection; import com.google.common.collect.ImmutableSet; import edu.umd.cs.findbugs.annotations.CheckReturnValue; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.io.IOException; import java.lang.invoke.MethodHandles; import java.lang.invoke.VarHandle; @@ -42,7 +43,6 @@ import org.opendaylight.yangtools.yang.binding.DataContainer; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; @@ -62,9 +62,10 @@ import org.opendaylight.yangtools.yang.model.api.TypedDataSchemaNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -abstract sealed class DataContainerCodecContext +abstract sealed class DataContainerCodecContext> extends CodecContext implements BindingDataContainerCodecTreeNode - permits CommonDataObjectCodecContext { + permits ChoiceCodecContext, CommonDataObjectCodecContext { private static final Logger LOG = LoggerFactory.getLogger(DataContainerCodecContext.class); private static final VarHandle EVENT_STREAM_SERIALIZER; @@ -77,24 +78,39 @@ abstract sealed class DataContainerCodecContext getBindingClass() { + return (Class) prototype().javaClass(); } - protected abstract @NonNull CodecContextFactory factory(); + // overridden in AugmentationCodecContext + @Override + protected NodeIdentifier getDomPathArgument() { + return prototype.yangArg(); + } - protected abstract @NonNull T type(); + @Override + public final ChildAddressabilitySummary getChildAddressabilitySummary() { + return childAddressabilitySummary; + } // Non-final for ChoiceCodecContext @Override @@ -107,18 +123,14 @@ abstract sealed class DataContainerCodecContext bindingPathArgumentChild(final PathArgument arg, - final List builder) { - final var child = getStreamChild(arg.getType()); - child.addYangPathArgument(arg, builder); - return child; - } + public abstract CommonDataObjectCodecContext bindingPathArgumentChild(PathArgument arg, + List builder); /** * Serializes supplied Binding Path Argument and adds all necessary YANG instance identifiers to supplied list. @@ -140,26 +152,26 @@ abstract sealed class DataContainerCodecContext CommonDataObjectCodecContext getStreamChild(final Class childClass) { + public final DataContainerCodecContext getStreamChild(final Class childClass) { return childNonNull(streamChild(childClass), childClass, "Child %s is not valid child of %s", getBindingClass(), childClass); } @SuppressWarnings("unchecked") @Override - public final CommonDataObjectCodecContext streamChild(final Class childClass) { + public final DataContainerCodecContext streamChild(final Class childClass) { final var childProto = streamChildPrototype(requireNonNull(childClass)); - return childProto == null ? null : (CommonDataObjectCodecContext) childProto.get(); + return childProto == null ? null : (DataContainerCodecContext) childProto.getCodecContext(); } - abstract @Nullable CommonDataObjectCodecPrototype streamChildPrototype(@NonNull Class childClass); + abstract @Nullable DataContainerPrototype streamChildPrototype(@NonNull Class childClass); @Override public String toString() { return getClass().getSimpleName() + " [" + getBindingClass() + "]"; } - static final & BindingNormalizedNodeCodec> + static final & BindingNormalizedNodeCodec> @NonNull BindingNormalizedNodeCachingCodec createCachingCodec(final C context, final ImmutableCollection> cacheSpecifier) { return cacheSpecifier.isEmpty() ? new NonCachingCodec<>(context) @@ -192,8 +204,8 @@ abstract sealed class DataContainerCodecContext childClass, final String message, final Object... args) { - return childNullException(factory().getRuntimeContext(), childClass, message, args); + return childNullException(prototype().contextFactory().getRuntimeContext(), childClass, message, args); } @CheckReturnValue @@ -235,7 +247,7 @@ abstract sealed class DataContainerCodecContext