BUG-4688: Make SourceIdentifier use Revision 11/64711/4
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 25 Oct 2017 12:26:37 +0000 (14:26 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 25 Oct 2017 16:53:22 +0000 (18:53 +0200)
There is no need to treat the string representation differently,
just use Revision everywhere. This forces us to clean up module
names to actually match revisions.

Change-Id: Ibc6b268a8dc4156e9c2940018c6f696f5fe3c6ae
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
46 files changed:
yang/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/Util.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/RevisionSourceIdentifier.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SemVerSourceIdentifier.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SourceIdentifier.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangTextSchemaSource.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinDomSchemaSource.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinTextSchemaSource.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/repo/util/FilesystemSchemaSourceCache.java
yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/repo/util/FilesystemSchemaSourceCacheTest.java
yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/repo/util/InMemorySchemaSourceCacheTest.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/util/YangModelDependencyInfo.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/RevisionDependencyResolver.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/SemVerDependencyResolver.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolver.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.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/IncludeStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveModule.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ImportEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/ASTSchemaSource.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolverTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedSchemaContextFactoryTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedSchemaRepositoryTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolverTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/MoreRevisionsTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/TypesResolutionTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/YangParserWithContextTest.java
yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/bar@2016-04-04.yang [moved from yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/bar@20160404.yang with 100% similarity]
yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/bar@2016-04-05.yang [moved from yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/bar@20160405.yang with 100% similarity]
yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/bar@2016-04-06.yang [moved from yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/bar@20160406.yang with 100% similarity]
yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/bar@2017-04-06.yang [moved from yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/bar@20170406.yang with 100% similarity]
yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/importedtestrev@2015-04-02.yang [moved from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/importedtestrev@z2015-04-02.yang with 100% similarity]
yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/node-test/bar@2016-04-04.yang [moved from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/node-test/bar@20160404.yang with 100% similarity]
yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/node-test/bar@2016-04-05.yang [moved from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/node-test/bar@20160405.yang with 100% similarity]
yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/node-test/bar@2016-04-06.yang [moved from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/node-test/bar@20160406.yang with 100% similarity]
yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/config.yin [moved from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/config.yang.yin with 100% similarity]
yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/iana-if-type.yin [moved from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/iana-if-type.yang.yin with 100% similarity]
yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-inet-types.yin [moved from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-inet-types.yang.yin with 100% similarity]
yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-netconf-monitoring.yin [moved from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-netconf-monitoring.yang.yin with 100% similarity]
yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-yang-types.yin [moved from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-yang-types.yang.yin with 100% similarity]
yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-yang-types@2013-05-16.yin [moved from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-yang-types@2013-05-16.yang.yin with 100% similarity]
yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-yang-types@2013-07-15.yin [moved from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-yang-types@2013-07-15.yang.yin with 100% similarity]
yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/main-impl.yin [moved from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/main-impl.yang.yin with 100% similarity]
yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/opendaylight-md-sal-binding.yin [moved from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/opendaylight-md-sal-binding.yang.yin with 100% similarity]
yang/yang-parser-impl/src/test/resources/types/custom-types-test@2012-04-04.yang [moved from yang/yang-parser-impl/src/test/resources/types/custom-types-test@2012-4-4.yang with 100% similarity]
yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java

index 776c8c78141fb0c725d4142177e637baa8a1e04d..0b2f3678b0c062b6f2ea92bb37cf99bd91892d84 100644 (file)
@@ -34,7 +34,6 @@ import org.apache.maven.model.Plugin;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.repository.RepositorySystem;
-import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
@@ -264,9 +263,6 @@ final class Util {
     }
 
     static SourceIdentifier moduleToIdentifier(final Module module) {
-        final QNameModule mod = module.getQNameModule();
-        final String rev = mod.getFormattedRevision();
-        return rev != null ? RevisionSourceIdentifier.create(module.getName(), rev)
-                : RevisionSourceIdentifier.create(module.getName());
+        return RevisionSourceIdentifier.create(module.getName(), module.getRevision());
     }
 }
index b072b1785368101f1bdeb67ad6272684118c05eb..a0d7ba98f28876483c3484d88d8051c8dbec6d69 100644 (file)
@@ -12,6 +12,8 @@ import static java.util.Objects.requireNonNull;
 import com.google.common.annotations.Beta;
 import java.util.Objects;
 import java.util.Optional;
+import javax.annotation.Nullable;
+import org.opendaylight.yangtools.yang.common.Revision;
 
 /**
  * YANG Schema revision source identifier.
@@ -57,11 +59,11 @@ public final class RevisionSourceIdentifier extends SourceIdentifier {
      *
      * @param name
      *            Name of schema
-     * @param formattedRevision
-     *            Revision of source in format YYYY-mm-dd
+     * @param revision
+     *            Revision of source, may be null
      */
-    RevisionSourceIdentifier(final String name, final String formattedRevision) {
-        super(requireNonNull(name), requireNonNull(formattedRevision));
+    RevisionSourceIdentifier(final String name, @Nullable final Revision revision) {
+        super(requireNonNull(name), revision);
     }
 
     /**
@@ -70,11 +72,10 @@ public final class RevisionSourceIdentifier extends SourceIdentifier {
      * @param name
      *            Name of schema
      * @param formattedRevision
-     *            Revision of source in format YYYY-mm-dd. If not present,
-     *            default value will be used.
+     *            Revision of source, potentially not present
      */
-    private RevisionSourceIdentifier(final String name, final Optional<String> formattedRevision) {
-        super(name, formattedRevision);
+    private RevisionSourceIdentifier(final String name, final Optional<Revision> revision) {
+        super(name, revision);
     }
 
     /**
@@ -86,8 +87,7 @@ public final class RevisionSourceIdentifier extends SourceIdentifier {
      *            Revision of source in format YYYY-mm-dd. If not present,
      *            default value will be used.
      */
-    public static RevisionSourceIdentifier create(final String moduleName,
-            final Optional<String> revision) {
+    public static RevisionSourceIdentifier create(final String moduleName, final Optional<Revision> revision) {
         return new RevisionSourceIdentifier(moduleName, revision);
     }
 
@@ -97,9 +97,9 @@ public final class RevisionSourceIdentifier extends SourceIdentifier {
      * @param moduleName
      *            Name of schema
      * @param revision
-     *            Revision of source in format YYYY-mm-dd
+     *            Revision of source, may be null
      */
-    public static RevisionSourceIdentifier create(final String moduleName, final String revision) {
+    public static RevisionSourceIdentifier create(final String moduleName, @Nullable final Revision revision) {
         return new RevisionSourceIdentifier(moduleName, revision);
     }
 
@@ -140,9 +140,9 @@ public final class RevisionSourceIdentifier extends SourceIdentifier {
         final StringBuilder sb = new StringBuilder("RevisionSourceIdentifier [name=");
         sb.append(getName());
 
-        final String rev = getRevision();
-        if (rev != null) {
-            sb.append('@').append(rev);
+        final Optional<Revision> rev = getRevision();
+        if (rev.isPresent()) {
+            sb.append('@').append(rev.get());
         }
         return sb.append(']').toString();
     }
index 459228c654fe2e92e217b7b8fdc39ed31f21a7cf..7e5e04ab0f8a947d93aefada34d9aac15f403b0a 100644 (file)
@@ -11,6 +11,7 @@ import com.google.common.annotations.Beta;
 import java.util.Objects;
 import java.util.Optional;
 import org.opendaylight.yangtools.concepts.SemVer;
+import org.opendaylight.yangtools.yang.common.Revision;
 
 /**
  * YANG Schema source identifier with specified semantic version.
@@ -46,14 +47,13 @@ public final class SemVerSourceIdentifier extends SourceIdentifier {
      *
      * @param name
      *            Name of schema
-     * @param formattedRevision
-     *            Optional of source revision in format YYYY-mm-dd. If not
-     *            present, default value will be used.
+     * @param revision
+     *            Revision of source, possibly not present
      * @param semVer
      *            semantic version of source
      */
-    SemVerSourceIdentifier(final String name, final Optional<String> formattedRevision, final SemVer semVer) {
-        super(name, formattedRevision);
+    SemVerSourceIdentifier(final String name, final Optional<Revision> revision, final SemVer semVer) {
+        super(name, revision);
         this.semVer = semVer;
     }
 
@@ -100,9 +100,9 @@ public final class SemVerSourceIdentifier extends SourceIdentifier {
      * @param semVer
      *            semantic version of source
      */
-    public static SemVerSourceIdentifier create(final String moduleName, final String revision,
+    public static SemVerSourceIdentifier create(final String moduleName, final Revision revision,
             final SemVer semVer) {
-        return new SemVerSourceIdentifier(moduleName, Optional.of(revision), semVer);
+        return new SemVerSourceIdentifier(moduleName, Optional.ofNullable(revision), semVer);
     }
 
     /**
@@ -116,8 +116,8 @@ public final class SemVerSourceIdentifier extends SourceIdentifier {
      * @param semVer
      *            semantic version of source
      */
-    public static SemVerSourceIdentifier create(final String moduleName,
-            final Optional<String> revision, final SemVer semVer) {
+    public static SemVerSourceIdentifier create(final String moduleName, final Optional<Revision> revision,
+            final SemVer semVer) {
         return new SemVerSourceIdentifier(moduleName, revision, semVer);
     }
 
index 7b9c29981e3ec1e904c3c6434cf117d97aee9f08..7d22a2fcb0f4ff5568ff3fe97f2dfe8366ad70f3 100644 (file)
@@ -13,8 +13,10 @@ import com.google.common.annotations.Beta;
 import com.google.common.collect.Interner;
 import com.google.common.collect.Interners;
 import java.util.Optional;
+import javax.annotation.Nullable;
 import org.opendaylight.yangtools.concepts.Identifier;
 import org.opendaylight.yangtools.concepts.Immutable;
+import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.common.YangConstants;
 
 /**
@@ -30,16 +32,10 @@ import org.opendaylight.yangtools.yang.common.YangConstants;
  */
 @Beta
 public abstract class SourceIdentifier implements Identifier, Immutable {
-    /**
-     * Default revision for sources without specified revision. This should be used for comparisons
-     * based on revision when a SourceIdentifier does not have a revision.
-     */
-    public static final String NOT_PRESENT_FORMATTED_REVISION = "0000-00-00";
-
     private static final Interner<SourceIdentifier> INTERNER = Interners.newWeakInterner();
+    private static final long serialVersionUID = 2L;
 
-    private static final long serialVersionUID = 1L;
-    private final String revision;
+    private final Revision revision;
     private final String name;
 
     /**
@@ -49,8 +45,7 @@ public abstract class SourceIdentifier implements Identifier, Immutable {
      *            Name of schema
      */
     SourceIdentifier(final String name) {
-        this.name = requireNonNull(name);
-        this.revision = null;
+        this(name, (Revision) null);
     }
 
     /**
@@ -58,12 +53,12 @@ public abstract class SourceIdentifier implements Identifier, Immutable {
      *
      * @param name
      *            Name of schema
-     * @param formattedRevision
-     *            Revision of source in format YYYY-mm-dd
+     * @param revision
+     *            Revision of source, may be null
      */
-    SourceIdentifier(final String name, final String formattedRevision) {
+    SourceIdentifier(final String name, @Nullable final Revision revision) {
         this.name = requireNonNull(name);
-        this.revision = requireNonNull(formattedRevision);
+        this.revision = revision;
     }
 
     /**
@@ -71,13 +66,11 @@ public abstract class SourceIdentifier implements Identifier, Immutable {
      *
      * @param name
      *            Name of schema
-     * @param formattedRevision
-     *            Revision of source in format YYYY-mm-dd. If not present,
-     *            default value will be used.
+     * @param revision
+     *            Revision of source, possibly not present
      */
-    SourceIdentifier(final String name, final Optional<String> formattedRevision) {
-        this.name = requireNonNull(name);
-        this.revision = formattedRevision.orElse(null);
+    SourceIdentifier(final String name, final Optional<Revision> revision) {
+        this(name, revision.orElse(null));
     }
 
     /**
@@ -103,9 +96,8 @@ public abstract class SourceIdentifier implements Identifier, Immutable {
      *
      * @return revision of source or null if revision was not supplied.
      */
-    // FIXME: version 2.0.0: this should return Optional<String>
-    public String getRevision() {
-        return revision;
+    public Optional<Revision> getRevision() {
+        return Optional.ofNullable(revision);
     }
 
     /**
@@ -121,8 +113,7 @@ public abstract class SourceIdentifier implements Identifier, Immutable {
      * @return Filename for this source identifier.
      */
     public String toYangFilename() {
-        final String rev = NOT_PRESENT_FORMATTED_REVISION.equals(revision) ? null : revision;
-        return toYangFileName(name, Optional.ofNullable(rev));
+        return toYangFileName(name, Optional.ofNullable(revision));
     }
 
     /**
@@ -137,7 +128,7 @@ public abstract class SourceIdentifier implements Identifier, Immutable {
      *
      * @return Filename for this source identifier.
      */
-    public static String toYangFileName(final String moduleName, final Optional<String> revision) {
+    public static String toYangFileName(final String moduleName, final Optional<Revision> revision) {
         StringBuilder filename = new StringBuilder(moduleName);
         if (revision.isPresent()) {
             filename.append('@');
index 6e5a5785d49da0c64363cbddee665d82e8139561..f609dfc3e26c41668a36462afb3835eaa0e16566 100644 (file)
@@ -19,8 +19,8 @@ import java.io.File;
 import java.io.InputStream;
 import java.net.URL;
 import java.util.Map.Entry;
-import java.util.Optional;
 import javax.annotation.Nonnull;
+import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.common.YangConstants;
 import org.opendaylight.yangtools.yang.common.YangNames;
 
@@ -42,7 +42,8 @@ public abstract class YangTextSchemaSource extends ByteSource implements YangSch
 
         final String baseName = name.substring(0, name.length() - YangConstants.RFC6020_YANG_FILE_EXTENSION.length());
         final Entry<String, String> parsed = YangNames.parseFilename(baseName);
-        return RevisionSourceIdentifier.create(parsed.getKey(), Optional.ofNullable(parsed.getValue()));
+        return RevisionSourceIdentifier.create(parsed.getKey(), parsed.getValue() == null ? null
+                : Revision.valueOf(parsed.getValue()));
     }
 
     /**
index cd5802b7295aec567ef56c2bfdb6ad06326d3fe1..96c5b83d67ba59795882d7335e0c423d5c1ad3d8 100644 (file)
@@ -16,7 +16,6 @@ import static org.opendaylight.yangtools.yang.model.api.YangStmtMapping.SUBMODUL
 
 import com.google.common.base.MoreObjects;
 import com.google.common.base.MoreObjects.ToStringHelper;
-import java.util.Optional;
 import javax.annotation.Nonnull;
 import javax.xml.transform.Source;
 import javax.xml.transform.TransformerException;
@@ -24,6 +23,7 @@ import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMResult;
 import javax.xml.transform.dom.DOMSource;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.common.YangConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -85,7 +85,7 @@ public abstract class YinDomSchemaSource implements YinXmlSchemaSource {
         checkArgument(dateAttr != null, "No revision statement argument found in %s", revisionStmt);
 
         final SourceIdentifier parsedId = RevisionSourceIdentifier.create(nameAttr.getValue(),
-            Optional.of(dateAttr.getValue()));
+            Revision.valueOf(dateAttr.getValue()));
         final SourceIdentifier id;
         if (!parsedId.equals(identifier)) {
             LOG.debug("Changed identifier from {} to {}", identifier, parsedId);
index b3e41a62e2d8cd380dca07118a7563f8bd4d3c33..841787fc657eb83a356e2a152225f6b357575561 100644 (file)
@@ -20,9 +20,9 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
 import java.util.Map.Entry;
-import java.util.Optional;
 import javax.annotation.Nonnull;
 import org.opendaylight.yangtools.concepts.Delegator;
+import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.common.YangConstants;
 import org.opendaylight.yangtools.yang.common.YangNames;
 import org.slf4j.Logger;
@@ -55,7 +55,8 @@ public abstract class YinTextSchemaSource extends ByteSource implements YinSchem
         }
 
         final Entry<String, String> parsed = YangNames.parseFilename(baseName);
-        return RevisionSourceIdentifier.create(parsed.getKey(), Optional.ofNullable(parsed.getValue()));
+        return RevisionSourceIdentifier.create(parsed.getKey(), parsed.getValue() == null ? null
+                : Revision.valueOf(parsed.getValue()));
     }
 
     @Override
index cf77c34c216bb7b32eb0272d158e817ff4ec2b43..e774c1fa9c0be1ecb30e10956f71530e137c7936 100644 (file)
@@ -11,7 +11,6 @@ import static com.google.common.base.Preconditions.checkArgument;
 import static java.util.Objects.requireNonNull;
 
 import com.google.common.base.MoreObjects.ToStringHelper;
-import com.google.common.base.Strings;
 import com.google.common.collect.Lists;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
@@ -145,9 +144,10 @@ public final class FilesystemSchemaSourceCache<T extends SchemaSourceRepresentat
     }
 
     static File sourceIdToFile(final SourceIdentifier identifier, final File storageDirectory) {
-        final String rev = identifier.getRevision();
+        final Optional<Revision> rev = identifier.getRevision();
         final File file;
-        if (Strings.isNullOrEmpty(rev)) {
+        if (!rev.isPresent()) {
+            // FIXME: this does not look right
             file = findFileWithNewestRev(identifier, storageDirectory);
         } else {
             file = new File(storageDirectory, identifier.toYangFilename());
@@ -289,7 +289,8 @@ public final class FilesystemSchemaSourceCache<T extends SchemaSourceRepresentat
             if (matcher.matches()) {
                 final String moduleName = matcher.group("moduleName");
                 final String revision = matcher.group("revision");
-                return Optional.of(RevisionSourceIdentifier.create(moduleName, Optional.ofNullable(revision)));
+                return Optional.of(RevisionSourceIdentifier.create(moduleName, revision == null ? Optional.empty()
+                        : Optional.of(Revision.valueOf(revision))));
             }
             return Optional.empty();
         }
index 304d0a8c9ee0f5fb1582258fe6aafe64fcd52f25..722da0596da1afba0fc72d0a7819fc7b882fd098 100644 (file)
@@ -38,6 +38,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
 import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
@@ -145,7 +146,7 @@ public class FilesystemSchemaSourceCacheTest {
 
     @Test
     public void sourceIdToFileEmptyRevWithEmptyDir() {
-        final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("test", "");
+        final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("test");
         final File sourceIdToFile = FilesystemSchemaSourceCache.sourceIdToFile(sourceIdentifier, this.storageDir);
         final FilesystemSchemaSourceCache<YangTextSchemaSource> cache = new FilesystemSchemaSourceCache<>(this.registry,
                 YangTextSchemaSource.class, sourceIdToFile);
@@ -162,7 +163,7 @@ public class FilesystemSchemaSourceCacheTest {
         final YangTextSchemaSource source = new TestingYangSource("test", "2013-12-12", content);
         cache.offer(source);
 
-        final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("test", "");
+        final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("test");
         final File sourceIdToFile = FilesystemSchemaSourceCache.sourceIdToFile(sourceIdentifier,
                 this.storageDir);
         Assert.assertNotNull(sourceIdToFile);
@@ -180,7 +181,7 @@ public class FilesystemSchemaSourceCacheTest {
         cache.offer(source);
         cache.offer(source2);
 
-        final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("test", "");
+        final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("test");
         final File sourceIdToFile = FilesystemSchemaSourceCache.sourceIdToFile(sourceIdentifier, this.storageDir);
         Assert.assertNotNull(sourceIdToFile);
         final List<File> storedFiles = Arrays.asList(this.storageDir.listFiles());
@@ -195,7 +196,8 @@ public class FilesystemSchemaSourceCacheTest {
         final String content = "content1";
         final YangTextSchemaSource source = new TestingYangSource("test", "2013-12-12", content);
         cache.offer(source);
-        final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("test", "2013-12-12");
+        final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("test",
+            Revision.valueOf("2013-12-12"));
         final ListenableFuture<? extends YangTextSchemaSource> checked = cache.getSource(sourceIdentifier);
         Assert.assertNotNull(checked);
         final YangTextSchemaSource checkedGet = checked.get();
@@ -211,7 +213,8 @@ public class FilesystemSchemaSourceCacheTest {
         final String content = "content1";
         final YangTextSchemaSource source = new TestingYangSource("test", "2013-12-12", content);
         cache.offer(source);
-        final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("test1", "2012-12-12");
+        final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("test1",
+            Revision.valueOf("2012-12-12"));
         final ListenableFuture<? extends YangTextSchemaSource> checked = cache.getSource(sourceIdentifier);
         Assert.assertNotNull(checked);
         checked.get();
@@ -225,8 +228,9 @@ public class FilesystemSchemaSourceCacheTest {
 
         private final String content;
 
-        protected TestingYangSource(final String name, final String revision, final String content) {
-            super(RevisionSourceIdentifier.create(name, Optional.ofNullable(revision)));
+        TestingYangSource(final String name, final String revision, final String content) {
+            super(RevisionSourceIdentifier.create(name, revision == null ? Optional.empty() :
+                    Optional.of(Revision.valueOf(revision))));
             this.content = content;
         }
 
index 858e623b150ba88b38c7046ccaa3423061582421..8e6912f852bf579e424b193673a9cc90cbc7f262 100644 (file)
@@ -25,6 +25,7 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.runners.MockitoJUnitRunner;
+import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
 import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation;
 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
@@ -76,7 +77,8 @@ public class InMemorySchemaSourceCacheTest {
         final String content = "content";
         final YangTextSchemaSource source = new TestingYangSource("test", "2012-12-12", content);
         inMemorySchemaSourceCache.offer(source);
-        final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("test", "2012-12-12");
+        final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("test",
+            Revision.valueOf("2012-12-12"));
         final ListenableFuture<? extends YangSchemaSourceRepresentation> checkedSource = inMemorySchemaSourceCache
                 .getSource(sourceIdentifier);
         Assert.assertNotNull(checkedSource);
@@ -90,7 +92,8 @@ public class InMemorySchemaSourceCacheTest {
     public void inMemorySchemaSourceCacheNullGetSourcestest() throws Exception {
         final InMemorySchemaSourceCache<YangSchemaSourceRepresentation> inMemorySchemaSourceCache =
             InMemorySchemaSourceCache.createSoftCache(this.registry, REPRESENTATION);
-        final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("test", "2012-12-12");
+        final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("test",
+            Revision.valueOf("2012-12-12"));
         final ListenableFuture<? extends YangSchemaSourceRepresentation> checkedSource =
             inMemorySchemaSourceCache.getSource(sourceIdentifier);
         Assert.assertNotNull(checkedSource);
@@ -110,7 +113,8 @@ public class InMemorySchemaSourceCacheTest {
         inMemorySchemaSourceCache.offer(source);
         inMemorySchemaSourceCache2.offer(source);
 
-        final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("test", "2012-12-12");
+        final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("test",
+            Revision.valueOf("2012-12-12"));
         final ListenableFuture<? extends YangSchemaSourceRepresentation> checkedSource =
             inMemorySchemaSourceCache.getSource(sourceIdentifier);
         final ListenableFuture<? extends SchemaSourceRepresentation> checkedSource2 =
@@ -128,7 +132,8 @@ public class InMemorySchemaSourceCacheTest {
         private final String content;
 
         protected TestingYangSource(final String name, final String revision, final String content) {
-            super(RevisionSourceIdentifier.create(name, Optional.ofNullable(revision)));
+            super(RevisionSourceIdentifier.create(name, revision == null ? Optional.empty()
+                    : Optional.of(Revision.valueOf(revision))));
             this.content = content;
         }
 
index 6b1abbc91158fe1089f5681c6c2a00e166a4196d..09bf8a2588a2a4b2bd09737b0ca4ea57766beaa9 100644 (file)
@@ -60,9 +60,8 @@ public abstract class YangModelDependencyInfo {
             .getLocalName();
 
     private final String name;
-    private final String formattedRevision;
     private final Revision revision;
-    private final Optional<SemVer> semVer;
+    private final SemVer semVer;
     private final ImmutableSet<ModuleImport> submoduleIncludes;
     private final ImmutableSet<ModuleImport> moduleImports;
     private final ImmutableSet<ModuleImport> dependencies;
@@ -78,13 +77,12 @@ public abstract class YangModelDependencyInfo {
             final ImmutableSet<ModuleImport> includes,
             final Optional<SemVer> semVer) {
         this.name = name;
-        this.formattedRevision = formattedRevision;
         this.revision = formattedRevision == null ? null : Revision.valueOf(formattedRevision);
         this.moduleImports = imports;
         this.submoduleIncludes = includes;
         this.dependencies = ImmutableSet.<ModuleImport>builder()
                 .addAll(moduleImports).addAll(submoduleIncludes).build();
-        this.semVer = semVer;
+        this.semVer = semVer.orElse(null);
     }
 
     /**
@@ -112,16 +110,16 @@ public abstract class YangModelDependencyInfo {
      * @return formatted revision string
      */
     public String getFormattedRevision() {
-        return formattedRevision;
+        return revision != null ? revision.toString() : null;
     }
 
     /**
      * Returns revision.
      *
-     * @return revision
+     * @return revision, potentially null
      */
-    Revision getRevision() {
-        return revision;
+    public Optional<Revision> getRevision() {
+        return Optional.ofNullable(revision);
     }
 
     /**
@@ -130,15 +128,15 @@ public abstract class YangModelDependencyInfo {
      * @return semantic version
      */
     public Optional<SemVer> getSemanticVersion() {
-        return semVer;
+        return Optional.ofNullable(semVer);
     }
 
     @Override
     public int hashCode() {
         final int prime = 31;
         int result = 1;
-        result = prime * result + Objects.hashCode(formattedRevision);
         result = prime * result + Objects.hashCode(name);
+        result = prime * result + Objects.hashCode(revision);
         result = prime * result + Objects.hashCode(semVer);
         return result;
     }
@@ -155,21 +153,8 @@ public abstract class YangModelDependencyInfo {
             return false;
         }
         final YangModelDependencyInfo other = (YangModelDependencyInfo) obj;
-        if (formattedRevision == null) {
-            if (other.formattedRevision != null) {
-                return false;
-            }
-        } else if (!formattedRevision.equals(other.formattedRevision)) {
-            return false;
-        }
-        if (name == null) {
-            if (other.name != null) {
-                return false;
-            }
-        } else if (!name.equals(other.name)) {
-            return false;
-        }
-        return Objects.equals(semVer, other.semVer);
+        return Objects.equals(name, other.name) && Objects.equals(revision, other.revision)
+                && Objects.equals(semVer, other.semVer);
     }
 
     /**
index 267baf34e7cf926bd68a52ff28ab7508cf9aa6c2..0938c0b961d70c9444716519f24773f5a7555d29 100644 (file)
@@ -9,8 +9,6 @@ package org.opendaylight.yangtools.yang.parser.repo;
 
 import java.util.Collection;
 import java.util.Map;
-import java.util.Optional;
-import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.ModuleImport;
 import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
@@ -34,8 +32,7 @@ final class RevisionDependencyResolver extends DependencyResolver {
 
     @Override
     protected boolean isKnown(final Collection<SourceIdentifier> haystack, final ModuleImport mi) {
-        final String rev = mi.getRevision() != null ? QName.formattedRevision(mi.getRevision()) : null;
-        final SourceIdentifier msi = RevisionSourceIdentifier.create(mi.getModuleName(), Optional.ofNullable(rev));
+        final SourceIdentifier msi = RevisionSourceIdentifier.create(mi.getModuleName(), mi.getRevision());
 
         // Quick lookup
         if (haystack.contains(msi)) {
@@ -43,7 +40,7 @@ final class RevisionDependencyResolver extends DependencyResolver {
         }
 
         // Slow revision-less walk
-        return rev == null && findWildcard(haystack, mi.getModuleName()) != null;
+        return !mi.getRevision().isPresent() && findWildcard(haystack, mi.getModuleName()) != null;
     }
 
     public static RevisionDependencyResolver create(final Map<SourceIdentifier, YangModelDependencyInfo> depInfo) {
index 7b10d93409102536c47ba4ba10646c9759c29879..fd995fd6f200580f5cd8e57dff803cb2c3c43060 100644 (file)
@@ -11,7 +11,6 @@ import java.util.Collection;
 import java.util.Map;
 import java.util.Optional;
 import org.opendaylight.yangtools.concepts.SemVer;
-import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.ModuleImport;
 import org.opendaylight.yangtools.yang.model.repo.api.SemVerSourceIdentifier;
 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
@@ -53,8 +52,7 @@ final class SemVerDependencyResolver extends DependencyResolver {
 
     @Override
     protected boolean isKnown(final Collection<SourceIdentifier> haystack, final ModuleImport mi) {
-        final String rev = mi.getRevision() != null ? QName.formattedRevision(mi.getRevision()) : null;
-        final SemVerSourceIdentifier msi = SemVerSourceIdentifier.create(mi.getModuleName(), Optional.ofNullable(rev),
+        final SemVerSourceIdentifier msi = SemVerSourceIdentifier.create(mi.getModuleName(), mi.getRevision(),
             mi.getSemanticVersion().orElse(null));
 
         // Quick lookup
index c8abbffdb67f6a1f6aff6c10d20d0a2e31c094c2..5520c5e3e9dff9e78be5de9f36f516c44dead501 100644 (file)
@@ -29,6 +29,7 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
 import javax.annotation.Nonnull;
+import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException;
 import org.opendaylight.yangtools.yang.model.repo.api.MissingSchemaSourceException;
@@ -110,9 +111,9 @@ public final class YangTextSchemaContextResolver implements AutoCloseable, Schem
                 LOG.info("Provided module name {} does not match actual text {}, corrected",
                     providedId.toYangFilename(), parsedId.toYangFilename());
             } else {
-                final String sourceRev = providedId.getRevision();
-                final String astRev = parsedId.getRevision();
-                if (sourceRev != null && !SourceIdentifier.NOT_PRESENT_FORMATTED_REVISION.equals(sourceRev)) {
+                final Optional<Revision> sourceRev = providedId.getRevision();
+                final Optional<Revision> astRev = parsedId.getRevision();
+                if (sourceRev.isPresent()) {
                     if (!sourceRev.equals(astRev)) {
                         LOG.info("Provided module revision {} does not match actual text {}, corrected",
                             providedId.toYangFilename(), parsedId.toYangFilename());
index ed7850df7aa34e3b08affe7a9453e97081134194..0cb3897da602acc272b6467573ca2f130cfbae9f 100644 (file)
@@ -449,9 +449,9 @@ class BuildGlobalContext extends NamespaceStorageSupport implements Registry {
 
     private static SourceSpecificContext getRequiredLibSource(final SourceIdentifier requiredSource,
             final TreeBasedTable<String, Optional<Revision>, SourceSpecificContext> libSourcesTable) {
-        return requiredSource.getRevision() == null ? getLatestRevision(libSourcesTable.row(requiredSource.getName()))
-                : libSourcesTable.get(requiredSource.getName(),
-                    Optional.of(Revision.valueOf(requiredSource.getRevision())));
+        return requiredSource.getRevision().isPresent()
+                ? libSourcesTable.get(requiredSource.getName(), requiredSource.getRevision())
+                        : getLatestRevision(libSourcesTable.row(requiredSource.getName()));
     }
 
     private static SourceSpecificContext getLatestRevision(final SortedMap<Optional<Revision>,
index 537c9ec248e286eb847e7a106b7740ff6a5f4ad0..1a1fd8f18403d60c1ec7be729dac471350524cce 100644 (file)
@@ -189,7 +189,7 @@ public class ImportStatementDefinition extends
             final StmtContext<Revision, ?, ?> revision = findFirstDeclaredSubstatement(stmt,
                 RevisionDateStatement.class);
             return revision == null ? RevisionSourceIdentifier.create(stmt.getStatementArgument())
-                    : RevisionSourceIdentifier.create(stmt.getStatementArgument(), revision.rawStatementArgument());
+                    : RevisionSourceIdentifier.create(stmt.getStatementArgument(), revision.getStatementArgument());
         }
     }
 
@@ -327,9 +327,8 @@ public class ImportStatementDefinition extends
 
         private static SemVerSourceIdentifier createSemVerModuleIdentifier(
                 final ModuleIdentifier importedModuleIdentifier, final SemVer semVer) {
-            final String formattedRevision = importedModuleIdentifier.getRevision().map(Revision::toString)
-                    .orElse(null);
-            return SemVerSourceIdentifier.create(importedModuleIdentifier.getName(), formattedRevision, semVer);
+            return SemVerSourceIdentifier.create(importedModuleIdentifier.getName(),
+                importedModuleIdentifier.getRevision(), semVer);
         }
     }
 }
index cc66a1f4c9799895a26b122b1e45f41bdd8e1e6d..74419055c88f105ba8159d555229010110a1cbf5 100644 (file)
@@ -75,7 +75,7 @@ public class IncludeStatementImpl extends AbstractDeclaredStatement<String> impl
             final StmtContext<Revision, ?, ?> revision = findFirstDeclaredSubstatement(stmt,
                 RevisionDateStatement.class);
             stmt.addRequiredSource(revision == null ? RevisionSourceIdentifier.create(stmt.getStatementArgument())
-                : RevisionSourceIdentifier.create(stmt.getStatementArgument(), revision.rawStatementArgument()));
+                : RevisionSourceIdentifier.create(stmt.getStatementArgument(), revision.getStatementArgument()));
         }
 
         @Override
@@ -102,7 +102,7 @@ public class IncludeStatementImpl extends AbstractDeclaredStatement<String> impl
                     final StmtContext<?, ?, ?> includedSubModuleContext = requiresCtxPrerequisite.resolve(ctx);
 
                     stmt.addToNs(IncludedModuleContext.class, revision != null
-                            ? RevisionSourceIdentifier.create(submoduleName, revision.rawStatementArgument())
+                            ? RevisionSourceIdentifier.create(submoduleName, revision.getStatementArgument())
                                     : RevisionSourceIdentifier.create(submoduleName), includedSubModuleContext);
                     stmt.addToNs(IncludedSubmoduleNameToModuleCtx.class, stmt.getStatementArgument(),
                         includedSubModuleContext);
index cc9ccb653828b438acf759a52be66db88aa94823..f75ebd18c389aa8409c43ffbc43f3ee1169341ac 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 
+import com.google.common.base.MoreObjects;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
@@ -394,13 +395,13 @@ abstract class AbstractEffectiveModule<D extends DeclaredStatement<String>> exte
 
     @Override
     public String toString() {
-        return this.getClass().getSimpleName() + "["
-                + "name=" + name
-                + ", namespace=" + getNamespace()
-                + ", revision=" + getQNameModule().getFormattedRevision()
-                + ", prefix=" + prefix
-                + ", yangVersion=" + yangVersion
-                + "]";
+        return MoreObjects.toStringHelper(this).omitNullValues()
+                .add("name", name)
+                .add("namespace", getNamespace())
+                .add("revision", getRevision().orElse(null))
+                .add("prefix", prefix)
+                .add("yangVersion", yangVersion)
+                .toString();
     }
 
     @Override
index 4e95d34dafb950bb41356e030c63e6e312552436..86cf7d9c955cf30e8df4afcdbbb714e002b2a916 100644 (file)
@@ -52,7 +52,7 @@ public class ImportEffectiveStatementImpl extends DeclaredEffectiveStatementBase
         } else {
             final SemVerSourceIdentifier importedModuleIdentifier = ctx.getFromNamespace(
                 ImportPrefixToSemVerSourceIdentifier.class, prefix);
-            revision = Revision.valueOf(importedModuleIdentifier.getRevision());
+            revision = importedModuleIdentifier.getRevision().orElse(null);
             semVer = importedModuleIdentifier.getSemanticVersion().orElse(null);
         }
 
index bb3b0d7b25d1d951b614346db9bcbe77e373a311..3bfc6552461c2c30fb8acda8cef1116ea1c3f313 100644 (file)
@@ -183,13 +183,13 @@ public final class ASTSchemaSource implements SchemaSourceRepresentation {
     private static SourceIdentifier getSourceId(final YangModelDependencyInfo depInfo) {
         final String name = depInfo.getName();
         return depInfo.getFormattedRevision() == null ? RevisionSourceIdentifier.create(name)
-                : RevisionSourceIdentifier.create(name, depInfo.getFormattedRevision());
+                : RevisionSourceIdentifier.create(name, depInfo.getRevision());
     }
 
     private static SemVerSourceIdentifier getSemVerSourceId(final YangModelDependencyInfo depInfo) {
         return depInfo.getFormattedRevision() == null
                 ? SemVerSourceIdentifier.create(depInfo.getName(), depInfo.getSemanticVersion().orElse(null))
-                        : SemVerSourceIdentifier.create(depInfo.getName(), depInfo.getFormattedRevision(),
+                        : SemVerSourceIdentifier.create(depInfo.getName(), depInfo.getRevision(),
                             depInfo.getSemanticVersion().orElse(null));
     }
 }
index 5c5c1c5d9861daa48d1fe2f5eb7e30d1445970b6..5efe18515f86f2c42a8d03fa211ddbeb09f06362 100644 (file)
@@ -12,7 +12,6 @@ import static org.junit.Assert.assertEquals;
 
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Optional;
 import org.junit.Test;
 import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
@@ -25,9 +24,12 @@ public class DependencyResolverTest {
     public void testModulesWithoutRevisionAndImport() throws Exception {
         final Map<SourceIdentifier, YangModelDependencyInfo> map = new HashMap<>();
 
-        addToMap(map, YangModelDependencyInfo.ModuleDependencyInfo.forResource(getClass(), "/no-revision/imported.yang"));
-        addToMap(map, YangModelDependencyInfo.ModuleDependencyInfo.forResource(getClass(), "/no-revision/imported@2012-12-12.yang"));
-        addToMap(map, YangModelDependencyInfo.ModuleDependencyInfo.forResource(getClass(), "/no-revision/top@2012-10-10.yang"));
+        addToMap(map, YangModelDependencyInfo.ModuleDependencyInfo.forResource(getClass(),
+            "/no-revision/imported.yang"));
+        addToMap(map, YangModelDependencyInfo.ModuleDependencyInfo.forResource(getClass(),
+            "/no-revision/imported@2012-12-12.yang"));
+        addToMap(map, YangModelDependencyInfo.ModuleDependencyInfo.forResource(getClass(),
+            "/no-revision/top@2012-10-10.yang"));
 
         final DependencyResolver resolved = RevisionDependencyResolver.create(map);
 
@@ -61,18 +63,18 @@ public class DependencyResolverTest {
         addToMap(map, YangModelDependencyInfo.ModuleDependencyInfo.forResource(getClass(), "/model/baz.yang"));
 
         final DependencyResolver resolved = RevisionDependencyResolver.create(map);
-
-        assertEquals(4, resolved.getResolvedSources().size());
         assertEquals(0, resolved.getUnresolvedSources().size());
         assertEquals(0, resolved.getUnsatisfiedImports().size());
+        assertEquals(4, resolved.getResolvedSources().size());
     }
 
-    private static void addToMap(final Map<SourceIdentifier, YangModelDependencyInfo> map, final YangModelDependencyInfo yangModelDependencyInfo) {
+    private static void addToMap(final Map<SourceIdentifier, YangModelDependencyInfo> map,
+            final YangModelDependencyInfo yangModelDependencyInfo) {
         map.put(getSourceId(yangModelDependencyInfo), yangModelDependencyInfo);
     }
 
     private static SourceIdentifier getSourceId(final YangModelDependencyInfo depInfo) {
         final String name = depInfo.getName();
-        return RevisionSourceIdentifier.create(name, Optional.ofNullable(depInfo.getFormattedRevision()));
+        return RevisionSourceIdentifier.create(name, depInfo.getRevision());
     }
 }
index 7728b4ad710b9c54cfe4b0a8f1a968a8007cbfa5..e0192d99b65acc76092af84bad3f3d0c5c54bf39 100644 (file)
@@ -16,6 +16,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
 import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceFilter;
@@ -40,8 +41,8 @@ public class SharedSchemaContextFactoryTest {
 
         final YangTextSchemaSource source1 = YangTextSchemaSource.forResource("/ietf/ietf-inet-types@2010-09-24.yang");
         final YangTextSchemaSource source2 = YangTextSchemaSource.forResource("/ietf/iana-timezones@2012-07-09.yang");
-        s1 = RevisionSourceIdentifier.create("ietf-inet-types", "2010-09-24");
-        s2 = RevisionSourceIdentifier.create("iana-timezones", "2012-07-09");
+        s1 = RevisionSourceIdentifier.create("ietf-inet-types", Revision.valueOf("2010-09-24"));
+        s2 = RevisionSourceIdentifier.create("iana-timezones", Revision.valueOf("2012-07-09"));
 
         final TextToASTTransformer transformer = TextToASTTransformer.create(repository, repository);
         repository.registerSchemaSourceListener(transformer);
index 93ea3cd3c9d694e99e237c0fc55c8a66063ce220..8f053169cace97e763457a49dc12254e8f5fd3b0 100644 (file)
@@ -42,6 +42,7 @@ import java.util.Optional;
 import java.util.concurrent.ExecutionException;
 import javax.annotation.Nonnull;
 import org.junit.Test;
+import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.repo.api.MissingSchemaSourceException;
 import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
@@ -254,9 +255,9 @@ public class SharedSchemaRepositoryTest {
 
         assertThat(Lists.transform(listener.registeredSources, PotentialSchemaSource::getSourceIdentifier),
                 both(hasItem(RevisionSourceIdentifier.create("test", Optional.empty())))
-                        .and(hasItem(RevisionSourceIdentifier.create("test", Optional.of("2012-12-12"))))
-                        .and(hasItem(RevisionSourceIdentifier.create("test", Optional.of("2013-12-12"))))
-                        .and(hasItem(RevisionSourceIdentifier.create("module", Optional.of("2010-12-12"))))
+                        .and(hasItem(RevisionSourceIdentifier.create("test", Revision.valueOf("2012-12-12"))))
+                        .and(hasItem(RevisionSourceIdentifier.create("test", Revision.valueOf("2013-12-12"))))
+                        .and(hasItem(RevisionSourceIdentifier.create("module", Revision.valueOf("2010-12-12"))))
         );
     }
 
@@ -270,7 +271,7 @@ public class SharedSchemaRepositoryTest {
                 sharedSchemaRepository, YangTextSchemaSource.class, storageDir);
         sharedSchemaRepository.registerSchemaSourceListener(cache);
 
-        final SourceIdentifier runningId = RevisionSourceIdentifier.create("running", Optional.of("2012-12-12"));
+        final SourceIdentifier runningId = RevisionSourceIdentifier.create("running", Revision.valueOf("2012-12-12"));
 
         sharedSchemaRepository.registerSchemaSource(sourceIdentifier -> Futures.immediateFuture(
             new YangTextSchemaSource(runningId) {
index 6eff10919f85361bca413672119c7a640418e6d1..5ffce1631c0b24014ce9442eb215853c8e568543 100644 (file)
@@ -19,6 +19,7 @@ import java.net.URL;
 import java.util.Optional;
 import java.util.concurrent.ExecutionException;
 import org.junit.Test;
+import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException;
 import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
@@ -54,23 +55,24 @@ public class YangTextSchemaContextResolverTest {
 
         assertEquals(3, yangTextSchemaContextResolver.getAvailableSources().size());
 
-        final SourceIdentifier fooModuleId = RevisionSourceIdentifier.create("foo", "2016-09-26");
+        final SourceIdentifier fooModuleId = RevisionSourceIdentifier.create("foo", Revision.valueOf("2016-09-26"));
         final ListenableFuture<YangTextSchemaSource> foo = yangTextSchemaContextResolver.getSource(fooModuleId);
         assertTrue(foo.isDone());
         assertEquals(fooModuleId, foo.get().getIdentifier());
 
-        final SourceIdentifier barModuleId = RevisionSourceIdentifier.create("bar", "2016-09-26");
+        final SourceIdentifier barModuleId = RevisionSourceIdentifier.create("bar", Revision.valueOf("2016-09-26"));
         final ListenableFuture<YangTextSchemaSource> bar = yangTextSchemaContextResolver.getSource(barModuleId);
         assertTrue(bar.isDone());
         assertEquals(barModuleId, bar.get().getIdentifier());
 
-        final SourceIdentifier bazModuleId = RevisionSourceIdentifier.create("baz", "2016-09-26");
+        final SourceIdentifier bazModuleId = RevisionSourceIdentifier.create("baz", Revision.valueOf("2016-09-26"));
         final ListenableFuture<YangTextSchemaSource> baz =
                 yangTextSchemaContextResolver.getSource(bazModuleId);
         assertTrue(baz.isDone());
         assertEquals(bazModuleId, baz.get().getIdentifier());
 
-        final SourceIdentifier foobarModuleId = RevisionSourceIdentifier.create("foobar", "2016-09-26");
+        final SourceIdentifier foobarModuleId = RevisionSourceIdentifier.create("foobar",
+            Revision.valueOf("2016-09-26"));
         final ListenableFuture<YangTextSchemaSource> foobar = yangTextSchemaContextResolver.getSource(foobarModuleId);
         assertTrue(foobar.isDone());
         try {
index 67d03e70a0701cf40362db7dc445f5d0220679e4..25bb6878200287271cd38baa1a0b9817f05ca332 100644 (file)
@@ -75,15 +75,12 @@ public class MoreRevisionsTest {
         SchemaContext result = reactor.buildEffective();
         assertNotNull(result);
         final Module moduleByName = result.getModules().iterator().next();
-        final QNameModule qNameModule = moduleByName.getQNameModule();
-        final String formattedRevision = qNameModule.getFormattedRevision();
-        assertEquals(formattedRevision, "2015-06-07");
+        assertEquals("2015-06-07", moduleByName.getQNameModule().getRevision().get().toString());
     }
 
     @Test
     public void twoRevisionsTest() throws ReactorException {
-        CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR
-                .newBuild();
+        CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild();
 
         reactor.addSources(TED_20130712, TED_20131021, IETF_TYPES);
 
index 4ff689adbc1a371186de5c925f608204871e74a6..fbec329bd5e51f4f2c5800ac5a98a9adc6ca6239 100644 (file)
@@ -53,7 +53,7 @@ public class TypesResolutionTest {
 
     @Before
     public void init() throws Exception {
-        final StatementStreamSource yangFile = sourceForResource("/types/custom-types-test@2012-4-4.yang");
+        final StatementStreamSource yangFile = sourceForResource("/types/custom-types-test@2012-04-04.yang");
         final StatementStreamSource yangFileDependency1 = sourceForResource("/ietf/iana-timezones@2012-07-09.yang");
         final StatementStreamSource yangFileDependency2 = sourceForResource("/ietf/ietf-inet-types@2010-09-24.yang");
         final StatementStreamSource yangFileDependency3 = sourceForResource("/ietf/ietf-yang-types@2010-09-24.yang");
index a0f6d3e14c04a25a0b83fc23d8de1cf66b516ca3..333b7589f34fb620401249af72ae7dbd362aec2f 100644 (file)
@@ -71,7 +71,7 @@ public class YangParserWithContextTest {
 
         final CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild();
 
-        final StatementStreamSource types = sourceForResource("/types/custom-types-test@2012-4-4.yang");
+        final StatementStreamSource types = sourceForResource("/types/custom-types-test@2012-04-04.yang");
         final StatementStreamSource test1 = sourceForResource("/context-test/test1.yang");
 
         reactor.addSources(IETF);
@@ -289,7 +289,7 @@ public class YangParserWithContextTest {
 
         final CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild();
 
-        final StatementStreamSource types = sourceForResource("/types/custom-types-test@2012-4-4.yang");
+        final StatementStreamSource types = sourceForResource("/types/custom-types-test@2012-04-04.yang");
         final StatementStreamSource test3 = sourceForResource("/context-test/test3.yang");
 
         reactor.addSources(IETF);
@@ -318,7 +318,7 @@ public class YangParserWithContextTest {
 
         final CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild();
 
-        final StatementStreamSource types = sourceForResource("/types/custom-types-test@2012-4-4.yang");
+        final StatementStreamSource types = sourceForResource("/types/custom-types-test@2012-04-04.yang");
         final StatementStreamSource test3 = sourceForResource("/context-test/test3.yang");
 
         reactor.addSources(IETF);
index cd91b51cc29bff6cd87f44b3df9f78b2b4bdbcaa..5f88a708ddfc778e7a4df2d1fa09090527bc0fc4 100644 (file)
@@ -544,19 +544,12 @@ public final class StmtContextUtils {
         final QNameModule qNameModule = root.getFromNamespace(ModuleCtxToModuleQName.class, root);
         if (qNameModule != null) {
             // creates SourceIdentifier for a module
-            if (qNameModule.getFormattedRevision() == null) {
-                return RevisionSourceIdentifier.create((String) root.getStatementArgument());
-            }
-
-            return RevisionSourceIdentifier.create((String) root.getStatementArgument(),
-                qNameModule.getFormattedRevision());
+            return RevisionSourceIdentifier.create((String) root.getStatementArgument(), qNameModule.getRevision());
         }
 
         // creates SourceIdentifier for a submodule
         final Optional<Revision> revision = getLatestRevision(root.declaredSubstatements());
-        return revision.isPresent()
-                ? RevisionSourceIdentifier.create((String) root.getStatementArgument(), revision.get().toString())
-                        : RevisionSourceIdentifier.create((String) root.getStatementArgument());
+        return RevisionSourceIdentifier.create((String) root.getStatementArgument(), revision);
     }
 
     public static Optional<Revision> getLatestRevision(final Iterable<? extends StmtContext<?, ?, ?>> subStmts) {