X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fstmt%2Frfc6020%2FModuleStatementSupport.java;h=f4798f64f340a765f071d2af2cfe4a32bfdf631c;hb=refs%2Fchanges%2F38%2F61238%2F11;hp=fe6e791e55463b76e741603a2c999e9e842e7753;hpb=c92cf0a8da5dc50ca2e4acd142b963674c2ad76c;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ModuleStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ModuleStatementSupport.java index fe6e791e55..f4798f64f3 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ModuleStatementSupport.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ModuleStatementSupport.java @@ -28,12 +28,13 @@ import org.opendaylight.yangtools.yang.model.util.ModuleIdentifierImpl; import org.opendaylight.yangtools.yang.parser.spi.ModuleNamespace; import org.opendaylight.yangtools.yang.parser.spi.NamespaceToModule; import org.opendaylight.yangtools.yang.parser.spi.PreLinkageModuleNamespace; -import org.opendaylight.yangtools.yang.parser.spi.SubstatementValidator; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.SemanticVersionModuleNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.SemanticVersionNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; import org.opendaylight.yangtools.yang.parser.spi.source.ImpPrefixToModuleIdentifier; import org.opendaylight.yangtools.yang.parser.spi.source.ImpPrefixToNamespace; import org.opendaylight.yangtools.yang.parser.spi.source.ModuleCtxToModuleIdentifier; @@ -77,7 +78,7 @@ public class ModuleStatementSupport extends .addAny(YangStmtMapping.TYPEDEF) .addAny(YangStmtMapping.USES) .addOptional(YangStmtMapping.YANG_VERSION) - .addOptional(SupportedExtensionsMapping.SEMANTIC_VERSION) + .addOptional(SupportedExtensionsMapping.OPENCONFIG_VERSION) .build(); public ModuleStatementSupport() { @@ -104,8 +105,7 @@ public class ModuleStatementSupport extends public void onPreLinkageDeclared(final Mutable> stmt) { final String moduleName = stmt.getStatementArgument(); - final URI moduleNs = firstAttributeOf(stmt.declaredSubstatements(), - NamespaceStatement.class); + final URI moduleNs = firstAttributeOf(stmt.declaredSubstatements(), NamespaceStatement.class); SourceException.throwIfNull(moduleNs, stmt.getStatementSourceReference(), "Namespace of the module [%s] is missing", stmt.getStatementArgument()); stmt.addToNs(ModuleNameToNamespace.class, moduleName, moduleNs); @@ -117,7 +117,8 @@ public class ModuleStatementSupport extends stmt.addContext(PreLinkageModuleNamespace.class, moduleName, stmt); - Optional revisionDate = Optional.ofNullable(Utils.getLatestRevision(stmt.declaredSubstatements())); + Optional revisionDate = Optional.ofNullable(StmtContextUtils.getLatestRevision( + stmt.declaredSubstatements())); if (!revisionDate.isPresent()) { revisionDate = Optional.of(SimpleDateFormatUtil.DEFAULT_DATE_REV); } @@ -125,6 +126,8 @@ public class ModuleStatementSupport extends final QNameModule qNameModule = QNameModule.create(moduleNs, revisionDate.orElse(null)).intern(); stmt.addToNs(ModuleCtxToModuleQName.class, stmt, qNameModule); + stmt.setRootIdentifier(ModuleIdentifierImpl.create(stmt.getStatementArgument(), + Optional.empty(), revisionDate)); } @Override @@ -135,12 +138,21 @@ public class ModuleStatementSupport extends SourceException.throwIf(!moduleNs.isPresent(), stmt.getStatementSourceReference(), "Namespace of the module [%s] is missing", stmt.getStatementArgument()); - Optional revisionDate = Optional.ofNullable(Utils.getLatestRevision(stmt.declaredSubstatements())); + Optional revisionDate = Optional.ofNullable(StmtContextUtils.getLatestRevision( + stmt.declaredSubstatements())); if (!revisionDate.isPresent()) { revisionDate = Optional.of(SimpleDateFormatUtil.DEFAULT_DATE_REV); } final QNameModule qNameModule = QNameModule.create(moduleNs.get(), revisionDate.orElse(null)).intern(); + + final StmtContext> possibleDuplicateModule = + stmt.getFromNamespace(NamespaceToModule.class, qNameModule); + if (possibleDuplicateModule != null && possibleDuplicateModule != stmt) { + throw new SourceException(stmt.getStatementSourceReference(), "Module namespace collision: %s. At %s", + qNameModule.getNamespace(), possibleDuplicateModule.getStatementSourceReference()); + } + final ModuleIdentifier moduleIdentifier = ModuleIdentifierImpl.create(stmt.getStatementArgument(), Optional.empty(), revisionDate); @@ -182,12 +194,6 @@ public class ModuleStatementSupport extends } @Override - public void onFullDefinitionDeclared(final Mutable> stmt) { - super.onFullDefinitionDeclared(stmt); - getSubstatementValidator().validate(stmt); - } - protected SubstatementValidator getSubstatementValidator() { return SUBSTATEMENT_VALIDATOR; }