/* * Copyright (c) 2015 Cisco Systems, Inc. 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.model.api.stmt; import java.util.Collection; import java.util.Optional; import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; @Rfc6020AbnfRule("type-stmt") public interface TypeStatement extends DeclaredStatement { default @Nonnull String getName() { return argument(); } @Rfc6020AbnfRule("numerical-restrictions") interface NumericalRestrictions extends TypeStatement { default @Nonnull RangeStatement getRange() { return findFirstDeclaredSubstatement(RangeStatement.class).get(); } } @Rfc6020AbnfRule("decimal64-specification") interface Decimal64Specification extends TypeStatement { 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") interface StringRestrictions extends TypeStatement { 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 { default @Nonnull Collection getEnums() { return declaredSubstatements(EnumStatement.class); } } @Rfc6020AbnfRule("leafref-specification") interface LeafrefSpecification extends TypeStatement { 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 { /** * 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); } } @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); } } @Rfc6020AbnfRule("binary-specification") interface BinarySpecification extends TypeStatement { default @Nonnull Collection getLength() { return declaredSubstatements(LengthStatement.class); } } }