2 * Copyright (c) 2015 Cisco Systems, Inc. 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;
10 import static java.util.Objects.requireNonNull;
12 import com.google.common.annotations.Beta;
13 import com.google.common.collect.ImmutableList;
14 import java.util.List;
15 import java.util.Optional;
16 import java.util.SortedMap;
17 import org.opendaylight.yangtools.yang.common.QName;
20 * A ChoiceSchemaNode defines a set of alternatives. It consists of a number of branches defined as
21 * ChoiceCaseSchemaNode objects.
23 public interface ChoiceSchemaNode extends DataSchemaNode, AugmentationTarget, MandatoryAware {
25 * Returns cases of choice, keyed by their {@link SchemaNode#getQName()}. Returned map does not contain null keys
28 * @return set of ChoiceCaseNode objects defined in this node which represents set of arguments of the YANG
29 * <code>case</code> substatement of the <code>choice</code> statement.
31 SortedMap<QName, CaseSchemaNode> getCases();
34 * Returns the concrete case according to specified Q name.
37 * QName of sought Choice Case Node
38 * @return child case node of this Choice if child with given name is present, empty otherwise.
39 * @throws NullPointerException if qname is null
41 default Optional<CaseSchemaNode> findCase(final QName qname) {
42 return Optional.ofNullable(getCases().get(requireNonNull(qname)));
46 * Returns the concrete cases according to specified name, disregarding their namespace.
49 * local name of sought child as String
50 * @return child case nodes matching specified local name, empty list if no match is found.
51 * @throws NullPointerException if localname is null
54 default List<CaseSchemaNode> findCaseNodes(final String localname) {
55 return getCases().values().stream().filter(node -> localname.equals(node.getQName().getLocalName()))
56 .collect(ImmutableList.toImmutableList());
60 * Find a specific data schema child, if present. This method searches among its {@link CaseSchemaNode}s,
61 * potentially recursing to nested choices.
64 * QName of sought data schema node
65 * @return Matching node, or empty if no match is found
66 * @throws NullPointerException if qname is null
69 default Optional<DataSchemaNode> findDataSchemaChild(final QName qname) {
70 requireNonNull(qname);
71 for (CaseSchemaNode caseNode : getCases().values()) {
72 final Optional<DataSchemaNode> child = caseNode.findDataChildByName(qname);
73 if (child.isPresent()) {
78 return Optional.empty();
82 * Returns the concrete case according to specified QName.
85 * QName of sought Choice Case Node
86 * @return child case node of this Choice if child with given name is present, <code>null</code> otherwise.
88 * @deprecated Use either {@code getCases().get(name)} or #findCase(QName)
91 default CaseSchemaNode getCaseNodeByName(final QName qname) {
92 return getCases().get(qname);
96 * Returns name of case which is in the choice specified as default.
98 * @return string with the name of case which is specified in the argument of the YANG <code>default</code>
99 * substatement of <code>choice</code> statement.
101 Optional<CaseSchemaNode> getDefaultCase();