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;
/**
* @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);
}
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;
}
@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);
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;
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);
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;
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());
}
}
*/
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();
}
--- /dev/null
+/*
+ * 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();
+}
--- /dev/null
+/*
+ * 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> {
+
+}
*/
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;
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;
@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);
}
/**
*/
@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);
}
/**
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;
for (Module module : modules) {
readAndValidateModule(schemaContext, module, yinDir);
- for (Module submodule : module.getSubmodules()) {
+ for (Submodule submodule : module.getSubmodules()) {
readAndValidateSubmodule(schemaContext, module, submodule, yinDir);
}
}
}
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));
}
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);
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;
}
//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;
}
//submodules handling
- for (Module moduleSub : module.getSubmodules()) {
+ for (Submodule moduleSub : module.getSubmodules()) {
return checkModuleDependency(moduleSub, rootModules);
}
}
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;
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;
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;
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;
for (Module module : context.getModules()) {
ret.add(moduleToIdentifier(module));
- for (Module submodule : module.getSubmodules()) {
+ for (Submodule submodule : module.getSubmodules()) {
ret.add(moduleToIdentifier(submodule));
}
}
return ret;
}
- private static SourceIdentifier moduleToIdentifier(final Module module) {
+ private static SourceIdentifier moduleToIdentifier(final ModuleLike module) {
return RevisionSourceIdentifier.create(module.getName(), module.getRevision());
}
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 {
private Module bar;
@Mock
- private Module barSubmodule;
+ private Submodule barSubmodule;
@Before
public void before() {
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;
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);
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() {
//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);
doReturn(new HashSet<>()).when(mockedModule).getSubmodules();
doReturn(mockedModule.getQNameModule().toString()).when(mockedModule).toString();
mockModuleImport(mockedModule);
-
- return mockedModule;
}
}
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;
@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;
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;
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);
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;
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;
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));
}
@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(
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;
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;
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,
}
@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;
}
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 {
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);
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;
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();
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
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());
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;
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();
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;
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());
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;
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);
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;
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);
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;
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());
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;
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());
}
}
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;
}
}
- 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 + " ");
}
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;
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());