X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=yang%2Fyang-model-api%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fmodel%2Fapi%2Fstmt%2FTypeStatement.java;h=73559549f25ee984e9a6044c04006065af61e5d4;hb=4b699eee4622fe4349bf4e1aeb67567b3e9926b0;hp=42b45c38b4e17f8d66c856e57ff13586511dad1d;hpb=f1c55073f8d7631007c01a401346cc83383e5745;p=yangtools.git diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/TypeStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/TypeStatement.java index 42b45c38b4..73559549f2 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/TypeStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/TypeStatement.java @@ -8,71 +8,126 @@ package org.opendaylight.yangtools.yang.model.api.stmt; import java.util.Collection; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; +import java.util.Optional; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; @Rfc6020AbnfRule("type-stmt") public interface TypeStatement extends DeclaredStatement { - - @Nonnull String getName(); + @Override + default StatementDefinition statementDefinition() { + return YangStmtMapping.TYPE; + } @Rfc6020AbnfRule("numerical-restrictions") + // FIXME: 7.0.0: this interface does not have an implementation interface NumericalRestrictions extends TypeStatement { - - @Nonnull RangeStatement getRange(); - + default @Nullable RangeStatement getRange() { + return findFirstDeclaredSubstatement(RangeStatement.class).orElse(null); + } } @Rfc6020AbnfRule("decimal64-specification") interface Decimal64Specification extends TypeStatement { - - @Nonnull FractionDigitsStatement getFractionDigits(); - - @Nullable RangeStatement getRange(); - + default @NonNull FractionDigitsStatement getFractionDigits() { + return findFirstDeclaredSubstatement(FractionDigitsStatement.class).get(); + } + + default @Nullable RangeStatement getRange() { + final Optional opt = findFirstDeclaredSubstatement(RangeStatement.class); + return opt.isPresent() ? opt.get() : null; + } } @Rfc6020AbnfRule("string-restrictions") + // FIXME: 7.0.0: this interface does not have an implementation interface StringRestrictions extends TypeStatement { - - @Nullable LengthStatement getLength(); - - @Nonnull Collection getPatterns(); + default @Nullable LengthStatement getLength() { + final Optional opt = findFirstDeclaredSubstatement(LengthStatement.class); + return opt.isPresent() ? opt.get() : null; + } + + default @NonNull Collection getPatterns() { + return declaredSubstatements(PatternStatement.class); + } } @Rfc6020AbnfRule("enum-specification") interface EnumSpecification extends TypeStatement { - @Nonnull Collection getEnums(); - + default @NonNull Collection getEnums() { + return declaredSubstatements(EnumStatement.class); + } } @Rfc6020AbnfRule("leafref-specification") interface LeafrefSpecification extends TypeStatement { - - @Nullable PathStatement getPath(); - + default @NonNull PathStatement getPath() { + return findFirstDeclaredSubstatement(PathStatement.class).get(); + } + + /** + * Return require-instance statement child, if present. For RFC6020 semantics, this method always returns + * null. + * + * @return require-instance statement, if present. + */ + default @Nullable RequireInstanceStatement getRequireInstance() { + final Optional opt = + findFirstDeclaredSubstatement(RequireInstanceStatement.class); + return opt.isPresent() ? opt.get() : null; + } } + @Rfc6020AbnfRule("instanceidentifier-specification") interface InstanceIdentifierSpecification extends TypeStatement { - - @Nullable RequireInstanceStatement getRequireInstance(); + /** + * Return require-instance statement child, if present. For RFC6020 semantics, this method always returns + * null. + * + * @return require-instance statement, if present. + */ + default @Nullable RequireInstanceStatement getRequireInstance() { + final Optional opt = + findFirstDeclaredSubstatement(RequireInstanceStatement.class); + return opt.isPresent() ? opt.get() : null; + } } - + @Rfc6020AbnfRule("identityref-specification") interface IdentityRefSpecification extends TypeStatement { - + /** + * Returns the base statements. + * + * @return collection of base statements (in YANG 1.1 models) or a collection containing just one base + * statement (in YANG 1.0 models) + */ + default @NonNull Collection getBases() { + return declaredSubstatements(BaseStatement.class); + } } - interface BitsSpecification extends TypeStatement { - - @Nonnull Collection getBits(); + @Rfc6020AbnfRule("bits-specification") + interface BitsSpecification extends TypeStatement { + default @NonNull Collection getBits() { + return declaredSubstatements(BitStatement.class); + } } + @Rfc6020AbnfRule("union-specification") interface UnionSpecification extends TypeStatement { + default @NonNull Collection getTypes() { + return declaredSubstatements(TypeStatement.class); + } + } - @Nonnull Collection getTypes(); - + @Rfc6020AbnfRule("binary-specification") + interface BinarySpecification extends TypeStatement { + default @NonNull Collection getLength() { + return declaredSubstatements(LengthStatement.class); + } } }