/* * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.yangtools.yang.data.api.schema; import java.util.Collection; import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; /** * A {@link NormalizedNodeContainer} which contains directly-addressable children. It * *
* NormalizedNodeContainer does not have a value, but it has a child nodes. Definition of possible and valid child nodes * is introduced in subclasses of this interface. * *
* This interface should not be used directly, but rather use of of derived subclasses such as
* {@link DataContainerNode}, {@link MapNode}, {@link LeafSetNode}.
*
* @param Path argument type
* @param
* All nodes returned in this iterable, MUST also be accessible via {@link #childByArg(PathArgument)} using their
* associated identifier.
*
* @return Iteration of all child nodes
*/
@Override
Collection<@NonNull V> body();
/**
* Returns a child node identified by provided key.
*
* @param key Path argument identifying child node
* @return Matching child node, or null if no matching child exists
* @throws NullPointerException if {@code key} is null
*/
@Nullable V childByArg(K key);
/**
* Attempts to find a child node identified by provided key.
*
* @param key Path argument identifying child node
* @return Optional with child node if child exists. {@link Optional#empty()} if child does not exist
* @throws NullPointerException if {@code key} is null
*/
default Optional