*/
package org.opendaylight.yangtools.yang.model.api.stmt;
-import static java.util.Objects.requireNonNull;
-import static org.opendaylight.yangtools.yang.model.api.stmt.DefaultMethodHelpers.filterOptional;
-
+import java.util.Collection;
import java.util.Optional;
import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.NonNullByDefault;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
public interface DataTreeAwareEffectiveStatement<A, D extends DeclaredStatement<A>>
extends SchemaTreeAwareEffectiveStatement<A, D> {
/**
- * Namespace of {@code data node}s. This is a subtree of
- * {@link SchemaTreeAwareEffectiveStatement.SchemaTreeNamespace} in that all data nodes are also schema nodes. The
+ * Return the mapping of {@code data tree} children of this statement. This is a subtree of
+ * {@link SchemaTreeAwareEffectiveStatement#schemaTreeNodes()} in that all data nodes are also schema nodes. The
* structure of the tree is different, though, as {@code choice} and {@code case} statements are glossed over and
* they do not contribute to the tree hierarchy -- only their children do.
*
* <p>
- * This corresponds to the {@code data tree} view of a YANG-defined data.
+ * Note that returned statements are not necessarily direct substatements of this statement.
+ *
+ * @return All substatements participating on the {@code data tree}
*/
- @NonNullByDefault
- abstract class DataTreeNamespace extends EffectiveStatementNamespace<DataTreeEffectiveStatement<?>> {
- private DataTreeNamespace() {
- // Should never be instantiated
- }
- }
+ @NonNull Collection<DataTreeEffectiveStatement<?>> dataTreeNodes();
/**
* Find a {@code data tree} child {@link DataTreeEffectiveStatement}, as identified by its QName argument.
* @return Data tree child, or empty
* @throws NullPointerException if {@code qname} is {@code null}
*/
- default @NonNull Optional<DataTreeEffectiveStatement<?>> findDataTreeNode(final @NonNull QName qname) {
- return get(DataTreeNamespace.class, requireNonNull(qname));
- }
+ @NonNull Optional<DataTreeEffectiveStatement<?>> findDataTreeNode(@NonNull QName qname);
/**
* Find a {@code data tree} child {@link DataTreeEffectiveStatement}, as identified by its QName argument.
* @throws NullPointerException if any argument is {@code null}
*/
default <E> @NonNull Optional<E> findDataTreeNode(final Class<E> type, final @NonNull QName qname) {
- return filterOptional(type, findDataTreeNode(qname));
+ return DefaultMethodHelpers.filterOptional(findDataTreeNode(qname), type);
}
}