BUG-4688: Eliminate use of ModuleIdentifier in ImpPrefixToSemVerModuleIdentifier 31/64531/6
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 19 Oct 2017 16:12:28 +0000 (18:12 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 20 Oct 2017 09:59:52 +0000 (11:59 +0200)
ModuleIdentifier being used to resolve semantic version is slightly
wrong, we already have SemVerSourceIdentifier, which serves exactly
the same purpose.

Rename ImpPrefixToSemVerModuleIdentifier namespace to better reflect
its use -- ImportPrefixToSemVerSourceIdentifier and adjust it to
carry SemVerSourceIdentifier.

This eliminates the need for ModuleIdentifier.getSemanticVersion()
and ModuleIdentifier.getNamespace() -- making it very obvious that
SourceIdentifier is the same thing with a different representation
of a revision.

Change-Id: Iac9948a271b1dcc09d8aeb3de4e019d3842a4562
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ModuleIdentifier.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/ModuleIdentifierImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ImportStatementDefinition.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/YangInferencePipeline.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ImportEffectiveStatementImpl.java
yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/ImportPrefixToSemVerSourceIdentifier.java [moved from yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/ImpPrefixToSemVerModuleIdentifier.java with 67% similarity]

index 09bc3fc5ad6654af5e5092e362b31d6fd7e8f244..795a40f2f72e1e80beed7102d3f48d91c91dec6c 100644 (file)
@@ -7,10 +7,7 @@
  */
 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;
 
 /**
@@ -29,16 +26,6 @@ public interface ModuleIdentifier {
      */
     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.
      *
@@ -50,18 +37,4 @@ public interface ModuleIdentifier {
     // 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();
 }
index eecc48d2a9b3d166f2793a6a11385a11f247ec2d..aab4c20145fc9015ad47fc3ab9c951a0354799ed 100644 (file)
@@ -12,9 +12,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
 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;
 
@@ -30,23 +28,15 @@ 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
@@ -54,28 +44,16 @@ public final class ModuleIdentifierImpl implements ModuleIdentifier {
         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
             + '}';
     }
 
@@ -94,19 +72,11 @@ public final class ModuleIdentifierImpl implements ModuleIdentifier {
             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;
     }
 
index 9bc8fa566e50f59948ee8d07f4bbd3ae38e01abf..e6d873f219710340eadd99b4c3576d12fe97e71e 100644 (file)
@@ -29,6 +29,7 @@ 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.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;
@@ -45,7 +46,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 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;
@@ -253,14 +254,14 @@ public class ImportStatementDefinition extends
                     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);
@@ -310,11 +311,18 @@ public class ImportStatementDefinition extends
                     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);
         }
     }
 }
index a43a3f3338d55a5c4e6b71d0bf7f270a264e8e6b..4f7275310f9bea05a2aa9588a51405b11123dba2 100644 (file)
@@ -42,7 +42,7 @@ import org.opendaylight.yangtools.yang.parser.spi.source.BelongsToPrefixToModule
 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;
@@ -147,7 +147,7 @@ public final class YangInferencePipeline {
             .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
index 82b173621b16cc397e345382cefc56cdc249b7eb..94c2001159008373f4d09c97eed4ea94b21f1812 100644 (file)
@@ -12,14 +12,15 @@ import java.util.Date;
 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>
@@ -50,9 +51,9 @@ public class ImportEffectiveStatementImpl extends DeclaredEffectiveStatementBase
             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);
         }
 
@@ -8,13 +8,14 @@
 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> {
 
 }