*/
package org.opendaylight.yangtools.yang.model.api;
-import java.net.URI;
import java.util.Date;
-import java.util.Optional;
-import org.opendaylight.yangtools.concepts.SemVer;
import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
/**
*/
String getName();
- /**
- * Returns the namespace of the module which is specified as argument of
- * YANG {@link Module <b><font color="#00FF00">namespace</font></b>}
- * keyword.
- *
- * @return URI format of the namespace of the module
- */
- // FIXME: this should not be here
- URI getNamespace();
-
/**
* Returns the revision date for the module.
*
// FIXME: this should not be here
Date getRevision();
- /**
- * Returns the semantic version of YANG module.
- *
- * <p>
- * 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
- * (urn:opendaylight:yang:extension:semantic-version?revision
- * =2016-02-02)semantic-version statement
- */
- // FIXME: this should not be here
- Optional<SemVer> getSemanticVersion();
}
import com.google.common.annotations.Beta;
import java.net.URI;
import java.util.Date;
-import java.util.Objects;
import java.util.Optional;
-import org.opendaylight.yangtools.concepts.SemVer;
import org.opendaylight.yangtools.yang.common.QNameModule;
import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier;
public final class ModuleIdentifierImpl implements ModuleIdentifier {
private final QNameModule qnameModule;
private final String name;
- private final SemVer semVer;
- private ModuleIdentifierImpl(final String name, final Optional<URI> namespace, final Optional<Date> revision,
- final SemVer semVer) {
+ private ModuleIdentifierImpl(final String name, final Optional<URI> namespace, final Optional<Date> revision) {
this.name = checkNotNull(name);
this.qnameModule = QNameModule.create(namespace.orElse(null), revision.orElse(null));
- this.semVer = semVer;
}
public static ModuleIdentifier create(final String name, final Optional<URI> namespace,
final Optional<Date> revision) {
- return create(name, namespace, revision, null);
- }
-
- public static ModuleIdentifier create(final String name, final Optional<URI> namespace,
- final Optional<Date> revision, final SemVer semVer) {
- return new ModuleIdentifierImpl(name, namespace, revision, semVer);
+ return new ModuleIdentifierImpl(name, namespace, revision);
}
@Override
return qnameModule.getRevision();
}
- @Override
- public Optional<SemVer> getSemanticVersion() {
- return Optional.ofNullable(semVer);
- }
-
@Override
public String getName() {
return name;
}
- @Override
- public URI getNamespace() {
- return qnameModule.getNamespace();
- }
-
@Override
public String toString() {
return "ModuleIdentifierImpl{"
+ "name='" + name + '\''
- + ", namespace=" + getNamespace()
+ ", revision=" + qnameModule.getFormattedRevision()
- + ", semantic version=" + semVer
+ '}';
}
return false;
}
- // only fail if this namespace is non-null
- if (getNamespace() != null && !getNamespace().equals(other.getNamespace())) {
- return false;
- }
// only fail if this revision is non-null
if (getRevision() != null && !getRevision().equals(other.getRevision())) {
return false;
}
- if (!Objects.equals(getSemanticVersion(), other.getSemanticVersion())) {
- return false;
- }
-
return true;
}
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.model.repo.api.SemVerSourceIdentifier;
import org.opendaylight.yangtools.yang.model.util.ModuleIdentifierImpl;
import org.opendaylight.yangtools.yang.parser.spi.ModuleNamespace;
import org.opendaylight.yangtools.yang.parser.spi.PreLinkageModuleNamespace;
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.ImpPrefixToSemVerModuleIdentifier;
+import org.opendaylight.yangtools.yang.parser.spi.source.ImportPrefixToSemVerSourceIdentifier;
import org.opendaylight.yangtools.yang.parser.spi.source.ImportedModuleContext;
import org.opendaylight.yangtools.yang.parser.spi.source.ModuleCtxToModuleIdentifier;
import org.opendaylight.yangtools.yang.parser.spi.source.ModuleNameToNamespace;
final StmtContext<?, ?, ?> importedModule = importedModuleEntry.getValue();
final ModuleIdentifier importedModuleIdentifier = importedModule.getFromNamespace(
ModuleCtxToModuleIdentifier.class, importedModule);
- final ModuleIdentifier semVerModuleIdentifier = createSemVerModuleIdentifier(
+ final SemVerSourceIdentifier semVerModuleIdentifier = createSemVerModuleIdentifier(
importedModuleIdentifier, importedModuleEntry.getKey());
linkageTarget.resolve(ctx).addToNs(ImportedModuleContext.class, importedModuleIdentifier,
importedModule);
final String impPrefix = firstAttributeOf(stmt.declaredSubstatements(), PrefixStatement.class);
stmt.addToNs(ImpPrefixToModuleIdentifier.class, impPrefix, importedModuleIdentifier);
- stmt.addToNs(ImpPrefixToSemVerModuleIdentifier.class, impPrefix, semVerModuleIdentifier);
+ stmt.addToNs(ImportPrefixToSemVerSourceIdentifier.class, impPrefix, semVerModuleIdentifier);
final URI modNs = firstAttributeOf(importedModule.declaredSubstatements(),
NamespaceStatement.class);
Optional.of(SimpleDateFormatUtil.DEFAULT_DATE_IMP));
}
- private static ModuleIdentifier createSemVerModuleIdentifier(final ModuleIdentifier importedModuleIdentifier,
- final SemVer semVer) {
- return ModuleIdentifierImpl.create(importedModuleIdentifier.getName(),
- Optional.ofNullable(importedModuleIdentifier.getNamespace()),
- Optional.of(importedModuleIdentifier.getRevision()), semVer);
+ private static SemVerSourceIdentifier createSemVerModuleIdentifier(
+ final ModuleIdentifier importedModuleIdentifier, final SemVer semVer) {
+ final String formattedRevision;
+ if (importedModuleIdentifier.getRevision() == SimpleDateFormatUtil.DEFAULT_DATE_IMP) {
+ formattedRevision = null;
+ } else {
+ formattedRevision = SimpleDateFormatUtil.getRevisionFormat().format(
+ importedModuleIdentifier.getRevision());
+ }
+
+
+ return SemVerSourceIdentifier.create(importedModuleIdentifier.getName(), formattedRevision, semVer);
}
}
}
import org.opendaylight.yangtools.yang.parser.spi.source.BelongsToPrefixToModuleName;
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.ImpPrefixToSemVerModuleIdentifier;
+import org.opendaylight.yangtools.yang.parser.spi.source.ImportPrefixToSemVerSourceIdentifier;
import org.opendaylight.yangtools.yang.parser.spi.source.ImportedModuleContext;
import org.opendaylight.yangtools.yang.parser.spi.source.IncludedModuleContext;
import org.opendaylight.yangtools.yang.parser.spi.source.IncludedSubmoduleNameToIdentifier;
.addSupport(new OpenconfigVersionStatementImpl.OpenconfigVersionSupport())
.addSupport(global(SemanticVersionNamespace.class))
.addSupport(global(SemanticVersionModuleNamespace.class))
- .addSupport(sourceLocal(ImpPrefixToSemVerModuleIdentifier.class))
+ .addSupport(sourceLocal(ImportPrefixToSemVerSourceIdentifier.class))
.build();
public static final StatementSupportBundle STMT_DEF_BUNDLE = StatementSupportBundle
import java.util.Objects;
import java.util.Optional;
import org.opendaylight.yangtools.concepts.SemVer;
+import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.QNameModule;
-import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier;
import org.opendaylight.yangtools.yang.model.api.ModuleImport;
import org.opendaylight.yangtools.yang.model.api.stmt.ImportStatement;
+import org.opendaylight.yangtools.yang.model.repo.api.SemVerSourceIdentifier;
import org.opendaylight.yangtools.yang.parser.spi.meta.MissingSubstatementException;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
-import org.opendaylight.yangtools.yang.parser.spi.source.ImpPrefixToSemVerModuleIdentifier;
+import org.opendaylight.yangtools.yang.parser.spi.source.ImportPrefixToSemVerSourceIdentifier;
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
public class ImportEffectiveStatementImpl extends DeclaredEffectiveStatementBase<String, ImportStatement>
this.revision = revisionDateStmt == null ? getImportedRevision(ctx) : revisionDateStmt.argument();
this.semVer = null;
} else {
- final ModuleIdentifier importedModuleIdentifier = ctx.getFromNamespace(
- ImpPrefixToSemVerModuleIdentifier.class, prefix);
- revision = importedModuleIdentifier.getRevision();
+ final SemVerSourceIdentifier importedModuleIdentifier = ctx.getFromNamespace(
+ ImportPrefixToSemVerSourceIdentifier.class, prefix);
+ revision = QName.parseRevision(importedModuleIdentifier.getRevision());
semVer = importedModuleIdentifier.getSemanticVersion().orElse(null);
}
package org.opendaylight.yangtools.yang.parser.spi.source;
import com.google.common.annotations.Beta;
-import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier;
import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace;
+import org.opendaylight.yangtools.yang.model.repo.api.SemVerSourceIdentifier;
/**
- * Source-specific mapping of prefixes to module identifier with specified semantic version.
+ * Source-specific mapping of prefixes to source identifier with specified semantic version.
*/
@Beta
-public interface ImpPrefixToSemVerModuleIdentifier extends IdentifierNamespace<String, ModuleIdentifier> {
+public interface ImportPrefixToSemVerSourceIdentifier
+ extends IdentifierNamespace<String, SemVerSourceIdentifier> {
}