*/
package org.opendaylight.yangtools.yang.model.api;
+import java.util.Optional;
+
/**
- * Data Schema Node represents abstract supertype from which all data tree
- * definitions are derived.
+ * Data Schema Node represents abstract supertype from which all data tree definitions are derived. Unlike what
+ * the name would suggest, this interface corresponds more to RFC7950 {@code data definition statement} than to
+ * {@code data node}, yet it notably does not include {@link UsesNode} and {@link AugmentationSchemaNode}, which are
+ * resolved separately.
*
* <p>
- * Contains the method which are used for getting metadata from the schema nodes
- * which contains data.
+ * Common interface is composed of {@link #isConfiguration()}, governing validity in config/operation data stores
+ * and {@link WhenConditionAware} mixin, which governs validity based on other document data.
*
* @see ContainerSchemaNode
* @see ListSchemaNode
* @see LeafListSchemaNode
* @see ChoiceSchemaNode
- * @see ChoiceCaseNode
+ * @see CaseSchemaNode
* @see LeafSchemaNode
- * @see AnyXmlSchemaNode
- * @see AnyDataSchemaNode
+ * @see AnyxmlSchemaNode
+ * @see AnydataSchemaNode
*/
-public interface DataSchemaNode extends SchemaNode {
- /**
- * Returns <code>true</code> if the data node was added by augmentation,
- * otherwise returns <code>false</code>.
- *
- * @return <code>true</code> if the data node was added by augmentation,
- * otherwise returns <code>false</code>
- */
- boolean isAugmenting();
-
- /**
- * Returns <code>true</code> if the data node was added by uses statement,
- * otherwise returns <code>false</code>.
- *
- * @return <code>true</code> if the data node was added by uses statement,
- * otherwise returns <code>false</code>
- */
- boolean isAddedByUses();
-
+public interface DataSchemaNode extends SchemaNode, CopyableNode, WhenConditionAware {
/**
- * Returns <code>true</code> if the data represents configuration data,
- * otherwise returns <code>false</code>.
+ * Returns {@code true} if the data represents configuration data, otherwise returns {@code false}.
*
- * @return <code>true</code> if the data represents configuration data,
- * otherwise returns <code>false</code>
+ * @return {@code true} if the data represents configuration data, otherwise returns {@code false}
+ * @deprecated Use {@link #effectiveConfig()} instead.
*/
- boolean isConfiguration();
+ @Deprecated(forRemoval = true)
+ default boolean isConfiguration() {
+ return effectiveConfig().orElse(Boolean.TRUE);
+ }
/**
- * Returns the constraints associated with Data Schema Node.
+ * Return the effective value of {@code config} substatement, if applicable.
*
- * @return the constraints associated with Data Schema Node
+ * @return Effective {@code config} value, or {@link Optional#empty()} not applicable.
*/
- ConstraintDefinition getConstraints();
+ Optional<Boolean> effectiveConfig();
}