import java.util.Collection;
import java.util.List;
import java.util.Map;
-import java.util.Optional;
import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.openconfig.model.api.OpenConfigStatements;
import org.opendaylight.yangtools.yang.common.Empty;
import org.opendaylight.yangtools.yang.common.QNameModule;
import org.opendaylight.yangtools.yang.common.Revision;
-import org.opendaylight.yangtools.yang.common.UnresolvedQName;
import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
import org.opendaylight.yangtools.yang.common.XMLNamespace;
import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
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.repo.api.RevisionSourceIdentifier;
-import org.opendaylight.yangtools.yang.model.repo.api.SemVerSourceIdentifier;
import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatementDecorators;
import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements;
import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException;
-import org.opendaylight.yangtools.yang.parser.api.ImportResolutionMode;
import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
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.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.BoundStmtCtx;
import org.opendaylight.yangtools.yang.parser.spi.meta.CommonStmtCtx;
import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
-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;
.addAny(YangStmtMapping.TYPEDEF)
.addAny(YangStmtMapping.USES)
.addOptional(YangStmtMapping.YANG_VERSION)
- .addOptional(OpenConfigStatements.OPENCONFIG_VERSION)
.build();
private static final SubstatementValidator RFC7950_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.MODULE)
.addAny(YangStmtMapping.ANYDATA)
.addAny(YangStmtMapping.TYPEDEF)
.addAny(YangStmtMapping.USES)
.addMandatory(YangStmtMapping.YANG_VERSION)
- .addOptional(OpenConfigStatements.OPENCONFIG_VERSION)
.build();
- private final boolean semanticVersioning;
-
private ModuleStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) {
super(YangStmtMapping.MODULE, StatementPolicy.reject(), config, validator);
- semanticVersioning = config.importResolutionMode() == ImportResolutionMode.OPENCONFIG_SEMVER;
}
public static @NonNull ModuleStatementSupport rfc6020Instance(final YangParserConfiguration config) {
@Override
public Unqualified parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
try {
- return UnresolvedQName.unqualified(value);
+ return Unqualified.of(value);
} catch (IllegalArgumentException e) {
throw new SourceException(e.getMessage(), ctx, e);
}
@Override
public void onPreLinkageDeclared(final Mutable<Unqualified, ModuleStatement, ModuleEffectiveStatement> stmt) {
- final String moduleName = stmt.getRawArgument();
+ final Unqualified moduleName = stmt.getArgument();
final XMLNamespace moduleNs = SourceException.throwIfNull(
firstAttributeOf(stmt.declaredSubstatements(), NamespaceStatement.class), stmt,
stmt.addContext(PreLinkageModuleNamespace.class, moduleName, stmt);
- final Optional<Revision> revisionDate = StmtContextUtils.getLatestRevision(stmt.declaredSubstatements());
- final QNameModule qNameModule = QNameModule.create(moduleNs, revisionDate.orElse(null)).intern();
+ final Revision revisionDate = StmtContextUtils.getLatestRevision(stmt.declaredSubstatements()).orElse(null);
+ final QNameModule qNameModule = QNameModule.create(moduleNs, revisionDate).intern();
stmt.addToNs(ModuleCtxToModuleQName.class, stmt, qNameModule);
- stmt.setRootIdentifier(RevisionSourceIdentifier.create(stmt.getArgument().getLocalName(), revisionDate));
+ stmt.setRootIdentifier(new SourceIdentifier(stmt.getArgument(), revisionDate));
}
@Override
firstAttributeOf(stmt.declaredSubstatements(), NamespaceStatement.class), stmt,
"Namespace of the module [%s] is missing", stmt.argument());
- final Optional<Revision> revisionDate = StmtContextUtils.getLatestRevision(stmt.declaredSubstatements());
- final QNameModule qNameModule = QNameModule.create(moduleNs, revisionDate.orElse(null)).intern();
+ final Revision revisionDate = StmtContextUtils.getLatestRevision(stmt.declaredSubstatements()).orElse(null);
+ final QNameModule qNameModule = QNameModule.create(moduleNs, revisionDate).intern();
final StmtContext<?, ModuleStatement, ModuleEffectiveStatement> possibleDuplicateModule =
stmt.getFromNamespace(NamespaceToModule.class, qNameModule);
if (possibleDuplicateModule != null && possibleDuplicateModule != stmt) {
possibleDuplicateModule.sourceReference());
}
- final String moduleName = stmt.getRawArgument();
- final SourceIdentifier moduleIdentifier = RevisionSourceIdentifier.create(moduleName, revisionDate);
+ final Unqualified moduleName = stmt.getArgument();
+ final SourceIdentifier moduleIdentifier = new SourceIdentifier(moduleName, revisionDate);
stmt.addContext(ModuleNamespace.class, moduleIdentifier, stmt);
- stmt.addContext(ModuleNamespaceForBelongsTo.class, moduleIdentifier.getName(), stmt);
+ stmt.addContext(ModuleNamespaceForBelongsTo.class, moduleName, stmt);
stmt.addContext(NamespaceToModule.class, qNameModule, stmt);
final String modulePrefix = SourceException.throwIfNull(
firstAttributeOf(stmt.declaredSubstatements(), PrefixStatement.class), stmt,
"Prefix of the module [%s] is missing", stmt.argument());
- stmt.addToNs(QNameModuleNamespace.class, Empty.getInstance(), qNameModule);
+ stmt.addToNs(QNameModuleNamespace.class, Empty.value(), qNameModule);
stmt.addToNs(PrefixToModule.class, modulePrefix, qNameModule);
stmt.addToNs(ModuleNameToModuleQName.class, moduleName, qNameModule);
stmt.addToNs(ModuleCtxToModuleQName.class, stmt, qNameModule);
stmt.addToNs(ModuleCtxToSourceIdentifier.class, stmt, moduleIdentifier);
stmt.addToNs(ModuleQNameToModuleName.class, qNameModule, moduleName);
stmt.addToNs(ImportPrefixToModuleCtx.class, modulePrefix, stmt);
-
- if (semanticVersioning) {
- addToSemVerModuleNamespace(stmt, moduleIdentifier);
- }
}
@Override
}
@Override
- protected ModuleStatement createDeclared(final StmtContext<Unqualified, ModuleStatement, ?> ctx,
- final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+ protected ModuleStatement createDeclared(final BoundStmtCtx<Unqualified> ctx,
+ final ImmutableList<DeclaredStatement<?>> substatements) {
if (substatements.isEmpty()) {
throw noNamespace(ctx);
}
submodules.add((Submodule) submodule);
}
- final QNameModule qnameModule = verifyNotNull(stmt.namespaceItem(QNameModuleNamespace.class,
- Empty.getInstance()));
+ final QNameModule qnameModule = verifyNotNull(stmt.namespaceItem(QNameModuleNamespace.class, Empty.value()));
try {
return new ModuleEffectiveStatementImpl(stmt, substatements, submodules, qnameModule);
} catch (SubstatementIndexingException e) {
}
private static Collection<StmtContext<?, ?, ?>> submoduleContexts(final Current<?, ?> stmt) {
- final Map<String, StmtContext<?, ?, ?>> submodules = stmt.localNamespacePortion(
+ final Map<Unqualified, StmtContext<?, ?, ?>> submodules = stmt.localNamespacePortion(
IncludedSubmoduleNameToModuleCtx.class);
return submodules == null ? List.of() : submodules.values();
}
private static SourceException noNamespace(final @NonNull CommonStmtCtx stmt) {
return new SourceException("No namespace declared in module", stmt);
}
-
- private static void addToSemVerModuleNamespace(
- final Mutable<Unqualified, ModuleStatement, ModuleEffectiveStatement> stmt,
- final SourceIdentifier moduleIdentifier) {
- final SemVerSourceIdentifier id = SemVerSourceIdentifier.create(stmt.getRawArgument(),
- stmt.getFromNamespace(SemanticVersionNamespace.class, stmt));
- stmt.addToNs(SemanticVersionModuleNamespace.class, id, stmt);
- }
}