Using Object as the return type of getSchema() is confusing, as it
does not provide a proper anchor point for users. While subclasses
provide proper access point, further restricting the domain to
DocumentedNode.WithStatus provides for a better experience.
Change-Id: Iebd198b695f5271ebadd5315c1ec22b8488c227c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus;
import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
final BindingCodecTreeNode<?> mapCodec = requireNonNull(
codecRegistry.getCodecContext().getSubtreeCodec(parentMapPath),
"Codec not found for yang instance identifier: " + parentMapPath);
final BindingCodecTreeNode<?> mapCodec = requireNonNull(
codecRegistry.getCodecContext().getSubtreeCodec(parentMapPath),
"Codec not found for yang instance identifier: " + parentMapPath);
- final Object schema = mapCodec.getSchema();
+ final WithStatus schema = mapCodec.getSchema();
if (schema instanceof ListSchemaNode) {
final ListSchemaNode castedSchema = (ListSchemaNode) schema;
return castedSchema.isUserOrdered() ? Builders.orderedMapBuilder(castedSchema).build()
if (schema instanceof ListSchemaNode) {
final ListSchemaNode castedSchema = (ListSchemaNode) schema;
return castedSchema.isUserOrdered() ? Builders.orderedMapBuilder(castedSchema).build()
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
+import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus;
/**
* Subtree codec specific to model subtree between Java Binding and NormalizedNode.
/**
* Subtree codec specific to model subtree between Java Binding and NormalizedNode.
@Nullable InstanceIdentifier.PathArgument deserializePathArgument(
@Nullable YangInstanceIdentifier.PathArgument arg);
@Nullable InstanceIdentifier.PathArgument deserializePathArgument(
@Nullable YangInstanceIdentifier.PathArgument arg);
+ /**
+ * Return the schema node associated with this node.
+ *
+ * @return A schema node.
+ */
+ @Nonnull WithStatus getSchema();
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
+import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus;
-abstract class DataContainerCodecContext<D extends DataObject,T> extends NodeCodecContext<D> {
+abstract class DataContainerCodecContext<D extends DataObject, T extends WithStatus> extends NodeCodecContext<D> {
private final DataContainerCodecPrototype<T> prototype;
private volatile DataObjectSerializer eventStreamSerializer;
private final DataContainerCodecPrototype<T> prototype;
private volatile DataObjectSerializer eventStreamSerializer;
import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus;
import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-final class DataContainerCodecPrototype<T> implements NodeContextSupplier {
+final class DataContainerCodecPrototype<T extends WithStatus> implements NodeContextSupplier {
private final T schema;
private final QNameModule namespace;
private final T schema;
private final QNameModule namespace;
private final Class<?> bindingClass;
private final InstanceIdentifier.Item<?> bindingArg;
private final YangInstanceIdentifier.PathArgument yangArg;
private final Class<?> bindingClass;
private final InstanceIdentifier.Item<?> bindingArg;
private final YangInstanceIdentifier.PathArgument yangArg;
- private volatile DataContainerCodecContext<?,T> instance = null;
+ private volatile DataContainerCodecContext<?, T> instance = null;
@SuppressWarnings({"rawtypes", "unchecked"})
private DataContainerCodecPrototype(final Class<?> cls, final YangInstanceIdentifier.PathArgument arg,
@SuppressWarnings({"rawtypes", "unchecked"})
private DataContainerCodecPrototype(final Class<?> cls, final YangInstanceIdentifier.PathArgument arg,
import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus;
import org.opendaylight.yangtools.yang.model.util.SchemaNodeUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.opendaylight.yangtools.yang.model.util.SchemaNodeUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-abstract class DataObjectCodecContext<D extends DataObject, T extends DataNodeContainer>
+abstract class DataObjectCodecContext<D extends DataObject, T extends DataNodeContainer & WithStatus>
extends DataContainerCodecContext<D, T> {
private static final Logger LOG = LoggerFactory.getLogger(DataObjectCodecContext.class);
private static final MethodType CONSTRUCTOR_TYPE = MethodType.methodType(void.class, InvocationHandler.class);
extends DataContainerCodecContext<D, T> {
private static final Logger LOG = LoggerFactory.getLogger(DataObjectCodecContext.class);
private static final MethodType CONSTRUCTOR_TYPE = MethodType.methodType(void.class, InvocationHandler.class);