Separate out Module and Submodule interfaces 93/92893/8
authorRobert Varga <robert.varga@pantheon.tech>
Sun, 4 Oct 2020 20:11:40 +0000 (22:11 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 5 Oct 2020 07:56:23 +0000 (09:56 +0200)
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 <robert.varga@pantheon.tech>
27 files changed:
yang/yang-maven-plugin-spi/src/main/java/org/opendaylight/yangtools/yang2sources/spi/ModuleResourceResolver.java
yang/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/ContextHolder.java
yang/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/ProcessorModuleReactor.java
yang/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/Util.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/Module.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ModuleLike.java [new file with mode: 0644]
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/Submodule.java [new file with mode: 0644]
yang/yang-model-export/src/main/java/org/opendaylight/yangtools/yang/model/export/YinExportUtils.java
yang/yang-model-export/src/test/java/org/opendaylight/yangtools/yang/model/export/AbstractYinExportTest.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/FilteringSchemaContextProxy.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/ModuleDependencySort.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaContextUtil.java
yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/ModuleDependencySortTest.java
yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/SchemaContextProxyTest.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractEffectiveModule.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/AbstractModuleStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug3799Test.java
yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug7480Test.java
yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug9005Test.java
yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/DeclaredStatementsTest.java
yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveModuleTest.java
yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveModulesAndSubmodulesTest.java
yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/IncludedStmtsTest.java
yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/StmtTestUtils.java
yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/yin/YinFileIncludeStmtTest.java

index 2162eebc3a442963e9a410990f2a6a398ffa3252..d1e0c5b82f5b2c8bad2f8dfa9a5c7a030fbc4e73 100644 (file)
@@ -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<String> findModuleResourcePath(Module module, Class<? extends SchemaSourceRepresentation> representation);
+    Optional<String> findModuleResourcePath(ModuleLike module,
+        Class<? extends SchemaSourceRepresentation> representation);
 }
index a26b0fec1d06acf943f792b6cb21e9118eaf2a30..ffe1d99d9f03f2b6636eda0efb30802b92172275 100644 (file)
@@ -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<String> findModuleResourcePath(final Module module,
+    public Optional<String> findModuleResourcePath(final ModuleLike module,
             final Class<? extends SchemaSourceRepresentation> representation) {
         checkArgument(YangTextSchemaSource.class.equals(requireNonNull(representation)),
             "Unsupported representation %s", representation);
index af0b8a85dc44be5000b029a5132ba61b655d960f..fa1a2353e68b6298e435277af19a5c13159198bb 100644 (file)
@@ -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);
index c2c5252f55aebf0ad96844edecfcbd54f511ddbb..07cf2e2ccdace69cd010296e4ecc1965ff67aedf 100644 (file)
@@ -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());
     }
 }
index 3192d72cb3349e9bf449936664bfa84c31574cc2..9a3aacde774fc56ab0c46443bf709d2baece9e07 100644 (file)
  */
 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<ModuleEffectiveStatement> {
 
-    /**
-     * 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<Revision> 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<SemVer> 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<String> getOrganization();
-
-    /**
-     * Returns the module contact.
-     *
-     * <p>
-     * 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<String> 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<? extends ModuleImport> getImports();
-
-    Collection<? extends Module> getSubmodules();
-
-    /**
-     * Returns {@link FeatureDefinition} instances which contain data from {@code feature} statements defined in the
-     * module.
-     *
-     * <p>
-     * 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<? extends FeatureDefinition> 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<? extends AugmentationSchemaNode> 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<? extends RpcDefinition> getRpcs();
-
-    /**
-     * Returns {@link Deviation} instances which contain data from {@code deviation} statements defined in the module.
-     *
-     * @return set of the deviation instances
-     */
-    Collection<? extends Deviation> 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<? extends IdentitySchemaNode> 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<? extends ExtensionDefinition> 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 (file)
index 0000000..0436781
--- /dev/null
@@ -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<Revision> 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<SemVer> 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<String> getOrganization();
+
+    /**
+     * Returns the module contact.
+     *
+     * <p>
+     * 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<String> 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<? extends ModuleImport> getImports();
+
+    // FIXME: YANGTOOLS-1006: this should be only in Module
+    Collection<? extends Submodule> getSubmodules();
+
+    /**
+     * Returns {@link FeatureDefinition} instances which contain data from {@code feature} statements defined in the
+     * module.
+     *
+     * <p>
+     * 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<? extends FeatureDefinition> 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<? extends AugmentationSchemaNode> 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<? extends RpcDefinition> getRpcs();
+
+    /**
+     * Returns {@link Deviation} instances which contain data from {@code deviation} statements defined in the module.
+     *
+     * @return set of the deviation instances
+     */
+    Collection<? extends Deviation> 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<? extends IdentitySchemaNode> 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<? extends ExtensionDefinition> 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 (file)
index 0000000..5dcb443
--- /dev/null
@@ -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<SubmoduleEffectiveStatement> {
+
+}
index 084b161649fc703e66efd77e44371806c3f526c2..ce289805e8c38d6ccce304e5e663ba75a2221c3e 100644 (file)
@@ -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);
     }
 
     /**
index 59a4921a195a9ae04c7b3207fb377f31d09261bc..004ea00c73559faee5a8f56aa738dc65eda0eeb8 100644 (file)
@@ -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);
index 2e387ad13bd0caf47ab5bf5b9835cb2d8b128cfc..ec3c9e958ab295e94caf8e86561462c5e47b7f8a 100644 (file)
@@ -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<QNameModule, Module> 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<ModuleId> rootModules) {
+    private boolean checkModuleDependency(final ModuleLike module, final Collection<ModuleId> 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);
             }
         }
index 255875b9f43c17cf05953ea5f5568994f3229691..5e9ba484de9d0cb5432f03bd1e5cbcf6368d7f4e 100644 (file)
@@ -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<ModuleImport> concat = new LinkedHashSet<>();
         concat.addAll(mod.getImports());
-        for (Module sub : mod.getSubmodules()) {
+        for (Submodule sub : mod.getSubmodules()) {
             concat.addAll(sub.getImports());
         }
         return concat;
index 423d4c43b76c1190ffbe6f93c55f35e678ae77af..62e59cca60c2d74030cb5429d42dd0cb318610e0 100644 (file)
@@ -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());
     }
 
index b8b4f602ce5f34e162a84fc026742765caff261f..9086f37642f8aea8d987e6095ec46f7e42e0247e 100644 (file)
@@ -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() {
index 9ad046d51c02d943dc1b10cf14e93cd9faf8a4c1..4181d8ca063ad029164ac56e53a8b3721cfcfdb6 100644 (file)
@@ -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<Module> submodulesSet = new HashSet<>();
+    private static void mockSubmodules(final Module mainModule, final Submodule... submodules) {
+        Set<Submodule> 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<ModuleImport> 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;
     }
 }
index 376bf624eecbc312b567a6611ff68100512d5119..4f6ef50f3c2c4516c6fb1465ed113f7b35ff4d04 100644 (file)
@@ -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<D extends DeclaredStatement<String>,
         E extends DataTreeAwareEffectiveStatement<String, D>> extends WithSubstatements<String, D, E>
-        implements Module, DocumentedNodeMixin<String, D>, NotificationNodeContainerCompat<String, D, E> {
+        implements ModuleLike, DocumentedNodeMixin<String, D>, NotificationNodeContainerCompat<String, D, E> {
     private final String prefix;
     private final ImmutableSet<GroupingDefinition> groupings;
     private final ImmutableSet<UsesNode> uses;
index bfeacc7b82f955cfc9500f300fffb124edbad083..ee0b1c70adedfb51772f320a9bcc47ca61d015a8 100644 (file)
@@ -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<String, ModuleStatement, ModuleEffectiveStatement> ctx,
             final ModuleStatement declared, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
-        final List<Module> submodules = new ArrayList<>();
+        final List<Submodule> 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);
index 26a73b4e641d7c88a9a0d366c359bd34b958ccf4..93fe4f0260541c245d6ebfd0eaa663f3cd47d937 100644 (file)
@@ -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<ModuleStatement, ModuleEffectiveStatement>
-        implements ModuleEffectiveStatement {
+        implements Module, ModuleEffectiveStatement {
     private final ImmutableMap<String, SubmoduleEffectiveStatement> nameToSubmodule;
     private final ImmutableMap<QName, ExtensionEffectiveStatement> qnameToExtension;
     private final ImmutableMap<QName, FeatureEffectiveStatement> qnameToFeature;
@@ -53,11 +54,11 @@ final class ModuleEffectiveStatementImpl extends AbstractEffectiveModule<ModuleS
     private final ImmutableMap<String, ModuleEffectiveStatement> prefixToModule;
     private final ImmutableMap<QNameModule, String> namespaceToPrefix;
     private final @NonNull QNameModule qnameModule;
-    private final ImmutableList<Module> submodules;
+    private final ImmutableList<Submodule> submodules;
 
     ModuleEffectiveStatementImpl(final StmtContext<String, ModuleStatement, ModuleEffectiveStatement> ctx,
             final ModuleStatement declared, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
-            final Collection<? extends Module> submodules) {
+            final Collection<? extends Submodule> 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<ModuleS
     }
 
     @Override
-    public Collection<? extends Module> getSubmodules() {
+    public Collection<? extends Submodule> getSubmodules() {
         return submodules;
     }
 
+    @Override
+    public ModuleEffectiveStatement asEffectiveStatement() {
+        return this;
+    }
+
     @Override
     @SuppressWarnings("unchecked")
     public <K, V, N extends IdentifierNamespace<K, V>> Optional<? extends Map<K, V>> getNamespaceContents(
index 473ae8ba82ed7a455d40e6900c8571b780ffcefb..14b8d3b83c2f4201cb7a2d597b645fd1b194187f 100644 (file)
@@ -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<SubmoduleStatement, SubmoduleEffectiveStatement>
-        implements SubmoduleEffectiveStatement, MutableStatement {
+        implements Submodule, SubmoduleEffectiveStatement, MutableStatement {
     private final ImmutableMap<String, ModuleEffectiveStatement> prefixToModule;
     private final ImmutableMap<QNameModule, String> namespaceToPrefix;
     private final QNameModule qnameModule;
 
     private Set<StmtContext<?, SubmoduleStatement, EffectiveStatement<String, SubmoduleStatement>>> submoduleContexts;
-    private ImmutableSet<Module> submodules;
+    private ImmutableSet<Submodule> submodules;
     private boolean sealed;
 
     SubmoduleEffectiveStatementImpl(final StmtContext<String, SubmoduleStatement, SubmoduleEffectiveStatement> ctx,
@@ -123,17 +124,22 @@ final class SubmoduleEffectiveStatementImpl
     }
 
     @Override
-    public Set<Module> getSubmodules() {
+    public Collection<? extends Submodule> 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;
         }
index fc985465ce47bcc9fa23f556cd7bca617a6a85f2..f4137be82da56ea48dfec5fc9e86dddf051c1d7a 100644 (file)
@@ -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<? extends Module> subModules = testModule.getSubmodules();
+        Collection<? extends Submodule> subModules = testModule.getSubmodules();
         assertNotNull(subModules);
         assertEquals(1, subModules.size());
 
-        Module testSubmodule = subModules.iterator().next();
+        Submodule testSubmodule = subModules.iterator().next();
 
         Collection<? extends NotificationDefinition> notifications = testSubmodule.getNotifications();
         assertNotNull(notifications);
index aa6200ff87e9990cad913fbfdc47a371a5de4452..94b4d19b51a3dc15cb8e944b6a214dc67a2620a6 100644 (file)
@@ -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<? extends Module> foo = context.findModules(new URI("foo"));
         assertEquals(1, foo.size());
-        final Collection<? extends Module> subFoos = foo.iterator().next().getSubmodules();
+        final Collection<? extends Submodule> 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();
index 70ee79318eea232cfeb6ed047e221ddd464a485c..c62daf64ba84fdee6354e9bf70b2fcea0d5f0de7 100644 (file)
@@ -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<? extends Module> submodules = foo.getSubmodules();
+        final Collection<? extends Submodule> submodules = foo.getSubmodules();
         assertEquals(1, submodules.size());
-        final Module submodule = submodules.iterator().next();
+        final Submodule submodule = submodules.iterator().next();
         final Collection<? extends ModuleImport> subImports = submodule.getImports();
 
         assertEquals(1, subImports.size());
index 684ba2627e7664caeb3f4b78150f2006febd5fda..2f51b0f3ed9458a64a93a6959d400f52e1556afc 100644 (file)
@@ -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<? extends Module> submodules = testModule.getSubmodules();
+        final Collection<? extends Submodule> 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();
index 78e396c53511337b25562a8de76c83bea8fa2181..6b8a9e85e3beb3a65f970fa7b78d715b6f14e6ed 100644 (file)
@@ -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<? extends Module> submodules = rootModule.getSubmodules();
+        final Collection<? extends Submodule> submodules = rootModule.getSubmodules();
         assertEquals(1, submodules.size());
         assertEquals("submod", submodules.iterator().next().getName());
 
index 5659212a1f7e2050b600c211b2ebce29c1ddda92..305723d2e9bd0289dbd4f90f6fe190ec1547460a 100644 (file)
@@ -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<? extends Module> rootSubmodules = root.getSubmodules();
-        final Collection<? extends Module> importedSubmodules = imported.getSubmodules();
+        final Collection<? extends Submodule> rootSubmodules = root.getSubmodules();
+        final Collection<? extends Submodule> 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<? extends Module> sub1Submodules = sub1.getSubmodules();
-        final Collection<? extends Module> sub2Submodules = sub2.getSubmodules();
+        final Collection<? extends Submodule> sub1Submodules = sub1.getSubmodules();
+        final Collection<? extends Submodule> 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<? extends Module> sub1SubmoduleSubmodules = sub1Submodule.getSubmodules();
+        final Collection<? extends Submodule> sub1SubmoduleSubmodules = sub1Submodule.getSubmodules();
         assertNotNull(sub1SubmoduleSubmodules);
         assertEquals(0, sub1SubmoduleSubmodules.size());
 
index c3d0c1575be70a0b10df08541f5f42ffc8887cf9..1968e1f99214ae6df85b3d79f06278b4dd421bfd 100644 (file)
@@ -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());
     }
 }
index 04af52672575dce330b31c8b9673f0079dfe5823..a4c26fb24f22bb0a17164819e88ad2fed03ec942 100644 (file)
@@ -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 + "            ");
         }
index c2cd1fb8f7b00da992b541af1b9366baa1b08a9e..ccd0d8c1923ef0d92f181fbdba97ab9f400daa60 100644 (file)
@@ -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<? extends Module> submodulesIterator = parentModule.getSubmodules().iterator();
+        Iterator<? extends Submodule> 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());