X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-model-api%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fmodel%2Fapi%2Fstmt%2FTypeStatement.java;h=6eb2cd69785dcbcd99f8e876c08a573b9c9bf4fe;hb=refs%2Fchanges%2F08%2F92908%2F1;hp=a89d1da5345ec4644fc93c4b8e83a2c993ac1499;hpb=b43b47a640bebe04c98adf0b57bfbb7628bf9cf3;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 a89d1da534..6eb2cd6978 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 @@ -7,73 +7,134 @@ */ package org.opendaylight.yangtools.yang.model.api.stmt; +import static com.google.common.base.Verify.verifyNotNull; + import java.util.Collection; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import org.opendaylight.yangtools.yang.common.QName; +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 { +public interface TypeStatement extends DeclaredStatement { + @Override + default StatementDefinition statementDefinition() { + return YangStmtMapping.TYPE; + } - @Nonnull String getName(); + default @NonNull String getName() { + // FIXME: YANGTOOLS-908: verifyNotNull() should not be needed here + return verifyNotNull(argument()); + } @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); + } } }