Add prefix() methods
[yangtools.git] / model / yang-model-api / src / main / java / org / opendaylight / yangtools / yang / model / api / stmt / TypeStatement.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.yang.model.api.stmt;
9
10 import java.util.Collection;
11 import org.eclipse.jdt.annotation.NonNull;
12 import org.eclipse.jdt.annotation.Nullable;
13 import org.opendaylight.yangtools.yang.common.QName;
14 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
15 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
16 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
17
18 /**
19  * Declared representation of a {@code type} statement.
20  */
21 public interface TypeStatement extends DeclaredStatement<QName> {
22     @Override
23     default StatementDefinition statementDefinition() {
24         return YangStmtMapping.TYPE;
25     }
26
27     // FIXME: 7.0.0: this interface does not have an implementation
28     interface NumericalRestrictions extends TypeStatement {
29         default @Nullable RangeStatement getRange() {
30             return findFirstDeclaredSubstatement(RangeStatement.class).orElse(null);
31         }
32     }
33
34     interface Decimal64Specification extends TypeStatement {
35         default @NonNull FractionDigitsStatement getFractionDigits() {
36             return findFirstDeclaredSubstatement(FractionDigitsStatement.class).orElseThrow();
37         }
38
39         default @Nullable RangeStatement getRange() {
40             final var opt = findFirstDeclaredSubstatement(RangeStatement.class);
41             return opt.isPresent() ? opt.orElseThrow() : null;
42         }
43     }
44
45     // FIXME: 7.0.0: this interface does not have an implementation
46     interface StringRestrictions extends TypeStatement {
47         default @Nullable LengthStatement getLength() {
48             final var opt = findFirstDeclaredSubstatement(LengthStatement.class);
49             return opt.isPresent() ? opt.orElseThrow() : null;
50         }
51
52         default @NonNull Collection<? extends PatternStatement> getPatterns() {
53             return declaredSubstatements(PatternStatement.class);
54         }
55     }
56
57     interface EnumSpecification extends TypeStatement {
58         default @NonNull Collection<? extends EnumStatement> getEnums() {
59             return declaredSubstatements(EnumStatement.class);
60         }
61     }
62
63     interface LeafrefSpecification extends TypeStatement {
64         default @NonNull PathStatement getPath() {
65             return findFirstDeclaredSubstatement(PathStatement.class).orElseThrow();
66         }
67
68         /**
69          * Return require-instance statement child, if present. For RFC6020 semantics, this method always returns null.
70          *
71          * @return require-instance statement, if present.
72          */
73         default @Nullable RequireInstanceStatement getRequireInstance() {
74             final var opt = findFirstDeclaredSubstatement(RequireInstanceStatement.class);
75             return opt.isPresent() ? opt.orElseThrow() : null;
76         }
77     }
78
79     interface InstanceIdentifierSpecification extends TypeStatement {
80         /**
81          * Return require-instance statement child, if present. For RFC6020 semantics, this method always returns
82          * null.
83          *
84          * @return require-instance statement, if present.
85          */
86         default @Nullable RequireInstanceStatement getRequireInstance() {
87             final var opt = findFirstDeclaredSubstatement(RequireInstanceStatement.class);
88             return opt.isPresent() ? opt.orElseThrow() : null;
89         }
90     }
91
92     interface IdentityRefSpecification extends TypeStatement {
93         /**
94          * Returns the base statements.
95          *
96          * @return collection of base statements (in YANG 1.1 models) or a collection containing just one base
97          *         statement (in YANG 1.0 models)
98          */
99         default @NonNull Collection<? extends BaseStatement> getBases() {
100             return declaredSubstatements(BaseStatement.class);
101         }
102     }
103
104     interface BitsSpecification extends TypeStatement {
105         default @NonNull Collection<? extends BitStatement> getBits() {
106             return declaredSubstatements(BitStatement.class);
107         }
108     }
109
110     interface UnionSpecification extends TypeStatement {
111         default @NonNull Collection<? extends TypeStatement> getTypes() {
112             return declaredSubstatements(TypeStatement.class);
113         }
114     }
115
116     interface BinarySpecification extends TypeStatement {
117         default @NonNull Collection<? extends LengthStatement> getLength() {
118             return declaredSubstatements(LengthStatement.class);
119         }
120     }
121 }