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%2FImportStatementDefinition.java;h=6bf310158fc9a866697310dada0ce70bca48d082;hb=04fa25a4fe8957f6492618aa9a1e9a4f9af39df4;hp=05b74316906d8fc4b16445eb424246d5d092a569;hpb=d1f606bf178d536ab6681bc9dbf8205906bcf40d;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ImportStatementDefinition.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ImportStatementDefinition.java index 05b7431690..6bf310158f 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ImportStatementDefinition.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ImportStatementDefinition.java @@ -9,25 +9,24 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; import static org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase.SOURCE_LINKAGE; import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.firstAttributeOf; - -import java.util.Set; - -import java.util.Map.Entry; -import java.util.Map; -import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement; import com.google.common.base.Optional; import java.net.URI; import java.util.Collection; import java.util.Date; +import java.util.Map; +import java.util.Map.Entry; import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil; import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier; import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ImportStatement; +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.model.api.stmt.RevisionDateStatement; import org.opendaylight.yangtools.yang.parser.builder.impl.ModuleIdentifierImpl; import org.opendaylight.yangtools.yang.parser.spi.ModuleNamespace; +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.InferenceException; import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder; @@ -36,95 +35,90 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Prereq 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.source.ImpPrefixToModuleIdentifier; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ImportEffectiveStatementImpl; public class ImportStatementDefinition - extends - AbstractStatementSupport> { + extends AbstractStatementSupport> { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(Rfc6020Mapping.IMPORT) + .add(Rfc6020Mapping.PREFIX, 1, 1).add(Rfc6020Mapping.REVISION_DATE, 0, 1).build(); public ImportStatementDefinition() { super(Rfc6020Mapping.IMPORT); } @Override - public String parseArgumentValue(StmtContext ctx, String value) { + public String parseArgumentValue(final StmtContext ctx, final String value) { return value; } @Override - public ImportStatement createDeclared( - StmtContext ctx) { + public ImportStatement createDeclared(final StmtContext ctx) { return new ImportStatementImpl(ctx); } @Override public EffectiveStatement createEffective( - StmtContext> ctx) { + final StmtContext> ctx) { return new ImportEffectiveStatementImpl(ctx); } + @Override + public void onFullDefinitionDeclared( + final Mutable> stmt) { + super.onFullDefinitionDeclared(stmt); + SUBSTATEMENT_VALIDATOR.validate(stmt); + } + @Override public void onLinkageDeclared( - final Mutable> stmt) - throws SourceException { + final Mutable> stmt) { final ModuleIdentifier impIdentifier = getImportedModuleIdentifier(stmt); - ModelActionBuilder importAction = stmt - .newInferenceAction(SOURCE_LINKAGE); - final Prerequisite> imported; - final Prerequisite> linkageTarget; - imported = importAction.requiresCtx(stmt, ModuleNamespace.class, - impIdentifier, SOURCE_LINKAGE); - linkageTarget = importAction.mutatesCtx(stmt.getRoot(), SOURCE_LINKAGE); + final ModelActionBuilder importAction = stmt.newInferenceAction(SOURCE_LINKAGE); + final Prerequisite> imported = importAction.requiresCtx(stmt, ModuleNamespace.class, + impIdentifier, SOURCE_LINKAGE); + final Prerequisite> linkageTarget = importAction.mutatesCtx(stmt.getRoot(), SOURCE_LINKAGE); importAction.apply(new InferenceAction() { - @Override - public void apply() throws InferenceException { + public void apply() { StmtContext importedModule = null; ModuleIdentifier importedModuleIdentifier = null; if (impIdentifier.getRevision() == SimpleDateFormatUtil.DEFAULT_DATE_IMP) { - Entry>> recentModuleEntry = findRecentModule( - impIdentifier, - stmt.getAllFromNamespace(ModuleNamespace.class)); + Entry>> recentModuleEntry = + findRecentModule(impIdentifier, stmt.getAllFromNamespace(ModuleNamespace.class)); if (recentModuleEntry != null) { importedModuleIdentifier = recentModuleEntry.getKey(); importedModule = recentModuleEntry.getValue(); } } - if(importedModule == null || importedModuleIdentifier == null) { + if (importedModule == null || importedModuleIdentifier == null) { importedModule = imported.get(); importedModuleIdentifier = impIdentifier; } - linkageTarget.get().addToNs(ImportedModuleContext.class, - importedModuleIdentifier, importedModule); - String impPrefix = firstAttributeOf(stmt.declaredSubstatements(), - PrefixStatement.class); - stmt.addToNs(ImpPrefixToModuleIdentifier.class, impPrefix, - importedModuleIdentifier); + linkageTarget.get().addToNs(ImportedModuleContext.class, importedModuleIdentifier, importedModule); + String impPrefix = firstAttributeOf(stmt.declaredSubstatements(), PrefixStatement.class); + stmt.addToNs(ImpPrefixToModuleIdentifier.class, impPrefix, importedModuleIdentifier); + + final URI modNs = firstAttributeOf(importedModule.declaredSubstatements(), NamespaceStatement.class); + stmt.addToNs(URIStringToImpPrefix.class, modNs.toString(), impPrefix); } private Entry>> findRecentModule( - ModuleIdentifier impIdentifier, - Map>> allModules) { + final ModuleIdentifier impIdentifier, + final Map>> allModules) { ModuleIdentifier recentModuleIdentifier = impIdentifier; Entry>> recentModuleEntry = null; - Set>>> moduleEntrySet = allModules - .entrySet(); - for (Entry>> moduleEntry : moduleEntrySet) { - if (moduleEntry.getKey().getName() - .equals(impIdentifier.getName()) - && moduleEntry - .getKey() - .getRevision() - .compareTo( - recentModuleIdentifier - .getRevision()) > 0) { - recentModuleIdentifier = moduleEntry.getKey(); + for (Entry>> moduleEntry : allModules.entrySet()) { + final ModuleIdentifier id = moduleEntry.getKey(); + + if (id.getName().equals(impIdentifier.getName()) + && id.getRevision().compareTo(recentModuleIdentifier.getRevision()) > 0) { + recentModuleIdentifier = id; recentModuleEntry = moduleEntry; } } @@ -133,29 +127,24 @@ public class ImportStatementDefinition } @Override - public void prerequisiteFailed( - Collection> failed) - throws InferenceException { + public void prerequisiteFailed(final Collection> failed) { if (failed.contains(imported)) { - throw new InferenceException(String.format( - "Imported module [%s] was not found.", - impIdentifier), stmt.getStatementSourceReference()); + throw new InferenceException(stmt.getStatementSourceReference(), + "Imported module [%s] was not found.", impIdentifier); } } }); - } - private static ModuleIdentifier getImportedModuleIdentifier( - Mutable stmt) throws SourceException { - String moduleName = stmt.getStatementArgument(); - Date revision = firstAttributeOf(stmt.declaredSubstatements(), - RevisionDateStatement.class); + } + + private static ModuleIdentifier getImportedModuleIdentifier(final Mutable stmt) { + Date revision = firstAttributeOf(stmt.declaredSubstatements(), RevisionDateStatement.class); if (revision == null) { revision = SimpleDateFormatUtil.DEFAULT_DATE_IMP; } - return new ModuleIdentifierImpl(moduleName, Optional. absent(), + return new ModuleIdentifierImpl(stmt.getStatementArgument(), Optional. absent(), Optional. of(revision)); }