2 * Copyright (c) 2018 Pantheon Technologies, s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.yang.model.api.stmt;
10 import static java.util.Objects.requireNonNull;
11 import static org.opendaylight.yangtools.yang.model.api.stmt.DefaultMethodHelpers.filterOptional;
13 import com.google.common.annotations.Beta;
14 import java.util.Optional;
15 import org.eclipse.jdt.annotation.NonNull;
16 import org.eclipse.jdt.annotation.NonNullByDefault;
17 import org.opendaylight.yangtools.yang.common.QName;
18 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
21 * Interface implemented by all {@link SchemaTreeAwareEffectiveStatement}s which can contain a {@code data tree} child.
23 * @param <A> Argument type
24 * @param <D> Class representing declared version of this statement.
27 public interface DataTreeAwareEffectiveStatement<A, D extends DeclaredStatement<A>>
28 extends SchemaTreeAwareEffectiveStatement<A, D> {
30 * Namespace of {@code data node}s. This is a subtree of
31 * {@link SchemaTreeAwareEffectiveStatement.SchemaTreeNamespace} in that all data nodes are also schema nodes. The
32 * structure of the tree is different, though, as {@code choice} and {@code case} statements are glossed over and
33 * they do not contribute to the tree hierarchy -- only their children do.
36 * This corresponds to the {@code data tree} view of a YANG-defined data.
39 abstract class DataTreeNamespace extends EffectiveStatementNamespace<DataTreeEffectiveStatement<?>> {
40 private DataTreeNamespace() {
41 // Should never be instantiated
46 * Find a {@code data tree} child {@link DataTreeEffectiveStatement}, as identified by its QName argument.
48 * @param qname Child identifier
49 * @return Data tree child, or empty
50 * @throws NullPointerException if {@code qname} is null
52 default @NonNull Optional<DataTreeEffectiveStatement<?>> findDataTreeNode(final @NonNull QName qname) {
53 return get(DataTreeNamespace.class, requireNonNull(qname));
57 * Find a {@code data tree} child {@link DataTreeEffectiveStatement}, as identified by its QName argument.
59 * @param <E> Effective substatement type
60 * @param type Effective substatement class
61 * @param qname Child identifier
62 * @return Data tree child, or empty
63 * @throws NullPointerException if any argument is null
65 default <E> @NonNull Optional<E> findDataTreeNode(final Class<E> type, final @NonNull QName qname) {
66 return filterOptional(type, findDataTreeNode(qname));