From a1db3567be9e0a0c1e8c0a15fbed422c0933bc7a Mon Sep 17 00:00:00 2001 From: Igor Foltin Date: Wed, 9 Nov 2016 15:31:08 +0100 Subject: [PATCH] Bug 6874: [YANG 1.1] Allow "description" and "reference" in "import" and "include" API changes in yang-model-api. Change-Id: Id8e2c294374b61e254fd0d023cda4e8071cc86d1 Signed-off-by: Igor Foltin --- .../yang/model/api/DocumentedNode.java | 49 +++++++++++-------- .../yang/model/api/ModuleImport.java | 3 +- .../yangtools/yang/model/api/SchemaNode.java | 2 +- .../yangtools/yang/model/api/UsesNode.java | 2 +- .../model/api/stmt/DocumentationGroup.java | 26 +++++++++- .../yang/model/api/stmt/ImportStatement.java | 2 +- .../yang/model/api/stmt/IncludeStatement.java | 2 +- .../model/api/type/EnumTypeDefinition.java | 2 +- .../model/export/SchemaContextEmitter.java | 2 +- .../AbstractEffectiveDocumentedNode.java | 2 +- 10 files changed, 61 insertions(+), 31 deletions(-) diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/DocumentedNode.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/DocumentedNode.java index 876645f965..a3b031a08c 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/DocumentedNode.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/DocumentedNode.java @@ -20,32 +20,30 @@ import javax.annotation.Nullable; public interface DocumentedNode { /** - * Returns description of the instance of the type SchemaNode + * All implementations should override this method. + * The default definition of this method is used only in YANG 1.0 (RFC6020) implementations of + * ModuleImport which do not allow a description statement. + * YANG import statement has been changed in YANG 1.1 (RFC7950) and can now contain a description statement. * - * @return string with textual description the node which represents the - * argument of the YANG description substatement + * @return string that represents the argument of description statement */ - @Nullable String getDescription(); - - /** - * Returns reference of the instance of the type SchemaNode - * - * The reference refers to external document that provides additional - * information relevant for the instance of this type. - * - * @return string with the reference to some external document which - * represents the argument of the YANG reference - * substatement - */ - @Nullable String getReference(); + // FIXME: version 2.0.0: make this method non-default + @Nullable default String getDescription() { + return null; + } /** - * Returns status of the instance of the type SchemaNode + * All implementations should override this method. + * The default definition of this method is used only in YANG 1.0 (RFC6020) implementations of + * ModuleImport which do not allow a reference statement. + * YANG import statement has been changed in YANG 1.1 (RFC7950) and can now contain a reference statement. * - * @return status of this node which represents the argument of the YANG - * status substatement + * @return string that represents the argument of reference statement */ - @Nonnull Status getStatus(); + // FIXME: version 2.0.0: make this method non-default + @Nullable default String getReference() { + return null; + } /** * Returns unknown schema nodes which belongs to this instance. @@ -55,4 +53,15 @@ public interface DocumentedNode { default @Nonnull List getUnknownSchemaNodes() { return ImmutableList.of(); } + + interface WithStatus extends DocumentedNode { + + /** + * Returns status of the instance of the type SchemaNode + * + * @return status of this node which represents the argument of the YANG + * status substatement + */ + @Nonnull Status getStatus(); + } } diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ModuleImport.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ModuleImport.java index 0ef81046e3..d352aeacbe 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ModuleImport.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ModuleImport.java @@ -17,7 +17,7 @@ import org.opendaylight.yangtools.concepts.SemVer; * another module or submodule. *

*/ -public interface ModuleImport { +public interface ModuleImport extends DocumentedNode { /** * @return Name of the module to import @@ -40,5 +40,4 @@ public interface ModuleImport { * @return Prefix used to point to imported module */ String getPrefix(); - } diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/SchemaNode.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/SchemaNode.java index ea4f80d02d..75df5a316f 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/SchemaNode.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/SchemaNode.java @@ -13,7 +13,7 @@ import org.opendaylight.yangtools.yang.common.QName; /** * SchemaNode represents a node in schema tree. */ -public interface SchemaNode extends DocumentedNode { +public interface SchemaNode extends DocumentedNode.WithStatus { /** * Returns QName of the instance of the type SchemaNode. * diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/UsesNode.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/UsesNode.java index 5979333156..d0106cff66 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/UsesNode.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/UsesNode.java @@ -17,7 +17,7 @@ import javax.annotation.Nonnull; * uses substatement. * */ -public interface UsesNode extends DocumentedNode { +public interface UsesNode extends DocumentedNode.WithStatus { /** * Returns the schema path to used grouping. diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/DocumentationGroup.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/DocumentationGroup.java index a6746f22c4..ba49a84917 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/DocumentationGroup.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/DocumentationGroup.java @@ -11,9 +11,31 @@ import javax.annotation.Nullable; public interface DocumentationGroup { - @Nullable DescriptionStatement getDescription(); + /** + * All implementations should override this method. + * The default definition of this method is used only in YANG 1.0 (RFC6020) implementations of + * ImportStatement and IncludeStatement which do not allow a description statement. + * These YANG statements have been changed in YANG 1.1 (RFC7950) and can now contain a description statement. + * + * @return description statement + */ + // FIXME: version 2.0.0: make this method non-default + @Nullable default DescriptionStatement getDescription() { + return null; + } - @Nullable ReferenceStatement getReference(); + /** + * All implementations should override this method. + * The default definition of this method is used only in YANG 1.0 (RFC6020) implementations of + * ImportStatement and IncludeStatement which do not allow a reference statement. + * These YANG statements have been changed in YANG 1.1 (RFC7950) and can now contain a reference statement. + * + * @return reference statement + */ + // FIXME: version 2.0.0: make this method non-default + @Nullable default ReferenceStatement getReference() { + return null; + } interface WithStatus extends DocumentationGroup { diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ImportStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ImportStatement.java index 5d1550fc6d..53781bffd3 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ImportStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ImportStatement.java @@ -11,7 +11,7 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; -public interface ImportStatement extends DeclaredStatement { +public interface ImportStatement extends DeclaredStatement, DocumentationGroup { @Nonnull String getModule(); diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/IncludeStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/IncludeStatement.java index eeead85233..2a5bda1b29 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/IncludeStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/IncludeStatement.java @@ -11,7 +11,7 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; -public interface IncludeStatement extends DeclaredStatement { +public interface IncludeStatement extends DeclaredStatement, DocumentationGroup { @Nonnull String getModule(); diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/EnumTypeDefinition.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/EnumTypeDefinition.java index 770b5de84a..d27e2ba3d1 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/EnumTypeDefinition.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/EnumTypeDefinition.java @@ -31,7 +31,7 @@ public interface EnumTypeDefinition extends TypeDefinition { * Contains the methods for accessing the data about the concrete * enumeration item which represents enum YANG type. */ - interface EnumPair extends DocumentedNode { + interface EnumPair extends DocumentedNode.WithStatus { /** * The name to specify each assigned name of an enumeration type. * diff --git a/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/SchemaContextEmitter.java b/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/SchemaContextEmitter.java index baa2dbddee..1a20b63719 100644 --- a/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/SchemaContextEmitter.java +++ b/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/SchemaContextEmitter.java @@ -734,7 +734,7 @@ class SchemaContextEmitter { } } - private void emitDocumentedNode(final DocumentedNode input) { + private void emitDocumentedNode(final DocumentedNode.WithStatus input) { emitStatusNode(input.getStatus()); emitDescriptionNode(input.getDescription()); emitReferenceNode(input.getReference()); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDocumentedNode.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDocumentedNode.java index ce4eeff53b..d0c29ec02c 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDocumentedNode.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDocumentedNode.java @@ -13,7 +13,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; public abstract class AbstractEffectiveDocumentedNode> - extends DeclaredEffectiveStatementBase implements DocumentedNode { + extends DeclaredEffectiveStatementBase implements DocumentedNode.WithStatus { private final String description; private final String reference; -- 2.36.6