From f4d26d44b4e398a183586429040d718a86b7a6d0 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sun, 4 Oct 2020 22:11:40 +0200 Subject: [PATCH] Separate out Module and Submodule interfaces Introduce ModuleLike to hold the common information and specialize the two interfaces properly. This allows them to be properly tied to EffectiveStatement world. JIRA: YANGTOOLS-1119 Change-Id: I4eee11311c6aad70de16f235da935a42b84874e0 Signed-off-by: Robert Varga --- .../spi/ModuleResourceResolver.java | 5 +- .../yang2sources/plugin/ContextHolder.java | 3 +- .../plugin/ProcessorModuleReactor.java | 3 +- .../yangtools/yang2sources/plugin/Util.java | 4 +- .../yangtools/yang/model/api/Module.java | 153 +--------------- .../yangtools/yang/model/api/ModuleLike.java | 168 ++++++++++++++++++ .../yangtools/yang/model/api/Submodule.java | 17 ++ .../yang/model/export/YinExportUtils.java | 18 +- .../model/export/AbstractYinExportTest.java | 7 +- .../util/FilteringSchemaContextProxy.java | 6 +- .../yang/model/util/ModuleDependencySort.java | 3 +- .../yang/model/util/SchemaContextUtil.java | 6 +- .../model/util/ModuleDependencySortTest.java | 3 +- .../model/util/SchemaContextProxyTest.java | 24 ++- .../rfc7950/stmt/AbstractEffectiveModule.java | 4 +- .../AbstractModuleStatementSupport.java | 8 +- .../module/ModuleEffectiveStatementImpl.java | 14 +- .../SubmoduleEffectiveStatementImpl.java | 16 +- .../yangtools/yang/stmt/Bug3799Test.java | 5 +- .../yangtools/yang/stmt/Bug7480Test.java | 3 +- .../yangtools/yang/stmt/Bug9005Test.java | 5 +- .../yang/stmt/DeclaredStatementsTest.java | 5 +- .../yang/stmt/EffectiveModuleTest.java | 3 +- .../EffectiveModulesAndSubmodulesTest.java | 21 +-- .../yang/stmt/IncludedStmtsTest.java | 3 +- .../yangtools/yang/stmt/StmtTestUtils.java | 6 +- .../yang/stmt/yin/YinFileIncludeStmtTest.java | 5 +- 27 files changed, 293 insertions(+), 225 deletions(-) create mode 100644 yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ModuleLike.java create mode 100644 yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/Submodule.java diff --git a/yang/yang-maven-plugin-spi/src/main/java/org/opendaylight/yangtools/yang2sources/spi/ModuleResourceResolver.java b/yang/yang-maven-plugin-spi/src/main/java/org/opendaylight/yangtools/yang2sources/spi/ModuleResourceResolver.java index 2162eebc3a..d1e0c5b82f 100644 --- a/yang/yang-maven-plugin-spi/src/main/java/org/opendaylight/yangtools/yang2sources/spi/ModuleResourceResolver.java +++ b/yang/yang-maven-plugin-spi/src/main/java/org/opendaylight/yangtools/yang2sources/spi/ModuleResourceResolver.java @@ -9,7 +9,7 @@ package org.opendaylight.yangtools.yang2sources.spi; import com.google.common.annotations.Beta; import java.util.Optional; -import org.opendaylight.yangtools.yang.model.api.Module; +import org.opendaylight.yangtools.yang.model.api.ModuleLike; import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; /** @@ -28,5 +28,6 @@ public interface ModuleResourceResolver { * @throws NullPointerException if any argument is null * @throws IllegalArgumentException if the requested representation is not supported by this resolver */ - Optional findModuleResourcePath(Module module, Class representation); + Optional findModuleResourcePath(ModuleLike module, + Class representation); } diff --git a/yang/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/ContextHolder.java b/yang/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/ContextHolder.java index a26b0fec1d..ffe1d99d9f 100644 --- a/yang/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/ContextHolder.java +++ b/yang/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/ContextHolder.java @@ -16,6 +16,7 @@ import java.util.Set; import org.opendaylight.yangtools.concepts.Immutable; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.Module; +import org.opendaylight.yangtools.yang.model.api.ModuleLike; import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; @@ -33,7 +34,7 @@ final class ContextHolder implements Immutable, ModuleResourceResolver { } @Override - public Optional findModuleResourcePath(final Module module, + public Optional findModuleResourcePath(final ModuleLike module, final Class representation) { checkArgument(YangTextSchemaSource.class.equals(requireNonNull(representation)), "Unsupported representation %s", representation); diff --git a/yang/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/ProcessorModuleReactor.java b/yang/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/ProcessorModuleReactor.java index af0b8a85dc..fa1a2353e6 100644 --- a/yang/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/ProcessorModuleReactor.java +++ b/yang/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/ProcessorModuleReactor.java @@ -26,6 +26,7 @@ import java.util.Map; import java.util.Set; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.Module; +import org.opendaylight.yangtools.yang.model.api.Submodule; import org.opendaylight.yangtools.yang.model.parser.api.YangParser; import org.opendaylight.yangtools.yang.model.parser.api.YangParserException; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; @@ -74,7 +75,7 @@ final class ProcessorModuleReactor { LOG.debug("Module {} belongs to current project", module); modules.add(module); - for (Module sub : module.getSubmodules()) { + for (Submodule sub : module.getSubmodules()) { final SourceIdentifier subId = Util.moduleToIdentifier(sub); if (!modelsInProject.containsKey(subId)) { LOG.warn("Submodule {} not found in input files", sub); diff --git a/yang/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/Util.java b/yang/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/Util.java index c2c5252f55..07cf2e2ccd 100644 --- a/yang/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/Util.java +++ b/yang/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/Util.java @@ -24,7 +24,7 @@ import org.apache.maven.model.Dependency; import org.apache.maven.model.Plugin; import org.apache.maven.project.MavenProject; import org.apache.maven.repository.RepositorySystem; -import org.opendaylight.yangtools.yang.model.api.Module; +import org.opendaylight.yangtools.yang.model.api.ModuleLike; import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.slf4j.Logger; @@ -144,7 +144,7 @@ final class Util { return element.isFile() && element.getName().endsWith(".jar"); } - static SourceIdentifier moduleToIdentifier(final Module module) { + static SourceIdentifier moduleToIdentifier(final ModuleLike module) { return RevisionSourceIdentifier.create(module.getName(), module.getRevision()); } } diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/Module.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/Module.java index 3192d72cb3..9a3aacde77 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/Module.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/Module.java @@ -7,160 +7,11 @@ */ package org.opendaylight.yangtools.yang.model.api; -import java.net.URI; -import java.util.Collection; -import java.util.Optional; -import org.opendaylight.yangtools.concepts.Immutable; -import org.opendaylight.yangtools.concepts.SemVer; -import org.opendaylight.yangtools.yang.common.QNameModule; -import org.opendaylight.yangtools.yang.common.Revision; -import org.opendaylight.yangtools.yang.common.YangVersion; +import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement; /** * This interface contains the methods for getting the data from the YANG module. */ -// FIXME: YANGTOOLS-1119: we need specializations for Module and Submodule -public interface Module extends DataNodeContainer, DocumentedNode, Immutable, NotificationNodeContainer, - NamespaceRevisionAware { - /** - * Returns the name of the module which is specified as argument of YANG {@code module} statement. - * - * @return string with the name of the module - */ - String getName(); +public interface Module extends ModuleLike, EffectiveStatementEquivalent { - /** - * Returns a {@link QNameModule}, which contains the namespace and the revision of the module. - * - * @return QNameModule identifier. - */ - QNameModule getQNameModule(); - - /** - * Returns the namespace of the module which is specified as argument of YANG {@code namespace} - * keyword. If you need both namespace and revision, please consider using {@link #getQNameModule()}. - * - * @return URI format of the namespace of the module - */ - @Override - default URI getNamespace() { - return getQNameModule().getNamespace(); - } - - /** - * Returns the revision date for the module. If you need both namespace and - * revision, please consider using {@link #getQNameModule()}. - * - * @return date of the module revision which is specified as argument of YANG {@code revison} statement - */ - @Override - default Optional getRevision() { - return getQNameModule().getRevision(); - } - - /** - * Returns the semantic version of YANG module. If the semantic version is not specified, default semantic version - * of module is returned. - * - * @return SemVer semantic version of YANG module which is specified as argument of - * {@code (urn:opendaylight:yang:extension:semantic-version?revision=2016-02-02)semantic-version} statement - */ - Optional getSemanticVersion(); - - /** - * Returns the prefix of the module. - * - * @return string with the module prefix which is specified as argument of YANG {@code prefix} statement - */ - String getPrefix(); - - /** - * Returns the YANG version. - * - * @return YANG version of this module. - */ - YangVersion getYangVersion(); - - /** - * Returns the module organization. - * - * @return string with the name of the organization specified in the module as the argument of YANG - * {@code organization} statement - */ - Optional getOrganization(); - - /** - * Returns the module contact. - * - *

- * The contact represents the person or persons to whom technical queries concerning this module should be sent, - * such as their name, postal address, telephone number, and electronic mail address. - * - * @return string with the contact data specified in the module as the argument of YANG {@code contact} statement - */ - Optional getContact(); - - /** - * Returns imports which represents YANG modules which are imported to this module via {@code import} statement. - * - * @return set of module imports which are specified in the module as the argument of YANG {@code import} - * statements. - */ - Collection getImports(); - - Collection getSubmodules(); - - /** - * Returns {@link FeatureDefinition} instances which contain data from {@code feature} statements defined in the - * module. - * - *

- * The feature is used to define a mechanism by which portions of the schema are marked as conditional. - * - * @return feature statements in lexicographical order which are specified in the module as the argument of YANG - * {@code feature} statements. - */ - Collection getFeatures(); - - /** - * Returns {@link AugmentationSchemaNode} instances which contain data from {@code augment} statements defined - * in the module. - * - * @return set of the augmentation schema instances which are specified in the module as YANG {@code augment} - * statement and are lexicographically ordered - */ - Collection getAugmentations(); - - /** - * Returns {@link RpcDefinition} instances which contain data from {@code rpc} statements defined in the module. - * - * @return set of the RPC definition instances which are specified in the module as YANG {@code rpc} statements and - * are lexicographicaly ordered - */ - Collection getRpcs(); - - /** - * Returns {@link Deviation} instances which contain data from {@code deviation} statements defined in the module. - * - * @return set of the deviation instances - */ - Collection getDeviations(); - - /** - * Returns {@link IdentitySchemaNode} instances which contain data from {@code identity} statements defined in the - * module. - * - * @return set of identity schema node instances which are specified in the module as YANG {@code identity} - * statements and are lexicographically ordered - */ - Collection getIdentities(); - - /** - * Returns {@link ExtensionDefinition} instances which contain data from {@code extension} statements defined in - * the module. - * - * @return set of extension definition instances which are specified in the module as YANG {@code extension} - * statements and are lexicographically ordered - */ - Collection getExtensionSchemaNodes(); } diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ModuleLike.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ModuleLike.java new file mode 100644 index 0000000000..04367814cf --- /dev/null +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ModuleLike.java @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2013 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; + +import com.google.common.annotations.Beta; +import java.net.URI; +import java.util.Collection; +import java.util.Optional; +import org.opendaylight.yangtools.concepts.Immutable; +import org.opendaylight.yangtools.concepts.SemVer; +import org.opendaylight.yangtools.yang.common.QNameModule; +import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.YangVersion; + +/** + * This interface contains common methods for getting the schema contents from a YANG module or submodule. + */ +@Beta +public interface ModuleLike extends DataNodeContainer, DocumentedNode, Immutable, NotificationNodeContainer, + NamespaceRevisionAware { + /** + * Returns the name of the module which is specified as argument of YANG {@code module} statement. + * + * @return string with the name of the module + */ + String getName(); + + /** + * Returns a {@link QNameModule}, which contains the namespace and the revision of the module. + * + * @return QNameModule identifier. + */ + QNameModule getQNameModule(); + + /** + * Returns the namespace of the module which is specified as argument of YANG {@code namespace} + * keyword. If you need both namespace and revision, please consider using {@link #getQNameModule()}. + * + * @return URI format of the namespace of the module + */ + @Override + default URI getNamespace() { + return getQNameModule().getNamespace(); + } + + /** + * Returns the revision date for the module. If you need both namespace and + * revision, please consider using {@link #getQNameModule()}. + * + * @return date of the module revision which is specified as argument of YANG {@code revison} statement + */ + @Override + default Optional getRevision() { + return getQNameModule().getRevision(); + } + + /** + * Returns the semantic version of YANG module. If the semantic version is not specified, default semantic version + * of module is returned. + * + * @return SemVer semantic version of YANG module which is specified as argument of + * {@code (urn:opendaylight:yang:extension:semantic-version?revision=2016-02-02)semantic-version} statement + */ + Optional getSemanticVersion(); + + /** + * Returns the prefix of the module. + * + * @return string with the module prefix which is specified as argument of YANG {@code prefix} statement + */ + String getPrefix(); + + /** + * Returns the YANG version. + * + * @return YANG version of this module. + */ + YangVersion getYangVersion(); + + /** + * Returns the module organization. + * + * @return string with the name of the organization specified in the module as the argument of YANG + * {@code organization} statement + */ + Optional getOrganization(); + + /** + * Returns the module contact. + * + *

+ * The contact represents the person or persons to whom technical queries concerning this module should be sent, + * such as their name, postal address, telephone number, and electronic mail address. + * + * @return string with the contact data specified in the module as the argument of YANG {@code contact} statement + */ + Optional getContact(); + + /** + * Returns imports which represents YANG modules which are imported to this module via {@code import} statement. + * + * @return set of module imports which are specified in the module as the argument of YANG {@code import} + * statements. + */ + Collection getImports(); + + // FIXME: YANGTOOLS-1006: this should be only in Module + Collection getSubmodules(); + + /** + * Returns {@link FeatureDefinition} instances which contain data from {@code feature} statements defined in the + * module. + * + *

+ * The feature is used to define a mechanism by which portions of the schema are marked as conditional. + * + * @return feature statements in lexicographical order which are specified in the module as the argument of YANG + * {@code feature} statements. + */ + Collection getFeatures(); + + /** + * Returns {@link AugmentationSchemaNode} instances which contain data from {@code augment} statements defined + * in the module. + * + * @return set of the augmentation schema instances which are specified in the module as YANG {@code augment} + * statement and are lexicographically ordered + */ + Collection getAugmentations(); + + /** + * Returns {@link RpcDefinition} instances which contain data from {@code rpc} statements defined in the module. + * + * @return set of the RPC definition instances which are specified in the module as YANG {@code rpc} statements and + * are lexicographicaly ordered + */ + Collection getRpcs(); + + /** + * Returns {@link Deviation} instances which contain data from {@code deviation} statements defined in the module. + * + * @return set of the deviation instances + */ + Collection getDeviations(); + + /** + * Returns {@link IdentitySchemaNode} instances which contain data from {@code identity} statements defined in the + * module. + * + * @return set of identity schema node instances which are specified in the module as YANG {@code identity} + * statements and are lexicographically ordered + */ + Collection getIdentities(); + + /** + * Returns {@link ExtensionDefinition} instances which contain data from {@code extension} statements defined in + * the module. + * + * @return set of extension definition instances which are specified in the module as YANG {@code extension} + * statements and are lexicographically ordered + */ + Collection getExtensionSchemaNodes(); +} diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/Submodule.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/Submodule.java new file mode 100644 index 0000000000..5dcb443521 --- /dev/null +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/Submodule.java @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2020 PANTHEO.tech, s.r.o. 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; + +import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleEffectiveStatement; + +/** + * This interface contains the methods for getting the data from the YANG submodule. + */ +public interface Submodule extends ModuleLike, EffectiveStatementEquivalent { + +} diff --git a/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/YinExportUtils.java b/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/YinExportUtils.java index 084b161649..ce289805e8 100644 --- a/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/YinExportUtils.java +++ b/yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/YinExportUtils.java @@ -7,7 +7,6 @@ */ package org.opendaylight.yangtools.yang.model.export; -import static com.google.common.base.Preconditions.checkArgument; import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; @@ -24,6 +23,7 @@ import javax.xml.transform.stream.StreamResult; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.common.YangConstants; import org.opendaylight.yangtools.yang.model.api.Module; +import org.opendaylight.yangtools.yang.model.api.Submodule; import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleEffectiveStatement; @@ -73,10 +73,7 @@ public final class YinExportUtils { @Beta @Deprecated public static void writeModuleAsYinText(final Module module, final OutputStream output) throws XMLStreamException { - requireNonNull(module); - checkArgument(module instanceof ModuleEffectiveStatement, "Module %s is not a ModuleEffectiveStatement", - module); - writeModuleAsYinText((ModuleEffectiveStatement) module, output); + writeModuleAsYinText(module.asEffectiveStatement(), output); } /** @@ -109,16 +106,9 @@ public final class YinExportUtils { */ @Beta @Deprecated - public static void writeSubmoduleAsYinText(final Module parentModule, final Module submodule, + public static void writeSubmoduleAsYinText(final Module parentModule, final Submodule submodule, final OutputStream output) throws XMLStreamException { - requireNonNull(parentModule); - checkArgument(parentModule instanceof ModuleEffectiveStatement, "Parent %s is not a ModuleEffectiveStatement", - parentModule); - requireNonNull(submodule); - checkArgument(submodule instanceof SubmoduleEffectiveStatement, - "Submodule %s is not a SubmoduleEffectiveStatement", submodule); - writeSubmoduleAsYinText((ModuleEffectiveStatement) parentModule, (SubmoduleEffectiveStatement)submodule, - output); + writeSubmoduleAsYinText(parentModule.asEffectiveStatement(), submodule.asEffectiveStatement(), output); } /** diff --git a/yang/yang-model-export/src/test/java/org/opendaylight/yangtools/yang/model/export/AbstractYinExportTest.java b/yang/yang-model-export/src/test/java/org/opendaylight/yangtools/yang/model/export/AbstractYinExportTest.java index 59a4921a19..004ea00c73 100644 --- a/yang/yang-model-export/src/test/java/org/opendaylight/yangtools/yang/model/export/AbstractYinExportTest.java +++ b/yang/yang-model-export/src/test/java/org/opendaylight/yangtools/yang/model/export/AbstractYinExportTest.java @@ -20,6 +20,7 @@ import org.custommonkey.xmlunit.XMLAssert; import org.custommonkey.xmlunit.XMLUnit; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.api.Submodule; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; import org.w3c.dom.Document; import org.xml.sax.SAXException; @@ -34,7 +35,7 @@ abstract class AbstractYinExportTest { for (Module module : modules) { readAndValidateModule(schemaContext, module, yinDir); - for (Module submodule : module.getSubmodules()) { + for (Submodule submodule : module.getSubmodules()) { readAndValidateSubmodule(schemaContext, module, submodule, yinDir); } } @@ -56,7 +57,7 @@ abstract class AbstractYinExportTest { } private void readAndValidateSubmodule(final SchemaContext schemaContext, final Module module, - final Module submodule, final String yinDir) throws XMLStreamException, IOException, SAXException { + final Submodule submodule, final String yinDir) throws XMLStreamException, IOException, SAXException { final String fileName = YinExportUtils.wellFormedYinName(submodule.getName(), submodule.getRevision()); validateOutput(yinDir, fileName, export(module, submodule)); } @@ -67,7 +68,7 @@ abstract class AbstractYinExportTest { return new String(bos.toByteArray(), StandardCharsets.UTF_8); } - private static String export(final Module module, final Module submodule) throws XMLStreamException { + private static String export(final Module module, final Submodule submodule) throws XMLStreamException { final ByteArrayOutputStream bos = new ByteArrayOutputStream(); YinExportUtils.writeSubmoduleAsYinText(module, submodule, bos); return new String(bos.toByteArray(), StandardCharsets.UTF_8); diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/FilteringSchemaContextProxy.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/FilteringSchemaContextProxy.java index 2e387ad13b..ec3c9e958a 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/FilteringSchemaContextProxy.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/FilteringSchemaContextProxy.java @@ -37,7 +37,9 @@ import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.ModuleImport; +import org.opendaylight.yangtools.yang.model.api.ModuleLike; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.api.Submodule; public final class FilteringSchemaContextProxy extends AbstractSchemaContext { private final ImmutableMap moduleMap; @@ -175,7 +177,7 @@ public final class FilteringSchemaContextProxy extends AbstractSchemaContext { } //check for any dependency regarding given string - private boolean checkModuleDependency(final Module module, final Collection rootModules) { + private boolean checkModuleDependency(final ModuleLike module, final Collection rootModules) { for (ModuleId rootModule : rootModules) { if (rootModule.equals(new ModuleId(module.getName(), module.getRevision()))) { return true; @@ -190,7 +192,7 @@ public final class FilteringSchemaContextProxy extends AbstractSchemaContext { } //submodules handling - for (Module moduleSub : module.getSubmodules()) { + for (Submodule moduleSub : module.getSubmodules()) { return checkModuleDependency(moduleSub, rootModules); } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/ModuleDependencySort.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/ModuleDependencySort.java index 255875b9f4..5e9ba484de 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/ModuleDependencySort.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/ModuleDependencySort.java @@ -28,6 +28,7 @@ import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.common.YangVersion; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.ModuleImport; +import org.opendaylight.yangtools.yang.model.api.Submodule; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -144,7 +145,7 @@ public final class ModuleDependencySort { final Collection concat = new LinkedHashSet<>(); concat.addAll(mod.getImports()); - for (Module sub : mod.getSubmodules()) { + for (Submodule sub : mod.getSubmodules()) { concat.addAll(sub.getImports()); } return concat; diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaContextUtil.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaContextUtil.java index 423d4c43b7..62e59cca60 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaContextUtil.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaContextUtil.java @@ -44,6 +44,7 @@ import org.opendaylight.yangtools.yang.model.api.GroupingDefinition; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.ModuleImport; +import org.opendaylight.yangtools.yang.model.api.ModuleLike; import org.opendaylight.yangtools.yang.model.api.NotificationDefinition; import org.opendaylight.yangtools.yang.model.api.NotificationNodeContainer; import org.opendaylight.yangtools.yang.model.api.OperationDefinition; @@ -55,6 +56,7 @@ import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.Submodule; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.model.api.TypedDataSchemaNode; import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition; @@ -362,7 +364,7 @@ public final class SchemaContextUtil { for (Module module : context.getModules()) { ret.add(moduleToIdentifier(module)); - for (Module submodule : module.getSubmodules()) { + for (Submodule submodule : module.getSubmodules()) { ret.add(moduleToIdentifier(submodule)); } } @@ -370,7 +372,7 @@ public final class SchemaContextUtil { return ret; } - private static SourceIdentifier moduleToIdentifier(final Module module) { + private static SourceIdentifier moduleToIdentifier(final ModuleLike module) { return RevisionSourceIdentifier.create(module.getName(), module.getRevision()); } diff --git a/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/ModuleDependencySortTest.java b/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/ModuleDependencySortTest.java index b8b4f602ce..9086f37642 100644 --- a/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/ModuleDependencySortTest.java +++ b/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/ModuleDependencySortTest.java @@ -24,6 +24,7 @@ import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.YangVersion; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.ModuleImport; +import org.opendaylight.yangtools.yang.model.api.Submodule; @RunWith(MockitoJUnitRunner.class) public class ModuleDependencySortTest { @@ -40,7 +41,7 @@ public class ModuleDependencySortTest { private Module bar; @Mock - private Module barSubmodule; + private Submodule barSubmodule; @Before public void before() { diff --git a/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/SchemaContextProxyTest.java b/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/SchemaContextProxyTest.java index 9ad046d51c..4181d8ca06 100644 --- a/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/SchemaContextProxyTest.java +++ b/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/SchemaContextProxyTest.java @@ -33,9 +33,11 @@ import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition; import org.opendaylight.yangtools.yang.model.api.GroupingDefinition; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.ModuleImport; +import org.opendaylight.yangtools.yang.model.api.ModuleLike; import org.opendaylight.yangtools.yang.model.api.NotificationDefinition; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.api.Submodule; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.stmt.ImportEffectiveStatement; @@ -336,7 +338,7 @@ public class SchemaContextProxyTest { Module module2 = mockModule(MODULE2_NAME); Module module3 = mockModule(MODULE3_NAME); Module module4 = mockModule(MODULE4_NAME); - Module module41 = mockModule(MODULE41_NAME); + Submodule module41 = mockSubmodule(MODULE41_NAME); mockSubmodules(module4, module41); mockModuleImport(module2, moduleConfig, module3); @@ -584,14 +586,14 @@ public class SchemaContextProxyTest { return moduleIds; } - private static void mockSubmodules(final Module mainModule, final Module... submodules) { - Set submodulesSet = new HashSet<>(); + private static void mockSubmodules(final Module mainModule, final Submodule... submodules) { + Set submodulesSet = new HashSet<>(); submodulesSet.addAll(Arrays.asList(submodules)); doReturn(submodulesSet).when(mainModule).getSubmodules(); } - private static void mockModuleImport(final Module importer, final Module... imports) { + private static void mockModuleImport(final ModuleLike importer, final Module... imports) { Set mockedImports = new HashSet<>(); for (final Module module : imports) { mockedImports.add(new ModuleImport() { @@ -653,8 +655,18 @@ public class SchemaContextProxyTest { //mock module with default revision private static Module mockModule(final String name) { - Module mockedModule = mock(Module.class); + mockModuleLike(mockedModule, name); + return mockedModule; + } + + private static Submodule mockSubmodule(final String name) { + Submodule mockedModule = mock(Submodule.class); + mockModuleLike(mockedModule, name); + return mockedModule; + } + + private static void mockModuleLike(final ModuleLike mockedModule, final String name) { doReturn(name).when(mockedModule).getName(); doReturn(Optional.of(REVISION)).when(mockedModule).getRevision(); final URI newNamespace = URI.create(NAMESPACE.toString() + ":" + name); @@ -663,7 +675,5 @@ public class SchemaContextProxyTest { doReturn(new HashSet<>()).when(mockedModule).getSubmodules(); doReturn(mockedModule.getQNameModule().toString()).when(mockedModule).toString(); mockModuleImport(mockedModule); - - return mockedModule; } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java index 376bf624ee..4f6ef50f3c 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java @@ -34,8 +34,8 @@ import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition; import org.opendaylight.yangtools.yang.model.api.FeatureDefinition; import org.opendaylight.yangtools.yang.model.api.GroupingDefinition; import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode; -import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.ModuleImport; +import org.opendaylight.yangtools.yang.model.api.ModuleLike; import org.opendaylight.yangtools.yang.model.api.NotificationDefinition; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; @@ -65,7 +65,7 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; @Beta public abstract class AbstractEffectiveModule, E extends DataTreeAwareEffectiveStatement> extends WithSubstatements - implements Module, DocumentedNodeMixin, NotificationNodeContainerCompat { + implements ModuleLike, DocumentedNodeMixin, NotificationNodeContainerCompat { private final String prefix; private final ImmutableSet groupings; private final ImmutableSet uses; diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/AbstractModuleStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/AbstractModuleStatementSupport.java index bfeacc7b82..ee0b1c70ad 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/AbstractModuleStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/AbstractModuleStatementSupport.java @@ -21,8 +21,8 @@ import org.opendaylight.yangtools.concepts.SemVer; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; -import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaNode; +import org.opendaylight.yangtools.yang.model.api.Submodule; 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.EffectiveStatement; @@ -170,11 +170,11 @@ abstract class AbstractModuleStatementSupport protected final ModuleEffectiveStatement createEffective( final StmtContext ctx, final ModuleStatement declared, final ImmutableList> substatements) { - final List submodules = new ArrayList<>(); + final List submodules = new ArrayList<>(); for (StmtContext submoduleCtx : submoduleContexts(ctx)) { final EffectiveStatement submodule = submoduleCtx.buildEffective(); - verify(submodule instanceof Module, "Submodule statement %s is not a Module", submodule); - submodules.add((Module) submodule); + verify(submodule instanceof Submodule, "Submodule statement %s is not a Submodule", submodule); + submodules.add((Submodule) submodule); } return new ModuleEffectiveStatementImpl(ctx, declared, substatements, submodules); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleEffectiveStatementImpl.java index 26a73b4e64..93fe4f0260 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleEffectiveStatementImpl.java @@ -21,6 +21,7 @@ import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.model.api.Module; +import org.opendaylight.yangtools.yang.model.api.Submodule; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace; import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionEffectiveStatement; @@ -45,7 +46,7 @@ import org.opendaylight.yangtools.yang.parser.spi.source.IncludedSubmoduleNameTo import org.opendaylight.yangtools.yang.parser.spi.source.ModuleCtxToModuleQName; final class ModuleEffectiveStatementImpl extends AbstractEffectiveModule - implements ModuleEffectiveStatement { + implements Module, ModuleEffectiveStatement { private final ImmutableMap nameToSubmodule; private final ImmutableMap qnameToExtension; private final ImmutableMap qnameToFeature; @@ -53,11 +54,11 @@ final class ModuleEffectiveStatementImpl extends AbstractEffectiveModule prefixToModule; private final ImmutableMap namespaceToPrefix; private final @NonNull QNameModule qnameModule; - private final ImmutableList submodules; + private final ImmutableList submodules; ModuleEffectiveStatementImpl(final StmtContext ctx, final ModuleStatement declared, final ImmutableList> substatements, - final Collection submodules) { + final Collection submodules) { super(declared, ctx, substatements, findPrefix(ctx, "module", ctx.getStatementArgument())); qnameModule = verifyNotNull(ctx.getFromNamespace(ModuleCtxToModuleQName.class, ctx)); @@ -107,10 +108,15 @@ final class ModuleEffectiveStatementImpl extends AbstractEffectiveModule getSubmodules() { + public Collection getSubmodules() { return submodules; } + @Override + public ModuleEffectiveStatement asEffectiveStatement() { + return this; + } + @Override @SuppressWarnings("unchecked") public > Optional> getNamespaceContents( diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleEffectiveStatementImpl.java index 473ae8ba82..14b8d3b83c 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleEffectiveStatementImpl.java @@ -16,6 +16,7 @@ import com.google.common.collect.ImmutableMap.Builder; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.Maps; +import java.util.Collection; import java.util.HashSet; import java.util.Map; import java.util.Map.Entry; @@ -24,7 +25,7 @@ import java.util.Set; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; -import org.opendaylight.yangtools.yang.model.api.Module; +import org.opendaylight.yangtools.yang.model.api.Submodule; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace; import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement; @@ -45,13 +46,13 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; final class SubmoduleEffectiveStatementImpl extends AbstractEffectiveModule - implements SubmoduleEffectiveStatement, MutableStatement { + implements Submodule, SubmoduleEffectiveStatement, MutableStatement { private final ImmutableMap prefixToModule; private final ImmutableMap namespaceToPrefix; private final QNameModule qnameModule; private Set>> submoduleContexts; - private ImmutableSet submodules; + private ImmutableSet submodules; private boolean sealed; SubmoduleEffectiveStatementImpl(final StmtContext ctx, @@ -123,17 +124,22 @@ final class SubmoduleEffectiveStatementImpl } @Override - public Set getSubmodules() { + public Collection getSubmodules() { checkState(sealed, "Attempt to get base submodules from unsealed submodule effective statement %s", qnameModule); return submodules; } + @Override + public SubmoduleEffectiveStatement asEffectiveStatement() { + return this; + } + @Override public void seal() { if (!sealed) { submodules = ImmutableSet.copyOf(Iterables.transform(submoduleContexts, - ctx -> (Module) ctx.buildEffective())); + ctx -> (Submodule) ctx.buildEffective())); submoduleContexts = ImmutableSet.of(); sealed = true; } diff --git a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug3799Test.java b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug3799Test.java index fc985465ce..f4137be82d 100644 --- a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug3799Test.java +++ b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug3799Test.java @@ -18,6 +18,7 @@ import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.NotificationDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.api.Submodule; public class Bug3799Test { @@ -31,11 +32,11 @@ public class Bug3799Test { assertEquals(1, modules.size()); Module testModule = modules.iterator().next(); - Collection subModules = testModule.getSubmodules(); + Collection subModules = testModule.getSubmodules(); assertNotNull(subModules); assertEquals(1, subModules.size()); - Module testSubmodule = subModules.iterator().next(); + Submodule testSubmodule = subModules.iterator().next(); Collection notifications = testSubmodule.getNotifications(); assertNotNull(notifications); diff --git a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug7480Test.java b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug7480Test.java index aa6200ff87..94b4d19b51 100644 --- a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug7480Test.java +++ b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug7480Test.java @@ -18,6 +18,7 @@ import org.junit.Test; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.api.Submodule; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; import org.opendaylight.yangtools.yang.parser.spi.meta.SomeModifiersUnresolvedException; @@ -38,7 +39,7 @@ public class Bug7480Test { assertTrue(context.findModule(new URI("baz-imp"), Revision.of("2002-01-01")).isPresent()); final Collection foo = context.findModules(new URI("foo")); assertEquals(1, foo.size()); - final Collection subFoos = foo.iterator().next().getSubmodules(); + final Collection subFoos = foo.iterator().next().getSubmodules(); assertEquals(1, subFoos.size()); final Module parentMod = context.findModule(new URI("parent-mod-ns"), Revision.of("2017-09-07")).get(); diff --git a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug9005Test.java b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug9005Test.java index 70ee79318e..c62daf64ba 100644 --- a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug9005Test.java +++ b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug9005Test.java @@ -16,6 +16,7 @@ import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.ModuleImport; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.api.Submodule; public class Bug9005Test { @Test @@ -32,9 +33,9 @@ public class Bug9005Test { assertEquals("bar", imp1.getPrefix()); assertEquals(Revision.ofNullable("2000-01-02"), imp1.getRevision()); - final Collection submodules = foo.getSubmodules(); + final Collection submodules = foo.getSubmodules(); assertEquals(1, submodules.size()); - final Module submodule = submodules.iterator().next(); + final Submodule submodule = submodules.iterator().next(); final Collection subImports = submodule.getImports(); assertEquals(1, subImports.size()); diff --git a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/DeclaredStatementsTest.java b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/DeclaredStatementsTest.java index 684ba2627e..2f51b0f3ed 100644 --- a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/DeclaredStatementsTest.java +++ b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/DeclaredStatementsTest.java @@ -29,6 +29,7 @@ import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.Status; +import org.opendaylight.yangtools.yang.model.api.Submodule; import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement; @@ -245,11 +246,11 @@ public class DeclaredStatementsTest { final IncludeStatement includeStatement = moduleStatement.getIncludes().iterator().next(); assertEquals("child-module-declared-test", includeStatement.getModule()); - final Collection submodules = testModule.getSubmodules(); + final Collection submodules = testModule.getSubmodules(); assertNotNull(submodules); assertEquals(1, submodules.size()); - final Module submodule = submodules.iterator().next(); + final Submodule submodule = submodules.iterator().next(); final SubmoduleStatement submoduleStatement = ((SubmoduleEffectiveStatement) submodule).getDeclared(); final String submoduleStatementName = submoduleStatement.getName(); diff --git a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveModuleTest.java b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveModuleTest.java index 78e396c535..6b8a9e85e3 100644 --- a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveModuleTest.java +++ b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveModuleTest.java @@ -33,6 +33,7 @@ import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.Status; +import org.opendaylight.yangtools.yang.model.api.Submodule; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; @@ -88,7 +89,7 @@ public class EffectiveModuleTest { assertEquals(Optional.of(REVISION), importStmt.getRevision()); assertEquals("imp-pref", importStmt.getPrefix()); - final Collection submodules = rootModule.getSubmodules(); + final Collection submodules = rootModule.getSubmodules(); assertEquals(1, submodules.size()); assertEquals("submod", submodules.iterator().next().getName()); diff --git a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveModulesAndSubmodulesTest.java b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveModulesAndSubmodulesTest.java index 5659212a1f..305723d2e9 100644 --- a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveModulesAndSubmodulesTest.java +++ b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveModulesAndSubmodulesTest.java @@ -21,6 +21,7 @@ import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.api.Submodule; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource; @@ -80,8 +81,8 @@ public class EffectiveModulesAndSubmodulesTest { assertEquals(3, rootChildNodes.size()); assertEquals(1, importedChildNodes.size()); - final Collection rootSubmodules = root.getSubmodules(); - final Collection importedSubmodules = imported.getSubmodules(); + final Collection rootSubmodules = root.getSubmodules(); + final Collection importedSubmodules = imported.getSubmodules(); assertNotNull(rootSubmodules); assertNotNull(importedSubmodules); @@ -89,9 +90,9 @@ public class EffectiveModulesAndSubmodulesTest { assertEquals(2, rootSubmodules.size()); assertEquals(0, importedSubmodules.size()); - Module sub1 = null; - Module sub2 = null; - for (final Module rootSubmodule : rootSubmodules) { + Submodule sub1 = null; + Submodule sub2 = null; + for (final Submodule rootSubmodule : rootSubmodules) { switch (rootSubmodule.getName()) { case "submodule-1": sub1 = rootSubmodule; @@ -118,8 +119,8 @@ public class EffectiveModulesAndSubmodulesTest { assertEquals(1, sub1ChildNodes.size()); assertEquals(1, sub2ChildNodes.size()); - final Collection sub1Submodules = sub1.getSubmodules(); - final Collection sub2Submodules = sub2.getSubmodules(); + final Collection sub1Submodules = sub1.getSubmodules(); + final Collection sub2Submodules = sub2.getSubmodules(); assertNotNull(sub1Submodules); assertNotNull(sub2Submodules); @@ -127,8 +128,8 @@ public class EffectiveModulesAndSubmodulesTest { assertEquals(1, sub1Submodules.size()); assertEquals(0, sub2Submodules.size()); - Module sub1Submodule = null; - for (final Module submodule : sub1Submodules) { + Submodule sub1Submodule = null; + for (final Submodule submodule : sub1Submodules) { switch (submodule.getName()) { case "submodule-to-submodule-1": sub1Submodule = submodule; @@ -145,7 +146,7 @@ public class EffectiveModulesAndSubmodulesTest { assertNotNull(sub1SubmoduleChildNodes); assertEquals(1, sub1SubmoduleChildNodes.size()); - final Collection sub1SubmoduleSubmodules = sub1Submodule.getSubmodules(); + final Collection sub1SubmoduleSubmodules = sub1Submodule.getSubmodules(); assertNotNull(sub1SubmoduleSubmodules); assertEquals(0, sub1SubmoduleSubmodules.size()); diff --git a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/IncludedStmtsTest.java b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/IncludedStmtsTest.java index c3d0c1575b..1968e1f992 100644 --- a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/IncludedStmtsTest.java +++ b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/IncludedStmtsTest.java @@ -25,6 +25,7 @@ import org.opendaylight.yangtools.yang.model.api.FeatureDefinition; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.api.Submodule; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; @@ -102,7 +103,7 @@ public class IncludedStmtsTest { final Module testModule = result.findModules("root-module").iterator().next(); assertNotNull(testModule); - final Module subModule = testModule.getSubmodules().iterator().next(); + final Submodule subModule = testModule.getSubmodules().iterator().next(); assertEquals("urn:opendaylight.org/root-module", subModule.getNamespace().toString()); } } diff --git a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/StmtTestUtils.java b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/StmtTestUtils.java index 04af526725..a4c26fb24f 100644 --- a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/StmtTestUtils.java +++ b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/StmtTestUtils.java @@ -25,7 +25,9 @@ import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.ModuleImport; +import org.opendaylight.yangtools.yang.model.api.ModuleLike; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.api.Submodule; import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.StatementParserMode; @@ -83,9 +85,9 @@ public final class StmtTestUtils { } } - public static void printReferences(final Module module, final boolean isSubmodule, final String indent) { + public static void printReferences(final ModuleLike module, final boolean isSubmodule, final String indent) { LOG.debug("{}{} {}", indent, isSubmodule ? "Submodule" : "Module", module.getName()); - for (final Module submodule : module.getSubmodules()) { + for (final Submodule submodule : module.getSubmodules()) { printReferences(submodule, true, indent + " "); printChilds(submodule.getChildNodes(), indent + " "); } diff --git a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/yin/YinFileIncludeStmtTest.java b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/yin/YinFileIncludeStmtTest.java index c2cd1fb8f7..ccd0d8c192 100644 --- a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/yin/YinFileIncludeStmtTest.java +++ b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/yin/YinFileIncludeStmtTest.java @@ -18,6 +18,7 @@ import org.junit.Before; import org.junit.Test; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.api.Submodule; import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; import org.opendaylight.yangtools.yang.stmt.TestUtils; import org.xml.sax.SAXException; @@ -39,9 +40,9 @@ public class YinFileIncludeStmtTest { assertNotNull(parentModule); assertEquals(1, parentModule.getSubmodules().size()); - Iterator submodulesIterator = parentModule.getSubmodules().iterator(); + Iterator submodulesIterator = parentModule.getSubmodules().iterator(); - Module childModule = submodulesIterator.next() ; + Submodule childModule = submodulesIterator.next() ; assertNotNull(childModule); assertEquals("child", childModule.getName()); assertEquals(new URI("urn:opendaylight/parent"), childModule.getNamespace()); -- 2.36.6