* of this document.
*/
@Beta
-public interface AnydataSchemaNode extends DataSchemaNode, MandatoryAware, MustConstraintAware,
+public interface AnydataSchemaNode extends DerivableSchemaNode<AnydataSchemaNode>, MandatoryAware, MustConstraintAware,
EffectiveStatementEquivalent<AnydataEffectiveStatement> {
/**
* Schema of data.
* This interface was modeled according to definition in
* <a href="https://tools.ietf.org/html/rfc6020#section-7.10">[RFC-6020] The anyxml Statement</a>
*/
-public interface AnyxmlSchemaNode extends DataSchemaNode, MandatoryAware, MustConstraintAware,
+public interface AnyxmlSchemaNode extends DerivableSchemaNode<AnyxmlSchemaNode>, MandatoryAware, MustConstraintAware,
EffectiveStatementEquivalent<AnyxmlEffectiveStatement> {
}
/**
* The CaseSchemaNode interface is used to define branches of the ChoiceSchemaNode.
*/
-public interface CaseSchemaNode extends DataSchemaNode, DataNodeContainer, AugmentationTarget,
+public interface CaseSchemaNode extends DerivableSchemaNode<CaseSchemaNode>, DataNodeContainer, AugmentationTarget,
EffectiveStatementEquivalent<CaseEffectiveStatement> {
}
* A ChoiceSchemaNode defines a set of alternatives. It consists of a number of branches defined as
* ChoiceCaseSchemaNode objects.
*/
-public interface ChoiceSchemaNode extends DataSchemaNode, AugmentationTarget, MandatoryAware,
+public interface ChoiceSchemaNode extends DerivableSchemaNode<ChoiceSchemaNode>, AugmentationTarget, MandatoryAware,
EffectiveStatementEquivalent<ChoiceEffectiveStatement> {
/**
* Returns cases of choice, keyed by their {@link SchemaNode#getQName()}. Returned map does not contain null keys
* containers, those that exist only for organizing the hierarchy of data nodes, and those whose presence in the
* configuration has an explicit meaning.
*/
-public interface ContainerSchemaNode extends ContainerLike, EffectiveStatementEquivalent<ContainerEffectiveStatement> {
+public interface ContainerSchemaNode extends ContainerLike, DerivableSchemaNode<ContainerSchemaNode>,
+ EffectiveStatementEquivalent<ContainerEffectiveStatement> {
/**
* Returns true if this container is marked as presence.
*
* Schema Node which may be derived from other schema node using augmentation or uses statement.
*/
// FIXME: 8.0.0: refactor this interface to take into account CopyableNode and AddedByUsesAware
-public interface DerivableSchemaNode extends DataSchemaNode {
+public interface DerivableSchemaNode<T extends DerivableSchemaNode<T>> extends DataSchemaNode {
/**
* If this node is added by uses, returns original node definition from
* grouping where it was defined.
*
- * @return original node definition from grouping if this node is added by
- * uses, Optional.absent otherwise
+ * @return original node definition from grouping if this node is added by uses, absent otherwise
*/
- // FIXME: 8.0.0: this should be a type capture as it always matches this node's type
- Optional<? extends SchemaNode> getOriginal();
+ Optional<T> getOriginal();
}
* Interface describing YANG 'leaf-list' statement.
*/
public interface LeafListSchemaNode extends TypedDataSchemaNode, MustConstraintAware, ElementCountConstraintAware,
- EffectiveStatementEquivalent<LeafListEffectiveStatement> {
+ DerivableSchemaNode<LeafListSchemaNode>, EffectiveStatementEquivalent<LeafListEffectiveStatement> {
/**
* YANG 'ordered-by' statement. It defines whether the order of entries
* within this leaf-list are determined by the user or the system. If not
* substatements is captured in the type returned via {@link #getType()}.
*/
public interface LeafSchemaNode extends TypedDataSchemaNode, MandatoryAware, MustConstraintAware,
- EffectiveStatementEquivalent<LeafEffectiveStatement> {
+ DerivableSchemaNode<LeafSchemaNode>, EffectiveStatementEquivalent<LeafEffectiveStatement> {
}
* The 'list' statement is used to define an interior data node in the schema tree. A list entry is uniquely identified
* by the values of the list's keys, if defined.
*/
-public interface ListSchemaNode extends DataNodeContainer, AugmentationTarget, DataSchemaNode,
+public interface ListSchemaNode extends DataNodeContainer, AugmentationTarget, DerivableSchemaNode<ListSchemaNode>,
NotificationNodeContainer, ActionNodeContainer, ElementCountConstraintAware, MustConstraintAware,
EffectiveStatementEquivalent<ListEffectiveStatement> {
/**
import com.google.common.collect.ImmutableList;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
public abstract class AbstractLeafEffectiveStatement
extends AbstractDeclaredEffectiveStatement.Default<QName, LeafStatement>
- implements LeafEffectiveStatement, LeafSchemaNode, DerivableSchemaNode,
- DataSchemaNodeMixin<LeafStatement>, MandatoryMixin<QName, LeafStatement>,
- MustConstraintMixin<QName, LeafStatement> {
+ implements LeafEffectiveStatement, LeafSchemaNode, DataSchemaNodeMixin<LeafStatement>,
+ MandatoryMixin<QName, LeafStatement>, MustConstraintMixin<QName, LeafStatement> {
private final @NonNull Object substatements;
private final @NonNull QName argument;
private final @NonNull TypeDefinition<?> type;
import com.google.common.collect.ImmutableList;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
abstract class AbstractLeafListEffectiveStatement
extends AbstractDeclaredEffectiveStatement.Default<QName, LeafListStatement>
- implements LeafListEffectiveStatement, LeafListSchemaNode, DerivableSchemaNode,
- UserOrderedMixin<QName, LeafListStatement>, DataSchemaNodeMixin<LeafListStatement>,
- MustConstraintMixin<QName, LeafListStatement> {
+ implements LeafListEffectiveStatement, LeafListSchemaNode, UserOrderedMixin<QName, LeafListStatement>,
+ DataSchemaNodeMixin<LeafListStatement>, MustConstraintMixin<QName, LeafListStatement> {
private final @NonNull Object substatements;
private final @NonNull QName argument;
private final @NonNull TypeDefinition<?> type;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ListEffectiveStatement;
abstract class AbstractListEffectiveStatement
extends WithTypedefNamespace<QName, ListStatement, ListEffectiveStatement>
- implements ListEffectiveStatement, ListSchemaNode, DerivableSchemaNode,
+ implements ListEffectiveStatement, ListSchemaNode,
ActionNodeContainerCompat<QName, ListStatement, ListEffectiveStatement>,
NotificationNodeContainerCompat<QName, ListStatement, ListEffectiveStatement>,
DataSchemaNodeMixin<ListStatement>, UserOrderedMixin<QName, ListStatement>,
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
import org.opendaylight.yangtools.yang.model.api.stmt.CaseEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement;
import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.AugmentationTargetMixin;
import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.DocumentedNodeMixin;
import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.MustConstraintMixin;
-interface CaseEffectiveStatementMixin extends CaseEffectiveStatement, CaseSchemaNode, DerivableSchemaNode,
+interface CaseEffectiveStatementMixin extends CaseEffectiveStatement, CaseSchemaNode,
DataSchemaNodeMixin<CaseStatement>, DocumentedNodeMixin.WithStatus<QName, CaseStatement>,
DataNodeContainerMixin<QName, CaseStatement>, MustConstraintMixin<QName, CaseStatement>,
AugmentationTargetMixin<QName, CaseStatement> {
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceStatement;
public final class ChoiceEffectiveStatementImpl
extends DefaultWithDataTree<QName, ChoiceStatement, ChoiceEffectiveStatement>
- implements ChoiceEffectiveStatement, ChoiceSchemaNode, DerivableSchemaNode,
- DataSchemaNodeMixin<ChoiceStatement>, AugmentationTargetMixin<QName, ChoiceStatement>,
- MandatoryMixin<QName, ChoiceStatement> {
+ implements ChoiceEffectiveStatement, ChoiceSchemaNode, DataSchemaNodeMixin<ChoiceStatement>,
+ AugmentationTargetMixin<QName, ChoiceStatement>, MandatoryMixin<QName, ChoiceStatement> {
private final CaseSchemaNode defaultCase;
private final ChoiceSchemaNode original;
private final @NonNull QName argument;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement;
public final class ContainerEffectiveStatementImpl
extends WithTypedefNamespace<QName, ContainerStatement, ContainerEffectiveStatement>
- implements ContainerEffectiveStatement, ContainerSchemaNode, DerivableSchemaNode,
- DataSchemaNodeMixin<ContainerStatement>, DataNodeContainerMixin<QName, ContainerStatement>,
- ActionNodeContainerMixin<QName, ContainerStatement>,
+ implements ContainerEffectiveStatement, ContainerSchemaNode, DataSchemaNodeMixin<ContainerStatement>,
+ DataNodeContainerMixin<QName, ContainerStatement>, ActionNodeContainerMixin<QName, ContainerStatement>,
ActionNodeContainerCompat<QName, ContainerStatement, ContainerEffectiveStatement>,
NotificationNodeContainerMixin<QName, ContainerStatement>,
NotificationNodeContainerCompat<QName, ContainerStatement, ContainerEffectiveStatement>,
import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.OpaqueDataSchemaNodeMixin;
public class EmptyAnydataEffectiveStatement extends Default<QName, AnydataStatement>
- implements AnydataEffectiveStatement, AnydataSchemaNode, OpaqueDataSchemaNodeMixin<AnydataStatement> {
+ implements AnydataEffectiveStatement, AnydataSchemaNode,
+ OpaqueDataSchemaNodeMixin<AnydataStatement, AnydataSchemaNode> {
private final @NonNull QName argument;
private final AnydataSchemaNode original;
private final int flags;
import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.OpaqueDataSchemaNodeMixin;
public class EmptyAnyxmlEffectiveStatement extends Default<QName, AnyxmlStatement>
- implements AnyxmlEffectiveStatement, AnyxmlSchemaNode, OpaqueDataSchemaNodeMixin<AnyxmlStatement> {
+ implements AnyxmlEffectiveStatement, AnyxmlSchemaNode,
+ OpaqueDataSchemaNodeMixin<AnyxmlStatement, AnyxmlSchemaNode> {
private final @NonNull QName argument;
private final AnyxmlSchemaNode original;
private final int flags;
import java.util.Optional;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.ElementCountConstraint;
-import org.opendaylight.yangtools.yang.model.api.SchemaNode;
+import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement;
}
@Override
- public Optional<? extends SchemaNode> getOriginal() {
+ public Optional<ListSchemaNode> getOriginal() {
return Optional.empty();
}
*
* @param <D> Class representing declared version of this statement.
*/
- public interface OpaqueDataSchemaNodeMixin<D extends DeclaredStatement<QName>>
- extends DerivableSchemaNode, DataSchemaNodeMixin<D>, DocumentedNodeMixin.WithStatus<QName, D>,
+ public interface OpaqueDataSchemaNodeMixin<D extends DeclaredStatement<QName>, S extends DerivableSchemaNode<S>>
+ extends DerivableSchemaNode<S>, DataSchemaNodeMixin<D>, DocumentedNodeMixin.WithStatus<QName, D>,
MandatoryMixin<QName, D>, MustConstraintMixin<QName, D>, WhenConditionMixin<QName, D> {
@Override
default QName getQName() {
}
}
- private static @Nullable SchemaNode extractOriginal(final SchemaNode node) {
+ private static @Nullable DerivableSchemaNode<?> extractOriginal(final SchemaNode node) {
assertThat(node, instanceOf(DerivableSchemaNode.class));
- return ((DerivableSchemaNode) node).getOriginal().orElse(null);
+ return ((DerivableSchemaNode<?>) node).getOriginal().orElse(null);
}
}