* While this class is public, it not part of API surface and is an implementation detail. The only reason for it being
* public is that it needs to be accessible by code generated at runtime.
*/
-public abstract class AbstractDataObjectCodecContext<D extends DataObject, T extends CompositeRuntimeType>
- extends DataContainerCodecContext<D, T> {
+public abstract sealed class AbstractDataObjectCodecContext<D extends DataObject, T extends CompositeRuntimeType>
+ extends DataContainerCodecContext<D, T>
+ permits AugmentationNodeContext, DataObjectCodecContext {
private final ImmutableMap<Class<?>, DataContainerCodecPrototype<?>> byBindingArgClass;
private final ImmutableMap<Class<?>, DataContainerCodecPrototype<?>> byStreamClass;
private final ImmutableMap<NodeIdentifier, NodeContextSupplier> byYang;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-class ContainerNodeCodecContext<D extends DataObject> extends DataObjectCodecContext<D, ContainerLikeRuntimeType<?, ?>>
- implements RpcInputCodec<D> {
+sealed class ContainerNodeCodecContext<D extends DataObject>
+ extends DataObjectCodecContext<D, ContainerLikeRuntimeType<?, ?>> implements RpcInputCodec<D>
+ permits NonPresenceContainerNodeCodecContext {
ContainerNodeCodecContext(final DataContainerCodecPrototype<ContainerLikeRuntimeType<?, ?>> prototype) {
super(prototype);
}
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-abstract class DataContainerCodecContext<D extends DataObject, T extends RuntimeTypeContainer> extends NodeCodecContext
- implements CommonDataObjectCodecTreeNode<D> {
+abstract sealed class DataContainerCodecContext<D extends DataObject, T extends RuntimeTypeContainer>
+ extends NodeCodecContext implements CommonDataObjectCodecTreeNode<D>
+ permits AbstractDataObjectCodecContext, ChoiceNodeCodecContext, SchemaRootCodecContext {
private static final Logger LOG = LoggerFactory.getLogger(DataContainerCodecContext.class);
private static final VarHandle EVENT_STREAM_SERIALIZER;
* This class is an implementation detail. It is public only due to technical reasons and may change at any time.
*/
@Beta
-public abstract class DataObjectCodecContext<D extends DataObject, T extends CompositeRuntimeType>
- extends AbstractDataObjectCodecContext<D, T> implements BindingDataObjectCodecTreeNode<D> {
+public abstract sealed class DataObjectCodecContext<D extends DataObject, T extends CompositeRuntimeType>
+ extends AbstractDataObjectCodecContext<D, T> implements BindingDataObjectCodecTreeNode<D>
+ permits CaseNodeCodecContext, ContainerNodeCodecContext, ListNodeCodecContext, NotificationCodecContext {
private static final Logger LOG = LoggerFactory.getLogger(DataObjectCodecContext.class);
private static final VarHandle MISMATCHED_AUGMENTED;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
-abstract class KeyedListNodeCodecContext<I extends Identifier<D>, D extends DataObject & Identifiable<I>>
+abstract sealed class KeyedListNodeCodecContext<I extends Identifier<D>, D extends DataObject & Identifiable<I>>
extends ListNodeCodecContext<D> {
private static final class Ordered<I extends Identifier<D>, D extends DataObject & Identifiable<I>>
extends KeyedListNodeCodecContext<I, D> {
import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition;
-class LeafNodeCodecContext extends ValueNodeCodecContext.WithCodec {
+sealed class LeafNodeCodecContext extends ValueNodeCodecContext.WithCodec {
static final class OfTypeObject<T extends TypeObject> extends LeafNodeCodecContext
implements BindingTypeObjectCodecTreeNode<T> {
private final @NonNull Class<T> bindingClass;
import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode;
import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode;
-class ListNodeCodecContext<D extends DataObject> extends DataObjectCodecContext<D, ListRuntimeType> {
+sealed class ListNodeCodecContext<D extends DataObject> extends DataObjectCodecContext<D, ListRuntimeType>
+ permits KeyedListNodeCodecContext {
ListNodeCodecContext(final DataContainerCodecPrototype<ListRuntimeType> prototype) {
super(prototype);
}
* <p>
* Two core subtypes of codec context are available:
* <ul>
- * <li>{@link ValueNodeCodecContext} - Context for nodes, which does not contain any nested YANG modeled substructures.
- * </li>
- * <li>{@link DataObjectCodecContext} - Context for nodes, which does contain nested YANG modeled substructures. This
- * context nodes contains context for children nodes.</li>
+ * <li>{@link ValueNodeCodecContext} for nodes, which do not contain any nested YANG modeled substructures</li>
+ * <li>{@link DataContainerCodecContext} for nodes, which contain nested YANG modeled substructures. These context
+ * nodes contain contexts for their individual children nodes</li>
* </ul>
*/
-abstract class NodeCodecContext implements BindingCodecTreeNode {
+abstract sealed class NodeCodecContext implements BindingCodecTreeNode
+ permits DataContainerCodecContext, ValueNodeCodecContext {
/**
* Returns {@link NodeIdentifier} of current node, if applicable.
*
import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
-abstract class OpaqueNodeCodecContext<T extends OpaqueObject<T>> extends ValueNodeCodecContext
+abstract sealed class OpaqueNodeCodecContext<T extends OpaqueObject<T>> extends ValueNodeCodecContext
implements BindingOpaqueObjectCodecTreeNode<T> {
static final class Anyxml<T extends OpaqueObject<T>> extends OpaqueNodeCodecContext<T> {
Anyxml(final AnyxmlSchemaNode schema, final String getterName, final Class<T> bindingClass,
* Abstract base class for atomic nodes. These are nodes which are not decomposed in the Binding Specification, such
* as LeafNodes and LeafSetNodes.
*/
-abstract class ValueNodeCodecContext extends NodeCodecContext implements NodeContextSupplier {
- abstract static class WithCodec extends ValueNodeCodecContext {
+abstract sealed class ValueNodeCodecContext extends NodeCodecContext implements NodeContextSupplier
+ permits OpaqueNodeCodecContext, ValueNodeCodecContext.WithCodec {
+ abstract static sealed class WithCodec extends ValueNodeCodecContext
+ permits LeafNodeCodecContext, LeafSetNodeCodecContext {
private final @NonNull ValueCodec<Object, Object> valueCodec;
WithCodec(final DataSchemaNode schema, final ValueCodec<Object, Object> codec, final String getterName,