From 4e23de902b25ea5cdd8e0e21525f51a30adc61d1 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 25 Oct 2017 14:26:37 +0200 Subject: [PATCH] BUG-4688: Make SourceIdentifier use Revision 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 --- .../yangtools/yang2sources/plugin/Util.java | 6 +-- .../repo/api/RevisionSourceIdentifier.java | 30 ++++++------- .../repo/api/SemVerSourceIdentifier.java | 18 ++++---- .../yang/model/repo/api/SourceIdentifier.java | 43 ++++++++----------- .../model/repo/api/YangTextSchemaSource.java | 5 ++- .../model/repo/api/YinDomSchemaSource.java | 4 +- .../model/repo/api/YinTextSchemaSource.java | 5 ++- .../util/FilesystemSchemaSourceCache.java | 9 ++-- .../util/FilesystemSchemaSourceCacheTest.java | 18 +++++--- .../util/InMemorySchemaSourceCacheTest.java | 13 ++++-- .../impl/util/YangModelDependencyInfo.java | 35 +++++---------- .../repo/RevisionDependencyResolver.java | 7 +-- .../parser/repo/SemVerDependencyResolver.java | 4 +- .../repo/YangTextSchemaContextResolver.java | 7 +-- .../stmt/reactor/BuildGlobalContext.java | 6 +-- .../rfc6020/ImportStatementDefinition.java | 7 ++- .../stmt/rfc6020/IncludeStatementImpl.java | 4 +- .../effective/AbstractEffectiveModule.java | 15 ++++--- .../ImportEffectiveStatementImpl.java | 2 +- .../yang/parser/util/ASTSchemaSource.java | 4 +- .../parser/repo/DependencyResolverTest.java | 18 ++++---- .../repo/SharedSchemaContextFactoryTest.java | 5 ++- .../repo/SharedSchemaRepositoryTest.java | 9 ++-- .../YangTextSchemaContextResolverTest.java | 10 +++-- .../yang/stmt/MoreRevisionsTest.java | 7 +-- .../yang/stmt/TypesResolutionTest.java | 2 +- .../yang/stmt/YangParserWithContextTest.java | 6 +-- ...{bar@20160404.yang => bar@2016-04-04.yang} | 0 ...{bar@20160405.yang => bar@2016-04-05.yang} | 0 ...{bar@20160406.yang => bar@2016-04-06.yang} | 0 ...{bar@20170406.yang => bar@2017-04-06.yang} | 0 ...2.yang => importedtestrev@2015-04-02.yang} | 0 ...{bar@20160404.yang => bar@2016-04-04.yang} | 0 ...{bar@20160405.yang => bar@2016-04-05.yang} | 0 ...{bar@20160406.yang => bar@2016-04-06.yang} | 0 .../modules/{config.yang.yin => config.yin} | 0 ...iana-if-type.yang.yin => iana-if-type.yin} | 0 ...net-types.yang.yin => ietf-inet-types.yin} | 0 ...g.yang.yin => ietf-netconf-monitoring.yin} | 0 ...ang-types.yang.yin => ietf-yang-types.yin} | 0 ...ang.yin => ietf-yang-types@2013-05-16.yin} | 0 ...ang.yin => ietf-yang-types@2013-07-15.yin} | 0 .../{main-impl.yang.yin => main-impl.yin} | 0 ...ng.yin => opendaylight-md-sal-binding.yin} | 0 ...yang => custom-types-test@2012-04-04.yang} | 0 .../parser/spi/meta/StmtContextUtils.java | 11 +---- 46 files changed, 143 insertions(+), 167 deletions(-) rename yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/{bar@20160404.yang => bar@2016-04-04.yang} (100%) rename yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/{bar@20160405.yang => bar@2016-04-05.yang} (100%) rename yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/{bar@20160406.yang => bar@2016-04-06.yang} (100%) rename yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/{bar@20170406.yang => bar@2017-04-06.yang} (100%) rename yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/{importedtestrev@z2015-04-02.yang => importedtestrev@2015-04-02.yang} (100%) rename yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/node-test/{bar@20160404.yang => bar@2016-04-04.yang} (100%) rename yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/node-test/{bar@20160405.yang => bar@2016-04-05.yang} (100%) rename yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/node-test/{bar@20160406.yang => bar@2016-04-06.yang} (100%) rename yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/{config.yang.yin => config.yin} (100%) rename yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/{iana-if-type.yang.yin => iana-if-type.yin} (100%) rename yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/{ietf-inet-types.yang.yin => ietf-inet-types.yin} (100%) rename yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/{ietf-netconf-monitoring.yang.yin => ietf-netconf-monitoring.yin} (100%) rename yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/{ietf-yang-types.yang.yin => ietf-yang-types.yin} (100%) rename yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/{ietf-yang-types@2013-05-16.yang.yin => ietf-yang-types@2013-05-16.yin} (100%) rename yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/{ietf-yang-types@2013-07-15.yang.yin => ietf-yang-types@2013-07-15.yin} (100%) rename yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/{main-impl.yang.yin => main-impl.yin} (100%) rename yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/{opendaylight-md-sal-binding.yang.yin => opendaylight-md-sal-binding.yin} (100%) rename yang/yang-parser-impl/src/test/resources/types/{custom-types-test@2012-4-4.yang => custom-types-test@2012-04-04.yang} (100%) diff --git a/yang/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/Util.java b/yang/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/Util.java index 776c8c7814..0b2f3678b0 100644 --- a/yang/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/Util.java +++ b/yang/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/Util.java @@ -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()); } } diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/RevisionSourceIdentifier.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/RevisionSourceIdentifier.java index b072b17853..a0d7ba98f2 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/RevisionSourceIdentifier.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/RevisionSourceIdentifier.java @@ -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 formattedRevision) { - super(name, formattedRevision); + private RevisionSourceIdentifier(final String name, final Optional 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 revision) { + public static RevisionSourceIdentifier create(final String moduleName, final Optional 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 rev = getRevision(); + if (rev.isPresent()) { + sb.append('@').append(rev.get()); } return sb.append(']').toString(); } diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SemVerSourceIdentifier.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SemVerSourceIdentifier.java index 459228c654..7e5e04ab0f 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SemVerSourceIdentifier.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SemVerSourceIdentifier.java @@ -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 formattedRevision, final SemVer semVer) { - super(name, formattedRevision); + SemVerSourceIdentifier(final String name, final Optional 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 revision, final SemVer semVer) { + public static SemVerSourceIdentifier create(final String moduleName, final Optional revision, + final SemVer semVer) { return new SemVerSourceIdentifier(moduleName, revision, semVer); } diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SourceIdentifier.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SourceIdentifier.java index 7b9c29981e..7d22a2fcb0 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SourceIdentifier.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SourceIdentifier.java @@ -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 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 formattedRevision) { - this.name = requireNonNull(name); - this.revision = formattedRevision.orElse(null); + SourceIdentifier(final String name, final Optional 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 - public String getRevision() { - return revision; + public Optional 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 revision) { + public static String toYangFileName(final String moduleName, final Optional revision) { StringBuilder filename = new StringBuilder(moduleName); if (revision.isPresent()) { filename.append('@'); diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangTextSchemaSource.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangTextSchemaSource.java index 6e5a5785d4..f609dfc3e2 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangTextSchemaSource.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangTextSchemaSource.java @@ -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 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())); } /** diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinDomSchemaSource.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinDomSchemaSource.java index cd5802b729..96c5b83d67 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinDomSchemaSource.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinDomSchemaSource.java @@ -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); diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinTextSchemaSource.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinTextSchemaSource.java index b3e41a62e2..841787fc65 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinTextSchemaSource.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinTextSchemaSource.java @@ -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 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 diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/repo/util/FilesystemSchemaSourceCache.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/repo/util/FilesystemSchemaSourceCache.java index cf77c34c21..e774c1fa9c 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/repo/util/FilesystemSchemaSourceCache.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/repo/util/FilesystemSchemaSourceCache.java @@ -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 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 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 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 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 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; } diff --git a/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/repo/util/InMemorySchemaSourceCacheTest.java b/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/repo/util/InMemorySchemaSourceCacheTest.java index 858e623b15..8e6912f852 100644 --- a/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/repo/util/InMemorySchemaSourceCacheTest.java +++ b/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/repo/util/InMemorySchemaSourceCacheTest.java @@ -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 checkedSource = inMemorySchemaSourceCache .getSource(sourceIdentifier); Assert.assertNotNull(checkedSource); @@ -90,7 +92,8 @@ public class InMemorySchemaSourceCacheTest { public void inMemorySchemaSourceCacheNullGetSourcestest() throws Exception { final InMemorySchemaSourceCache 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 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 checkedSource = inMemorySchemaSourceCache.getSource(sourceIdentifier); final ListenableFuture 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; } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/util/YangModelDependencyInfo.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/util/YangModelDependencyInfo.java index 6b1abbc911..09bf8a2588 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/util/YangModelDependencyInfo.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/util/YangModelDependencyInfo.java @@ -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; + private final SemVer semVer; private final ImmutableSet submoduleIncludes; private final ImmutableSet moduleImports; private final ImmutableSet dependencies; @@ -78,13 +77,12 @@ public abstract class YangModelDependencyInfo { final ImmutableSet includes, final Optional semVer) { this.name = name; - this.formattedRevision = formattedRevision; this.revision = formattedRevision == null ? null : Revision.valueOf(formattedRevision); this.moduleImports = imports; this.submoduleIncludes = includes; this.dependencies = ImmutableSet.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 getRevision() { + return Optional.ofNullable(revision); } /** @@ -130,15 +128,15 @@ public abstract class YangModelDependencyInfo { * @return semantic version */ public Optional 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); } /** diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/RevisionDependencyResolver.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/RevisionDependencyResolver.java index 267baf34e7..0938c0b961 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/RevisionDependencyResolver.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/RevisionDependencyResolver.java @@ -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 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 depInfo) { diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/SemVerDependencyResolver.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/SemVerDependencyResolver.java index 7b10d93409..fd995fd6f2 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/SemVerDependencyResolver.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/SemVerDependencyResolver.java @@ -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 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 diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolver.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolver.java index c8abbffdb6..5520c5e3e9 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolver.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolver.java @@ -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 sourceRev = providedId.getRevision(); + final Optional 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()); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java index ed7850df7a..0cb3897da6 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java @@ -449,9 +449,9 @@ class BuildGlobalContext extends NamespaceStorageSupport implements Registry { private static SourceSpecificContext getRequiredLibSource(final SourceIdentifier requiredSource, final TreeBasedTable, 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, diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ImportStatementDefinition.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ImportStatementDefinition.java index 537c9ec248..1a1fd8f184 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ImportStatementDefinition.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ImportStatementDefinition.java @@ -189,7 +189,7 @@ public class ImportStatementDefinition extends final StmtContext 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); } } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IncludeStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IncludeStatementImpl.java index cc66a1f4c9..74419055c8 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IncludeStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IncludeStatementImpl.java @@ -75,7 +75,7 @@ public class IncludeStatementImpl extends AbstractDeclaredStatement impl final StmtContext 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 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); diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveModule.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveModule.java index cc9ccb6538..f75ebd18c3 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveModule.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveModule.java @@ -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> 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 diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ImportEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ImportEffectiveStatementImpl.java index 4e95d34daf..86cf7d9c95 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ImportEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ImportEffectiveStatementImpl.java @@ -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); } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/ASTSchemaSource.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/ASTSchemaSource.java index bb3b0d7b25..3bfc655246 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/ASTSchemaSource.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/ASTSchemaSource.java @@ -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)); } } diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolverTest.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolverTest.java index 5c5c1c5d98..5efe18515f 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolverTest.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolverTest.java @@ -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 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 map, final YangModelDependencyInfo yangModelDependencyInfo) { + private static void addToMap(final Map 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()); } } diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedSchemaContextFactoryTest.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedSchemaContextFactoryTest.java index 7728b4ad71..e0192d99b6 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedSchemaContextFactoryTest.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedSchemaContextFactoryTest.java @@ -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); diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedSchemaRepositoryTest.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedSchemaRepositoryTest.java index 93ea3cd3c9..8f053169ca 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedSchemaRepositoryTest.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedSchemaRepositoryTest.java @@ -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) { diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolverTest.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolverTest.java index 6eff10919f..5ffce1631c 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolverTest.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolverTest.java @@ -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 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 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 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 foobar = yangTextSchemaContextResolver.getSource(foobarModuleId); assertTrue(foobar.isDone()); try { diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/MoreRevisionsTest.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/MoreRevisionsTest.java index 67d03e70a0..25bb687820 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/MoreRevisionsTest.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/MoreRevisionsTest.java @@ -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); diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/TypesResolutionTest.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/TypesResolutionTest.java index 4ff689adbc..fbec329bd5 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/TypesResolutionTest.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/TypesResolutionTest.java @@ -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"); diff --git a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/YangParserWithContextTest.java b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/YangParserWithContextTest.java index a0f6d3e14c..333b7589f3 100644 --- a/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/YangParserWithContextTest.java +++ b/yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/YangParserWithContextTest.java @@ -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); diff --git a/yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/bar@20160404.yang b/yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/bar@2016-04-04.yang similarity index 100% rename from yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/bar@20160404.yang rename to yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/bar@2016-04-04.yang diff --git a/yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/bar@20160405.yang b/yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/bar@2016-04-05.yang similarity index 100% rename from yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/bar@20160405.yang rename to yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/bar@2016-04-05.yang diff --git a/yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/bar@20160406.yang b/yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/bar@2016-04-06.yang similarity index 100% rename from yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/bar@20160406.yang rename to yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/bar@2016-04-06.yang diff --git a/yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/bar@20170406.yang b/yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/bar@2017-04-06.yang similarity index 100% rename from yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/bar@20170406.yang rename to yang/yang-parser-impl/src/test/resources/openconfig-version/node-test/bar@2017-04-06.yang diff --git a/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/importedtestrev@z2015-04-02.yang b/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/importedtestrev@2015-04-02.yang similarity index 100% rename from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/importedtestrev@z2015-04-02.yang rename to yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/importedtestrev@2015-04-02.yang diff --git a/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/node-test/bar@20160404.yang b/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/node-test/bar@2016-04-04.yang similarity index 100% rename from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/node-test/bar@20160404.yang rename to yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/node-test/bar@2016-04-04.yang diff --git a/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/node-test/bar@20160405.yang b/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/node-test/bar@2016-04-05.yang similarity index 100% rename from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/node-test/bar@20160405.yang rename to yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/node-test/bar@2016-04-05.yang diff --git a/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/node-test/bar@20160406.yang b/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/node-test/bar@2016-04-06.yang similarity index 100% rename from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/node-test/bar@20160406.yang rename to yang/yang-parser-impl/src/test/resources/semantic-statement-parser/multiple-revisions/node-test/bar@2016-04-06.yang diff --git a/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/config.yang.yin b/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/config.yin similarity index 100% rename from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/config.yang.yin rename to yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/config.yin diff --git a/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/iana-if-type.yang.yin b/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/iana-if-type.yin similarity index 100% rename from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/iana-if-type.yang.yin rename to yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/iana-if-type.yin diff --git a/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-inet-types.yang.yin b/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-inet-types.yin similarity index 100% rename from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-inet-types.yang.yin rename to yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-inet-types.yin diff --git a/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-netconf-monitoring.yang.yin b/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-netconf-monitoring.yin similarity index 100% rename from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-netconf-monitoring.yang.yin rename to yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-netconf-monitoring.yin diff --git a/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-yang-types.yang.yin b/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-yang-types.yin similarity index 100% rename from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-yang-types.yang.yin rename to yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-yang-types.yin diff --git a/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-yang-types@2013-05-16.yang.yin b/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-yang-types@2013-05-16.yin similarity index 100% rename from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-yang-types@2013-05-16.yang.yin rename to yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-yang-types@2013-05-16.yin diff --git a/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-yang-types@2013-07-15.yang.yin b/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-yang-types@2013-07-15.yin similarity index 100% rename from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-yang-types@2013-07-15.yang.yin rename to yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/ietf-yang-types@2013-07-15.yin diff --git a/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/main-impl.yang.yin b/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/main-impl.yin similarity index 100% rename from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/main-impl.yang.yin rename to yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/main-impl.yin diff --git a/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/opendaylight-md-sal-binding.yang.yin b/yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/opendaylight-md-sal-binding.yin similarity index 100% rename from yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/opendaylight-md-sal-binding.yang.yin rename to yang/yang-parser-impl/src/test/resources/semantic-statement-parser/yin/modules/opendaylight-md-sal-binding.yin diff --git a/yang/yang-parser-impl/src/test/resources/types/custom-types-test@2012-4-4.yang b/yang/yang-parser-impl/src/test/resources/types/custom-types-test@2012-04-04.yang similarity index 100% rename from yang/yang-parser-impl/src/test/resources/types/custom-types-test@2012-4-4.yang rename to yang/yang-parser-impl/src/test/resources/types/custom-types-test@2012-04-04.yang diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java index cd91b51cc2..5f88a708dd 100644 --- a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java +++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java @@ -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 = 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 getLatestRevision(final Iterable> subStmts) { -- 2.36.6