X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=yang%2Fyang-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fstmt%2Frfc6020%2FModuleStatementSupport.java;h=16e45ee35d76bfdd58031c37612591692c18a696;hb=cde047f709ab56c39012678faba8b56da458d05b;hp=2f0e06ba1da14889f8fd41f99a21469dbdaa0244;hpb=4968d735af48cd6b0ea91b37fbd238316c7cb46c;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 2f0e06ba1d..16e45ee35d 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 @@ -7,25 +7,24 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; -import static org.opendaylight.yangtools.yang.parser.spi.SubstatementValidator.MAX; import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.firstAttributeOf; -import com.google.common.base.Optional; import java.net.URI; import java.util.Date; import java.util.NavigableMap; +import java.util.Optional; import java.util.TreeMap; import org.opendaylight.yangtools.concepts.SemVer; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier; -import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement; import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; -import org.opendaylight.yangtools.yang.parser.builder.impl.ModuleIdentifierImpl; +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; @@ -50,39 +49,39 @@ import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ModuleEffec public class ModuleStatementSupport extends AbstractStatementSupport> { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(Rfc6020Mapping + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping .MODULE) - .add(Rfc6020Mapping.ANYXML, 0, MAX) - .add(Rfc6020Mapping.AUGMENT, 0, MAX) - .add(Rfc6020Mapping.CHOICE, 0, MAX) - .add(Rfc6020Mapping.CONTACT, 0, 1) - .add(Rfc6020Mapping.CONTAINER, 0, MAX) - .add(Rfc6020Mapping.DESCRIPTION, 0, 1) - .add(Rfc6020Mapping.DEVIATION, 0, MAX) - .add(Rfc6020Mapping.EXTENSION, 0, MAX) - .add(Rfc6020Mapping.FEATURE, 0, MAX) - .add(Rfc6020Mapping.GROUPING, 0, MAX) - .add(Rfc6020Mapping.IDENTITY, 0, MAX) - .add(Rfc6020Mapping.IMPORT, 0, MAX) - .add(Rfc6020Mapping.INCLUDE, 0, MAX) - .add(Rfc6020Mapping.LEAF, 0, MAX) - .add(Rfc6020Mapping.LEAF_LIST, 0, MAX) - .add(Rfc6020Mapping.LIST, 0, MAX) - .add(Rfc6020Mapping.NAMESPACE, 1, 1) - .add(Rfc6020Mapping.NOTIFICATION, 0, MAX) - .add(Rfc6020Mapping.ORGANIZATION, 0, 1) - .add(Rfc6020Mapping.PREFIX, 1, 1) - .add(Rfc6020Mapping.REFERENCE, 0, 1) - .add(Rfc6020Mapping.REVISION, 0, MAX) - .add(Rfc6020Mapping.RPC, 0, MAX) - .add(Rfc6020Mapping.TYPEDEF, 0, MAX) - .add(Rfc6020Mapping.USES, 0, MAX) - .add(Rfc6020Mapping.YANG_VERSION, 0, 1) - .add(SupportedExtensionsMapping.SEMANTIC_VERSION, 0, 1) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.AUGMENT) + .addAny(YangStmtMapping.CHOICE) + .addOptional(YangStmtMapping.CONTACT) + .addAny(YangStmtMapping.CONTAINER) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.DEVIATION) + .addAny(YangStmtMapping.EXTENSION) + .addAny(YangStmtMapping.FEATURE) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.IDENTITY) + .addAny(YangStmtMapping.IMPORT) + .addAny(YangStmtMapping.INCLUDE) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addMandatory(YangStmtMapping.NAMESPACE) + .addAny(YangStmtMapping.NOTIFICATION) + .addOptional(YangStmtMapping.ORGANIZATION) + .addMandatory(YangStmtMapping.PREFIX) + .addOptional(YangStmtMapping.REFERENCE) + .addAny(YangStmtMapping.REVISION) + .addAny(YangStmtMapping.RPC) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.USES) + .addOptional(YangStmtMapping.YANG_VERSION) + .addOptional(SupportedExtensionsMapping.SEMANTIC_VERSION) .build(); public ModuleStatementSupport() { - super(Rfc6020Mapping.MODULE); + super(YangStmtMapping.MODULE); } @Override @@ -102,7 +101,7 @@ public class ModuleStatementSupport extends } @Override - public void onPreLinkageDeclared(Mutable> stmt) { + public void onPreLinkageDeclared(final Mutable> stmt) { final String moduleName = stmt.getStatementArgument(); final URI moduleNs = firstAttributeOf(stmt.declaredSubstatements(), @@ -117,24 +116,33 @@ public class ModuleStatementSupport extends stmt.addToNs(ImpPrefixToNamespace.class, modulePrefix, moduleNs); stmt.addContext(PreLinkageModuleNamespace.class, moduleName, stmt); - }; + + Optional revisionDate = Optional.ofNullable(Utils.getLatestRevision(stmt.declaredSubstatements())); + if (!revisionDate.isPresent()) { + revisionDate = Optional.of(SimpleDateFormatUtil.DEFAULT_DATE_REV); + } + + final QNameModule qNameModule = QNameModule.create(moduleNs, revisionDate.orElse(null)).intern(); + + stmt.addToNs(ModuleCtxToModuleQName.class, stmt, qNameModule); + } @Override public void onLinkageDeclared(final Mutable> stmt) { - Optional moduleNs = Optional.fromNullable(firstAttributeOf(stmt.declaredSubstatements(), + final Optional moduleNs = Optional.ofNullable(firstAttributeOf(stmt.declaredSubstatements(), NamespaceStatement.class)); SourceException.throwIf(!moduleNs.isPresent(), stmt.getStatementSourceReference(), "Namespace of the module [%s] is missing", stmt.getStatementArgument()); - Optional revisionDate = Optional.fromNullable(Utils.getLatestRevision(stmt.declaredSubstatements())); + Optional revisionDate = Optional.ofNullable(Utils.getLatestRevision(stmt.declaredSubstatements())); if (!revisionDate.isPresent()) { revisionDate = Optional.of(SimpleDateFormatUtil.DEFAULT_DATE_REV); } - QNameModule qNameModule = QNameModule.create(moduleNs.get(), revisionDate.orNull()).intern(); - ModuleIdentifier moduleIdentifier = new ModuleIdentifierImpl(stmt.getStatementArgument(), - Optional.absent(), revisionDate); + final QNameModule qNameModule = QNameModule.create(moduleNs.get(), revisionDate.orElse(null)).intern(); + final ModuleIdentifier moduleIdentifier = ModuleIdentifierImpl.create(stmt.getStatementArgument(), + Optional.empty(), revisionDate); stmt.addContext(ModuleNamespace.class, moduleIdentifier, stmt); stmt.addContext(ModuleNamespaceForBelongsTo.class, moduleIdentifier.getName(), stmt); @@ -146,7 +154,7 @@ public class ModuleStatementSupport extends stmt.addToNs(PrefixToModule.class, modulePrefix, qNameModule); stmt.addToNs(ModuleNameToModuleQName.class, stmt.getStatementArgument(), qNameModule); - stmt.addToNs(ModuleCtxToModuleQName.class, stmt, qNameModule); + stmt.addToNs(ModuleCtxToModuleQName.class, stmt, qNameModule); // tu stmt.addToNs(ModuleCtxToModuleIdentifier.class, stmt, moduleIdentifier); stmt.addToNs(ModuleQNameToModuleName.class, qNameModule, stmt.getStatementArgument()); stmt.addToNs(ModuleIdentifierToModuleQName.class, moduleIdentifier, qNameModule); @@ -157,13 +165,13 @@ public class ModuleStatementSupport extends } } - private void addToSemVerModuleNamespace( + private static void addToSemVerModuleNamespace( final Mutable> stmt) { final String moduleName = stmt.getStatementArgument(); NavigableMap> modulesMap = stmt.getFromNamespace( SemanticVersionModuleNamespace.class, moduleName); if (modulesMap == null) { - modulesMap = new TreeMap>(); + modulesMap = new TreeMap<>(); } SemVer moduleSemVer = stmt.getFromNamespace(SemanticVersionNamespace.class, stmt); if(moduleSemVer == null) { @@ -174,9 +182,7 @@ public class ModuleStatementSupport extends } @Override - public void onFullDefinitionDeclared(final Mutable> stmt) { - super.onFullDefinitionDeclared(stmt); - SUBSTATEMENT_VALIDATOR.validate(stmt); + protected SubstatementValidator getSubstatementValidator() { + return SUBSTATEMENT_VALIDATOR; } }