From bf25c16c89625837be48ee685184707339f487ff Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 5 May 2022 01:59:19 +0200 Subject: [PATCH] Remove RevisionSourceIdentifier SourceIdentifier is a well-understood contract, of which we have only one implementation. Merge RevisionSourceIdentifier with SourceIdentifier, turning SourceIdentifier into a record in the process of doing so. JIRA: YANGTOOLS-837 Change-Id: If223fb0c3daa2dd6eb15e4d01bb6091c9055ab58 Signed-off-by: Robert Varga --- .../api/OpenDaylightExtensionsConstants.java | 7 +- .../model/api/OpenConfigConstants.java | 16 +- .../rfc6241/model/api/NetconfConstants.java | 7 +- .../rfc6536/model/api/NACMConstants.java | 10 +- .../model/api/IetfYangSmiv2Constants.java | 7 +- .../rfc7952/model/api/MetadataConstants.java | 7 +- .../rfc8040/model/api/YangDataConstants.java | 7 +- .../model/api/SchemaMountConstants.java | 7 +- .../api/SubscribedNotificationsConstants.java | 7 +- .../yang/model/api/ModuleImport.java | 5 +- .../eff/ImportEffectiveStatementImpl.java | 2 +- .../yang/model/spi/ModuleDependencySort.java | 4 +- .../model/spi/ModuleDependencySortTest.java | 3 +- .../util/FilteringSchemaContextProxy.java | 41 ++--- .../yang/model/util/SchemaContextUtil.java | 4 +- .../model/util/SchemaContextProxyTest.java | 5 +- .../yangtools/yang/model/util/YT691Test.java | 16 +- .../OperationsValidateModuleAction.java | 5 +- .../yang/parser/repo/DependencyResolver.java | 9 +- .../repo/RevisionDependencyResolver.java | 9 +- .../parser/repo/SourceIdMismatchDetector.java | 2 +- .../repo/YangTextSchemaContextResolver.java | 12 +- .../parser/repo/DependencyResolverTest.java | 4 +- ...haredEffectiveModelContextFactoryTest.java | 11 +- .../yang/parser/repo/YT1428Test.java | 4 +- .../YangTextSchemaContextResolverTest.java | 30 ++-- .../stmt/reactor/BuildGlobalContext.java | 33 ++-- .../rfc7950/repo/TextToIRTransformer.java | 6 +- .../rfc7950/repo/YangModelDependencyInfo.java | 30 ++-- .../stmt/import_/ImportStatementSupport.java | 2 +- .../rfc7950/stmt/import_/RevisionImport.java | 15 +- .../stmt/meta/BelongsToStatementSupport.java | 11 +- .../stmt/meta/IncludeStatementSupport.java | 18 +-- .../stmt/module/ModuleStatementSupport.java | 14 +- .../submodule/SubmoduleStatementSupport.java | 9 +- .../yangtools/yang/stmt/Bug8597Test.java | 2 +- .../yangtools/yang/stmt/Bug9005Test.java | 5 +- .../yang/stmt/EffectiveModuleTest.java | 3 +- .../yang/stmt/MoreRevisionsTest.java | 7 +- .../yangtools/yang/stmt/StmtTestUtils.java | 3 +- .../yangtools/yang/stmt/YangParserTest.java | 5 +- .../yang/stmt/yin/YinFileImportStmtTest.java | 8 +- .../spi/meta/NamespaceKeyCriterion.java | 4 +- .../yangtools/yang2sources/plugin/Util.java | 4 +- .../repo/api/RevisionSourceIdentifier.java | 148 ------------------ .../yang/model/repo/api/SourceIdentifier.java | 86 +++++----- .../model/repo/api/YangTextSchemaSource.java | 3 +- .../model/repo/api/YinDomSchemaSource.java | 4 +- .../model/repo/api/YinTextSchemaSource.java | 3 +- .../repo/fs/FilesystemSchemaSourceCache.java | 11 +- ...ystemSchemaSourceCacheIntegrationTest.java | 12 +- .../fs/FilesystemSchemaSourceCacheTest.java | 68 ++++---- .../repo/spi/GuavaSchemaSourceCacheTest.java | 11 +- .../repo/spi/PotentialSchemaSourceTest.java | 4 +- .../repo/spi/SchemaSourceTransformerTest.java | 39 +++-- .../repo/spi/SoftSchemaSourceCacheTest.java | 11 +- 56 files changed, 305 insertions(+), 515 deletions(-) delete mode 100644 yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/RevisionSourceIdentifier.java diff --git a/model/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/OpenDaylightExtensionsConstants.java b/model/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/OpenDaylightExtensionsConstants.java index c591c12a8b..545535a36a 100644 --- a/model/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/OpenDaylightExtensionsConstants.java +++ b/model/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/OpenDaylightExtensionsConstants.java @@ -11,8 +11,8 @@ import com.google.common.collect.ImmutableList; import java.util.Collection; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.common.XMLNamespace; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; /** @@ -21,7 +21,7 @@ import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; * @author Robert Varga */ public final class OpenDaylightExtensionsConstants { - private static final String MODULE_NAME = "yang-ext"; + private static final Unqualified MODULE_NAME = Unqualified.of("yang-ext").intern(); private static final XMLNamespace MODULE_NAMESPACE = XMLNamespace.of("urn:opendaylight:yang:extension:yang-ext").intern(); private static final Revision ORIGINAL_REVISION = Revision.of("2013-07-09"); @@ -34,8 +34,7 @@ public final class OpenDaylightExtensionsConstants { /** * Baseline model source name. */ - public static final SourceIdentifier ORIGINAL_SOURCE = RevisionSourceIdentifier.create(MODULE_NAME, - ORIGINAL_REVISION); + public static final SourceIdentifier ORIGINAL_SOURCE = new SourceIdentifier(MODULE_NAME, ORIGINAL_REVISION); private OpenDaylightExtensionsConstants() { // Hidden on purpose diff --git a/model/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/OpenConfigConstants.java b/model/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/OpenConfigConstants.java index 3c130c8bfa..e125d9fb76 100644 --- a/model/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/OpenConfigConstants.java +++ b/model/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/OpenConfigConstants.java @@ -12,8 +12,8 @@ import java.util.Collection; import org.eclipse.jdt.annotation.NonNullByDefault; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.common.XMLNamespace; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; /** @@ -23,7 +23,7 @@ import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; */ @NonNullByDefault public final class OpenConfigConstants { - private static final String MODULE_NAME = "yang-ext"; + private static final Unqualified MODULE_NAME = Unqualified.of("yang-ext").intern(); // Package-visible, because openconfig-version applies across all known revisions and needs to bind to all of them static final XMLNamespace MODULE_NAMESPACE = XMLNamespace.of("http://openconfig.net/yang/openconfig-ext").intern(); @@ -65,26 +65,24 @@ public final class OpenConfigConstants { /** * Original model source name. */ - public static final SourceIdentifier SEMVER_SOURCE = RevisionSourceIdentifier.create(MODULE_NAME, - SEMVER_REVISION); + public static final SourceIdentifier SEMVER_SOURCE = new SourceIdentifier(MODULE_NAME, SEMVER_REVISION); /** * Original model source name. */ - public static final SourceIdentifier ENCRYPTED_VALUE_SOURCE = RevisionSourceIdentifier.create(MODULE_NAME, + public static final SourceIdentifier ENCRYPTED_VALUE_SOURCE = new SourceIdentifier(MODULE_NAME, ENCRYPTED_VALUE_REVISION); /** * Original model source name. */ - public static final SourceIdentifier HASHED_VALUE_SOURCE = RevisionSourceIdentifier.create(MODULE_NAME, - HASHED_VALUE_REVISION); + public static final SourceIdentifier HASHED_VALUE_SOURCE = new SourceIdentifier(MODULE_NAME, HASHED_VALUE_REVISION); /** * Original model source name. */ - public static final SourceIdentifier REGEXP_POSIX_SOURCE = RevisionSourceIdentifier.create(MODULE_NAME, - REGEXP_POSIX_REVISION); + public static final SourceIdentifier REGEXP_POSIX_SOURCE = new SourceIdentifier(MODULE_NAME, REGEXP_POSIX_REVISION); + /** * Normative prefix to use when importing {@link #SEMVER_SOURCE} and later. */ diff --git a/model/rfc6241-model-api/src/main/java/org/opendaylight/yangtools/rfc6241/model/api/NetconfConstants.java b/model/rfc6241-model-api/src/main/java/org/opendaylight/yangtools/rfc6241/model/api/NetconfConstants.java index 14756f2cfd..cbd3418938 100644 --- a/model/rfc6241-model-api/src/main/java/org/opendaylight/yangtools/rfc6241/model/api/NetconfConstants.java +++ b/model/rfc6241-model-api/src/main/java/org/opendaylight/yangtools/rfc6241/model/api/NetconfConstants.java @@ -13,8 +13,8 @@ import java.util.Collection; import org.eclipse.jdt.annotation.NonNullByDefault; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.common.XMLNamespace; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; /** @@ -25,7 +25,7 @@ import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; @Beta @NonNullByDefault public final class NetconfConstants { - private static final String MODULE_NAME = "ietf-netconf"; + private static final Unqualified MODULE_NAME = Unqualified.of("ietf-netconf").intern(); private static final XMLNamespace MODULE_NAMESPACE = XMLNamespace.of("urn:ietf:params:xml:ns:netconf:base:1.0").intern(); private static final Revision RFC6241_REVISION = Revision.of("2011-06-01"); @@ -38,8 +38,7 @@ public final class NetconfConstants { /** * RFC6241 model source name. */ - public static final SourceIdentifier RFC6241_SOURCE = RevisionSourceIdentifier.create(MODULE_NAME, - RFC6241_REVISION); + public static final SourceIdentifier RFC6241_SOURCE = new SourceIdentifier(MODULE_NAME, RFC6241_REVISION); /** * Normative prefix to use when importing {@link #RFC6241_SOURCE}. diff --git a/model/rfc6536-model-api/src/main/java/org/opendaylight/yangtools/rfc6536/model/api/NACMConstants.java b/model/rfc6536-model-api/src/main/java/org/opendaylight/yangtools/rfc6536/model/api/NACMConstants.java index 633ed57489..6f30fd480b 100644 --- a/model/rfc6536-model-api/src/main/java/org/opendaylight/yangtools/rfc6536/model/api/NACMConstants.java +++ b/model/rfc6536-model-api/src/main/java/org/opendaylight/yangtools/rfc6536/model/api/NACMConstants.java @@ -12,8 +12,8 @@ import java.util.Collection; import org.eclipse.jdt.annotation.NonNullByDefault; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.common.XMLNamespace; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; /** @@ -23,7 +23,7 @@ import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; */ @NonNullByDefault public final class NACMConstants { - private static final String MODULE_NAME = "ietf-netconf-acm"; + private static final Unqualified MODULE_NAME = Unqualified.of("ietf-netconf-acm").intern(); private static final XMLNamespace MODULE_NAMESPACE = XMLNamespace.of("urn:ietf:params:xml:ns:yang:ietf-netconf-acm").intern(); private static final Revision RFC6536_REVISION = Revision.of("2012-02-22"); @@ -42,14 +42,12 @@ public final class NACMConstants { /** * RFC6536 model source name. */ - public static final SourceIdentifier RFC6536_SOURCE = RevisionSourceIdentifier.create(MODULE_NAME, - RFC6536_REVISION); + public static final SourceIdentifier RFC6536_SOURCE = new SourceIdentifier(MODULE_NAME, RFC6536_REVISION); /** * RFC8341 model source name. */ - public static final SourceIdentifier RFC8341_SOURCE = RevisionSourceIdentifier.create(MODULE_NAME, - RFC8341_REVISION); + public static final SourceIdentifier RFC8341_SOURCE = new SourceIdentifier(MODULE_NAME, RFC8341_REVISION); /** * Normative prefix to use when importing {@link #RFC6536_SOURCE}. diff --git a/model/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/IetfYangSmiv2Constants.java b/model/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/IetfYangSmiv2Constants.java index 25ad01d52c..797a042d1e 100644 --- a/model/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/IetfYangSmiv2Constants.java +++ b/model/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/IetfYangSmiv2Constants.java @@ -12,13 +12,13 @@ import com.google.common.collect.ImmutableList; import java.util.Collection; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.common.XMLNamespace; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; @Beta public final class IetfYangSmiv2Constants { - private static final String MODULE_NAME = "ietf-yang-smiv2"; + private static final Unqualified MODULE_NAME = Unqualified.of("ietf-yang-smiv2").intern(); private static final XMLNamespace MODULE_NAMESPACE = XMLNamespace.of("urn:ietf:params:xml:ns:yang:ietf-yang-smiv2").intern(); private static final Revision RFC6643_REVISION = Revision.of("2012-06-22"); @@ -31,8 +31,7 @@ public final class IetfYangSmiv2Constants { /** * RFC6643 model source name. */ - public static final SourceIdentifier RFC6643_SOURCE = RevisionSourceIdentifier.create(MODULE_NAME, - RFC6643_REVISION); + public static final SourceIdentifier RFC6643_SOURCE = new SourceIdentifier(MODULE_NAME, RFC6643_REVISION); /** * Normative prefix to use when importing {@link #RFC6643_SOURCE}. diff --git a/model/rfc7952-model-api/src/main/java/org/opendaylight/yangtools/rfc7952/model/api/MetadataConstants.java b/model/rfc7952-model-api/src/main/java/org/opendaylight/yangtools/rfc7952/model/api/MetadataConstants.java index b4f8adcb62..9b4adf35eb 100644 --- a/model/rfc7952-model-api/src/main/java/org/opendaylight/yangtools/rfc7952/model/api/MetadataConstants.java +++ b/model/rfc7952-model-api/src/main/java/org/opendaylight/yangtools/rfc7952/model/api/MetadataConstants.java @@ -12,8 +12,8 @@ import java.util.Collection; import org.eclipse.jdt.annotation.NonNullByDefault; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.common.XMLNamespace; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; /** @@ -23,7 +23,7 @@ import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; */ @NonNullByDefault public final class MetadataConstants { - private static final String MODULE_NAME = "ietf-yang-metadata"; + private static final Unqualified MODULE_NAME = Unqualified.of("ietf-yang-metadata").intern(); private static final XMLNamespace MODULE_NAMESPACE = XMLNamespace.of("urn:ietf:params:xml:ns:yang:ietf-yang-metadata").intern(); private static final Revision RFC7952_REVISION = Revision.of("2016-08-05"); @@ -36,8 +36,7 @@ public final class MetadataConstants { /** * RFC7952 model source name. */ - public static final SourceIdentifier RFC7952_SOURCE = RevisionSourceIdentifier.create(MODULE_NAME, - RFC7952_REVISION); + public static final SourceIdentifier RFC7952_SOURCE = new SourceIdentifier(MODULE_NAME, RFC7952_REVISION); /** * Normative prefix to use when importing {@link #RFC7952_SOURCE}. diff --git a/model/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataConstants.java b/model/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataConstants.java index 9d548ac648..b61f2b3e9c 100644 --- a/model/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataConstants.java +++ b/model/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataConstants.java @@ -12,8 +12,8 @@ import java.util.Collection; import org.eclipse.jdt.annotation.NonNullByDefault; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.common.XMLNamespace; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; /** @@ -23,7 +23,7 @@ import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; */ @NonNullByDefault public final class YangDataConstants { - private static final String MODULE_NAME = "ietf-restconf"; + private static final Unqualified MODULE_NAME = Unqualified.of("ietf-restconf").intern(); private static final XMLNamespace MODULE_NAMESPACE = XMLNamespace.of("urn:ietf:params:xml:ns:yang:ietf-restconf").intern(); private static final Revision RFC8040_REVISION = Revision.of("2017-01-26"); @@ -36,8 +36,7 @@ public final class YangDataConstants { /** * RFC8040 model source name. */ - public static final SourceIdentifier RFC8040_SOURCE = RevisionSourceIdentifier.create(MODULE_NAME, - RFC8040_REVISION); + public static final SourceIdentifier RFC8040_SOURCE = new SourceIdentifier(MODULE_NAME, RFC8040_REVISION); /** * Normative prefix to use when importing {@link #RFC8040_SOURCE}. diff --git a/model/rfc8528-model-api/src/main/java/org/opendaylight/yangtools/rfc8528/model/api/SchemaMountConstants.java b/model/rfc8528-model-api/src/main/java/org/opendaylight/yangtools/rfc8528/model/api/SchemaMountConstants.java index 17d1bda2ae..072f1b4ef2 100644 --- a/model/rfc8528-model-api/src/main/java/org/opendaylight/yangtools/rfc8528/model/api/SchemaMountConstants.java +++ b/model/rfc8528-model-api/src/main/java/org/opendaylight/yangtools/rfc8528/model/api/SchemaMountConstants.java @@ -12,8 +12,8 @@ import java.util.Collection; import org.eclipse.jdt.annotation.NonNullByDefault; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.common.XMLNamespace; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; /** @@ -23,7 +23,7 @@ import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; */ @NonNullByDefault public final class SchemaMountConstants { - private static final String MODULE_NAME = "ietf-yang-schema-mount"; + private static final Unqualified MODULE_NAME = Unqualified.of("ietf-yang-schema-mount").intern(); private static final XMLNamespace MODULE_NAMESPACE = XMLNamespace.of("urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount").intern(); private static final Revision RFC8528_REVISION = Revision.of("2019-01-14"); @@ -36,8 +36,7 @@ public final class SchemaMountConstants { /** * RFC8528 model source name. */ - public static final SourceIdentifier RFC8528_SOURCE = RevisionSourceIdentifier.create(MODULE_NAME, - RFC8528_REVISION); + public static final SourceIdentifier RFC8528_SOURCE = new SourceIdentifier(MODULE_NAME, RFC8528_REVISION); /** * Normative prefix to use when importing {@link #RFC8528_SOURCE}. diff --git a/model/rfc8639-model-api/src/main/java/org/opendaylight/yangtools/rfc8639/model/api/SubscribedNotificationsConstants.java b/model/rfc8639-model-api/src/main/java/org/opendaylight/yangtools/rfc8639/model/api/SubscribedNotificationsConstants.java index 59405d989b..b46de022fe 100644 --- a/model/rfc8639-model-api/src/main/java/org/opendaylight/yangtools/rfc8639/model/api/SubscribedNotificationsConstants.java +++ b/model/rfc8639-model-api/src/main/java/org/opendaylight/yangtools/rfc8639/model/api/SubscribedNotificationsConstants.java @@ -12,8 +12,8 @@ import java.util.Collection; import org.eclipse.jdt.annotation.NonNullByDefault; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.common.XMLNamespace; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; /** @@ -21,7 +21,7 @@ import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; */ @NonNullByDefault public final class SubscribedNotificationsConstants { - private static final String MODULE_NAME = "ietf-subscribed-notifications"; + private static final Unqualified MODULE_NAME = Unqualified.of("ietf-subscribed-notifications").intern(); private static final XMLNamespace MODULE_NAMESPACE = XMLNamespace.of("urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications").intern(); private static final Revision RFC8639_REVISION = Revision.of("2019-09-09"); @@ -34,8 +34,7 @@ public final class SubscribedNotificationsConstants { /** * RFC8639 model source name. */ - public static final SourceIdentifier RFC8639_SOURCE = RevisionSourceIdentifier.create(MODULE_NAME, - RFC8639_REVISION); + public static final SourceIdentifier RFC8639_SOURCE = new SourceIdentifier(MODULE_NAME, RFC8639_REVISION); /** * Normative prefix to use when importing {@link #RFC8639_SOURCE}. diff --git a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ModuleImport.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ModuleImport.java index bf3ea93cae..b66a8c2700 100644 --- a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ModuleImport.java +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ModuleImport.java @@ -10,6 +10,7 @@ package org.opendaylight.yangtools.yang.model.api; import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.stmt.ImportEffectiveStatement; /** @@ -27,8 +28,8 @@ public interface ModuleImport extends DocumentedNode, EffectiveStatementEquivale * * @return Name of the module to import */ - default @NonNull String getModuleName() { - return asEffectiveStatement().argument().getLocalName(); + default @NonNull Unqualified getModuleName() { + return asEffectiveStatement().argument(); } /** diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/ImportEffectiveStatementImpl.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/ImportEffectiveStatementImpl.java index b593efd793..09aad9b3cf 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/ImportEffectiveStatementImpl.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/ImportEffectiveStatementImpl.java @@ -29,7 +29,7 @@ public final class ImportEffectiveStatementImpl extends WithSubstatements> substatements, final @NonNull SourceIdentifier importedSource) { super(declared, substatements); - revision = importedSource.getRevision().orElse(null); + revision = importedSource.revision(); } @Override diff --git a/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/ModuleDependencySort.java b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/ModuleDependencySort.java index 599cd74a7f..8cc4f039fc 100644 --- a/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/ModuleDependencySort.java +++ b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/ModuleDependencySort.java @@ -110,7 +110,7 @@ public final class ModuleDependencySort { // no need to check if other Type of object, check is performed in process modules for (final ModuleImport imprt : allImports(module)) { - final String toName = imprt.getModuleName(); + final String toName = imprt.getModuleName().getLocalName(); final Optional toRevision = imprt.getRevision(); final ModuleNodeImpl from = moduleGraph.get(fromName, fromRevision); @@ -218,7 +218,7 @@ public final class ModuleDependencySort { ModuleNodeImpl(final String name, final Revision revision, final Module module) { this.name = name; this.revision = revision; - this.originalObject = module; + originalObject = module; } String getName() { diff --git a/model/yang-model-spi/src/test/java/org/opendaylight/yangtools/yang/model/spi/ModuleDependencySortTest.java b/model/yang-model-spi/src/test/java/org/opendaylight/yangtools/yang/model/spi/ModuleDependencySortTest.java index 92505a42d1..fec1802a43 100644 --- a/model/yang-model-spi/src/test/java/org/opendaylight/yangtools/yang/model/spi/ModuleDependencySortTest.java +++ b/model/yang-model-spi/src/test/java/org/opendaylight/yangtools/yang/model/spi/ModuleDependencySortTest.java @@ -19,6 +19,7 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import org.opendaylight.yangtools.yang.common.QNameModule; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.common.YangVersion; import org.opendaylight.yangtools.yang.model.api.Module; @@ -50,7 +51,7 @@ public class ModuleDependencySortTest { doReturn(Set.of()).when(fooNoRev).getImports(); doReturn(Set.of()).when(fooNoRev).getSubmodules(); - doReturn("foo").when(fooNoRevImport).getModuleName(); + doReturn(Unqualified.of("foo")).when(fooNoRevImport).getModuleName(); doReturn(Optional.empty()).when(fooNoRevImport).getRevision(); doReturn("bar").when(bar).getName(); diff --git a/model/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/FilteringSchemaContextProxy.java b/model/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/FilteringSchemaContextProxy.java index 31ebeb67e2..c918baac26 100644 --- a/model/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/FilteringSchemaContextProxy.java +++ b/model/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/FilteringSchemaContextProxy.java @@ -7,11 +7,9 @@ */ package org.opendaylight.yangtools.yang.model.util; -import static com.google.common.base.Preconditions.checkArgument; import static java.util.Objects.requireNonNull; import com.google.common.base.Preconditions; -import com.google.common.base.Strings; import com.google.common.collect.Collections2; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; @@ -28,6 +26,7 @@ import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.TreeMap; @@ -35,6 +34,7 @@ import java.util.function.Function; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.ModuleImport; @@ -90,7 +90,7 @@ public final class FilteringSchemaContextProxy extends AbstractSchemaContext { */ final List sortedModules = new ArrayList<>(filteredModulesBuilder.build()); sortedModules.sort(NAME_REVISION_COMPARATOR); - this.filteredModules = ImmutableSet.copyOf(sortedModules); + filteredModules = ImmutableSet.copyOf(sortedModules); final SetMultimap nsMap = Multimaps.newSetMultimap(new TreeMap<>(), AbstractSchemaContext::createModuleSet); @@ -135,7 +135,8 @@ public final class FilteringSchemaContextProxy extends AbstractSchemaContext { for (ModuleImport moduleImport : module.getImports()) { Optional revisionDate = moduleImport.getRevision(); if (revisionDate.isEmpty()) { - revisionDate = nameToModulesAll.get(moduleImport.getModuleName()).first().getRevision(); + revisionDate = nameToModulesAll.get(moduleImport.getModuleName().getLocalName()).first() + .getRevision(); } ModuleId key = new ModuleId(moduleImport.getModuleName(), revisionDate); @@ -209,17 +210,19 @@ public final class FilteringSchemaContextProxy extends AbstractSchemaContext { } public static final class ModuleId { - private final String name; + private final Unqualified name; private final Revision rev; public ModuleId(final String name, final Optional rev) { - checkArgument(!Strings.isNullOrEmpty(name), "No module dependency name given. Nothing to do."); - this.name = name; - checkArgument(rev.isPresent(), "No revision date given. Nothing to do."); - this.rev = rev.get(); + this(Unqualified.of(name), rev); } - public String getName() { + public ModuleId(final Unqualified name, final Optional rev) { + this.name = requireNonNull(name); + this.rev = rev.orElseThrow(() -> new IllegalArgumentException("No revision date given. Nothing to do.")); + } + + public Unqualified getName() { return name; } @@ -232,22 +235,8 @@ public final class FilteringSchemaContextProxy extends AbstractSchemaContext { @Override public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof ModuleId)) { - return false; - } - - ModuleId moduleId = (ModuleId) obj; - if (name != null ? !name.equals(moduleId.name) : moduleId.name != null) { - return false; - } - if (rev != null ? !rev.equals(moduleId.rev) : moduleId.rev != null) { - return false; - } - - return true; + return this == obj || obj instanceof ModuleId other && name.equals(other.name) + && Objects.equals(rev, other.rev); } @Override diff --git a/model/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaContextUtil.java b/model/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaContextUtil.java index da7408df1b..9b39d85b92 100644 --- a/model/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaContextUtil.java +++ b/model/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaContextUtil.java @@ -9,11 +9,11 @@ package org.opendaylight.yangtools.yang.model.util; import java.util.HashSet; import java.util.Set; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.ModuleLike; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.Submodule; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; /** @@ -48,6 +48,6 @@ public final class SchemaContextUtil { } private static SourceIdentifier moduleToIdentifier(final ModuleLike module) { - return RevisionSourceIdentifier.create(module.getName(), module.getRevision()); + return new SourceIdentifier(Unqualified.of(module.getName()), module.getRevision().orElse(null)); } } diff --git a/model/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/SchemaContextProxyTest.java b/model/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/SchemaContextProxyTest.java index 1a3068a67e..839ea2cb38 100644 --- a/model/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/SchemaContextProxyTest.java +++ b/model/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/SchemaContextProxyTest.java @@ -25,6 +25,7 @@ import org.junit.Test; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -582,8 +583,8 @@ public class SchemaContextProxyTest { for (final Module module : imports) { mockedImports.add(new ModuleImport() { @Override - public String getModuleName() { - return module.getName(); + public Unqualified getModuleName() { + return Unqualified.of(module.getName()); } @Override diff --git a/model/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/YT691Test.java b/model/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/YT691Test.java index b7afea71d5..8aeb05504a 100644 --- a/model/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/YT691Test.java +++ b/model/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/YT691Test.java @@ -11,12 +11,9 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import com.google.common.collect.ImmutableSet; -import java.util.Optional; import java.util.Set; import org.junit.Test; -import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.spi.SimpleSchemaContext; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; @@ -24,13 +21,12 @@ import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; public class YT691Test { @Test public void testGetAllModuleIdentifiers() { - final Optional revision = Revision.ofNullable("2016-01-01"); - final SourceIdentifier foo = RevisionSourceIdentifier.create("foo", revision); - final SourceIdentifier sub1Foo = RevisionSourceIdentifier.create("sub1-foo", revision); - final SourceIdentifier sub2Foo = RevisionSourceIdentifier.create("sub2-foo", revision); - final SourceIdentifier bar = RevisionSourceIdentifier.create("bar", revision); - final SourceIdentifier sub1Bar = RevisionSourceIdentifier.create("sub1-bar", revision); - final SourceIdentifier baz = RevisionSourceIdentifier.create("baz", revision); + final SourceIdentifier foo = new SourceIdentifier("foo", "2016-01-01"); + final SourceIdentifier sub1Foo = new SourceIdentifier("sub1-foo", "2016-01-01"); + final SourceIdentifier sub2Foo = new SourceIdentifier("sub2-foo", "2016-01-01"); + final SourceIdentifier bar = new SourceIdentifier("bar", "2016-01-01"); + final SourceIdentifier sub1Bar = new SourceIdentifier("sub1-bar", "2016-01-01"); + final SourceIdentifier baz = new SourceIdentifier("baz", "2016-01-01"); final Set testSet = ImmutableSet.of(foo, sub1Foo, sub2Foo, bar, sub1Bar, baz); final EffectiveModelContext context = YangParserTestUtils.parseYangResourceDirectory("/yt691"); final Set allModuleIdentifiers = SchemaContextUtil.getConstituentModuleIdentifiers(context); diff --git a/parser/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/OperationsValidateModuleAction.java b/parser/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/OperationsValidateModuleAction.java index 80ae818550..92aaaa0f2f 100644 --- a/parser/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/OperationsValidateModuleAction.java +++ b/parser/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/OperationsValidateModuleAction.java @@ -13,6 +13,7 @@ import java.util.Collection; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.rfc8040.model.api.YangDataConstants; import org.opendaylight.yangtools.yang.common.QNameModule; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement; import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement; @@ -27,7 +28,7 @@ import org.opendaylight.yangtools.yang.parser.spi.source.ModuleCtxToModuleQName; * An {@link InferenceAction} tasked with identifying when we are dealing with {@link YangDataConstants#RFC8040_SOURCE}. */ final class OperationsValidateModuleAction implements InferenceAction { - private static final String IETF_RESTCONF = YangDataConstants.RFC8040_SOURCE.getName(); + private static final Unqualified IETF_RESTCONF = YangDataConstants.RFC8040_SOURCE.name(); private final Prerequisite> prereq; @@ -37,7 +38,7 @@ final class OperationsValidateModuleAction implements InferenceAction { static void applyTo(@NonNull final Mutable module) { // Quick checks we can - if (module.producesDeclared(ModuleStatement.class) && IETF_RESTCONF.equals(module.rawArgument())) { + if (module.producesDeclared(ModuleStatement.class) && IETF_RESTCONF.equals(module.argument())) { // This is 'yang-api' definition within a 'ietf-restconf' module, but we are not certain about revisions // and its structure. Next up we require the module to be fully declared, hence an inference action is // needed to continue this process. diff --git a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolver.java b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolver.java index e87c7d3cfb..99d0d15ef8 100644 --- a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolver.java +++ b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolver.java @@ -21,6 +21,7 @@ import java.util.Map.Entry; import java.util.Optional; import java.util.Set; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.ModuleImport; import org.opendaylight.yangtools.yang.model.api.stmt.ImportEffectiveStatement; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; @@ -64,7 +65,7 @@ abstract class DependencyResolver { // in case of submodule, remember belongs to if (dep instanceof YangModelDependencyInfo.SubmoduleDependencyInfo) { - final String parent = ((YangModelDependencyInfo.SubmoduleDependencyInfo) dep).getParentModule(); + final var parent = ((YangModelDependencyInfo.SubmoduleDependencyInfo) dep).getParentModule(); submodules.put(id, new BelongsToDependency(parent)); } @@ -153,14 +154,14 @@ abstract class DependencyResolver { } private static class BelongsToDependency implements ModuleImport { - private final String parent; + private final Unqualified parent; - BelongsToDependency(final String parent) { + BelongsToDependency(final Unqualified parent) { this.parent = parent; } @Override - public String getModuleName() { + public Unqualified getModuleName() { return parent; } diff --git a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/RevisionDependencyResolver.java b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/RevisionDependencyResolver.java index 8bfda2aae2..7f3c339bc6 100644 --- a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/RevisionDependencyResolver.java +++ b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/RevisionDependencyResolver.java @@ -9,8 +9,8 @@ package org.opendaylight.yangtools.yang.parser.repo; import java.util.Collection; import java.util.Map; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; 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; import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangModelDependencyInfo; @@ -20,9 +20,10 @@ final class RevisionDependencyResolver extends DependencyResolver { super(depInfo); } - protected static SourceIdentifier findWildcard(final Iterable haystack, final String needle) { + protected static SourceIdentifier findWildcard(final Iterable haystack, + final Unqualified needle) { for (final SourceIdentifier r : haystack) { - if (needle.equals(r.getName())) { + if (needle.equals(r.name())) { return r; } } @@ -37,7 +38,7 @@ final class RevisionDependencyResolver extends DependencyResolver { @Override protected boolean isKnown(final Collection haystack, final ModuleImport mi) { - final SourceIdentifier msi = RevisionSourceIdentifier.create(mi.getModuleName(), mi.getRevision()); + final SourceIdentifier msi = new SourceIdentifier(mi.getModuleName(), mi.getRevision().orElse(null)); // Quick lookup if (haystack.contains(msi)) { diff --git a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/SourceIdMismatchDetector.java b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/SourceIdMismatchDetector.java index 070b18f1ab..65454fc63c 100644 --- a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/SourceIdMismatchDetector.java +++ b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/SourceIdMismatchDetector.java @@ -45,7 +45,7 @@ final class SourceIdMismatchDetector implements Function, L final SourceIdentifier expectedSId = srcIt.next(); if (!expectedSId.equals(realSId)) { LOG.warn("Source identifier mismatch for module \"{}\", requested as {} but actually is {}. " - + "Using actual id", expectedSId.getName(), expectedSId, realSId); + + "Using actual id", expectedSId.name().getLocalName(), expectedSId, realSId); } } diff --git a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolver.java b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolver.java index 8e0c309d6d..d39a75ba7e 100644 --- a/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolver.java +++ b/parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolver.java @@ -33,7 +33,6 @@ import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.repo.api.EffectiveModelContextFactory; import org.opendaylight.yangtools.yang.model.repo.api.MissingSchemaSourceException; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SchemaContextFactoryConfiguration; import org.opendaylight.yangtools.yang.model.repo.api.SchemaRepository; import org.opendaylight.yangtools.yang.model.repo.api.SchemaResolutionException; @@ -112,14 +111,13 @@ public final class YangTextSchemaContextResolver implements AutoCloseable, Schem final SourceIdentifier parsedId = ast.getIdentifier(); final YangTextSchemaSource text; if (!parsedId.equals(providedId)) { - if (!parsedId.getName().equals(providedId.getName())) { + if (!parsedId.name().equals(providedId.name())) { LOG.info("Provided module name {} does not match actual text {}, corrected", providedId.toYangFilename(), parsedId.toYangFilename()); } else { - final Optional sourceRev = providedId.getRevision(); - final Optional astRev = parsedId.getRevision(); - if (sourceRev.isPresent()) { - if (!sourceRev.equals(astRev)) { + final Revision sourceRev = providedId.revision(); + if (sourceRev != null) { + if (!sourceRev.equals(parsedId.revision())) { LOG.info("Provided module revision {} does not match actual text {}, corrected", providedId.toYangFilename(), parsedId.toYangFilename()); } @@ -182,7 +180,7 @@ public final class YangTextSchemaContextResolver implements AutoCloseable, Schem return YangTextSchemaSource.identifierFromFilename(fileName); } catch (final IllegalArgumentException e) { LOG.warn("Invalid file name format in '{}'", fileName, e); - return RevisionSourceIdentifier.create(fileName); + return new SourceIdentifier(fileName); } } diff --git a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolverTest.java b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolverTest.java index 47028cd906..633f44bb1a 100644 --- a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolverTest.java +++ b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolverTest.java @@ -5,7 +5,6 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.yangtools.yang.parser.repo; import static org.junit.Assert.assertEquals; @@ -13,7 +12,6 @@ import static org.junit.Assert.assertEquals; import java.util.HashMap; import java.util.Map; import org.junit.Test; -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; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangModelDependencyInfo; @@ -67,6 +65,6 @@ public class DependencyResolverTest { final String yangFileName) throws Exception { final var info = ModuleDependencyInfo.forYangText(YangTextSchemaSource.forResource(DependencyResolverTest.class, yangFileName)); - map.put(RevisionSourceIdentifier.create(info.getName(), info.getRevision()), info); + map.put(new SourceIdentifier(info.getName(), info.getFormattedRevision()), info); } } diff --git a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedEffectiveModelContextFactoryTest.java b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedEffectiveModelContextFactoryTest.java index bcbaa6ee85..dc1937aab3 100644 --- a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedEffectiveModelContextFactoryTest.java +++ b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedEffectiveModelContextFactoryTest.java @@ -21,10 +21,8 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; -import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.repo.api.MissingSchemaSourceException; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SchemaContextFactoryConfiguration; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; @@ -46,8 +44,8 @@ public class SharedEffectiveModelContextFactoryTest { public void setUp() { 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", Revision.of("2010-09-24")); - s2 = RevisionSourceIdentifier.create("iana-timezones", Revision.of("2012-07-09")); + s1 = new SourceIdentifier("ietf-inet-types", "2010-09-24"); + s2 = new SourceIdentifier("iana-timezones", "2012-07-09"); final TextToIRTransformer transformer = TextToIRTransformer.create(repository, repository); repository.registerSchemaSourceListener(transformer); @@ -82,7 +80,7 @@ public class SharedEffectiveModelContextFactoryTest { provider.register(repository); // Register the same provider under source id without revision - final SourceIdentifier sIdWithoutRevision = RevisionSourceIdentifier.create(provider.getId().getName()); + final SourceIdentifier sIdWithoutRevision = new SourceIdentifier(provider.getId().name()); repository.registerSchemaSource(provider, PotentialSchemaSource.create( sIdWithoutRevision, IRSchemaSource.class, PotentialSchemaSource.Costs.IMMEDIATE.getValue())); @@ -95,8 +93,7 @@ public class SharedEffectiveModelContextFactoryTest { @Test public void testTransientFailureWhilreRetrievingSchemaSource() throws Exception { - final RevisionSourceIdentifier s3 = - RevisionSourceIdentifier.create("network-topology", Revision.of("2013-10-21")); + final SourceIdentifier s3 = new SourceIdentifier("network-topology", "2013-10-21"); repository.registerSchemaSource(new TransientFailureProvider( YangTextSchemaSource.forResource("/ietf/network-topology@2013-10-21.yang")), diff --git a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/YT1428Test.java b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/YT1428Test.java index 25e9a7870b..b9500aca0b 100644 --- a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/YT1428Test.java +++ b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/YT1428Test.java @@ -12,14 +12,14 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import org.junit.Test; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SchemaResolutionException; +import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; public class YT1428Test extends AbstractSchemaRepositoryTest { @Test public void testDeviateSourceReported() { final var cause = assertExecutionException(null, "/yt1428/orig.yang", "/yt1428/deviate.yang").getCause(); assertThat(cause, instanceOf(SchemaResolutionException.class)); - assertEquals(RevisionSourceIdentifier.create("deviate"), ((SchemaResolutionException) cause).getFailedSource()); + assertEquals(new SourceIdentifier("deviate"), ((SchemaResolutionException) cause).getFailedSource()); } } diff --git a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolverTest.java b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolverTest.java index ea11312091..b8cb536e8d 100644 --- a/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolverTest.java +++ b/parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolverTest.java @@ -8,10 +8,12 @@ package org.opendaylight.yangtools.yang.parser.repo; +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; import com.google.common.util.concurrent.ListenableFuture; import java.io.IOException; @@ -19,9 +21,8 @@ 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.repo.api.RevisionSourceIdentifier; +import org.opendaylight.yangtools.yang.model.repo.api.MissingSchemaSourceException; import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceException; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; @@ -55,37 +56,34 @@ public class YangTextSchemaContextResolverTest { assertEquals(3, yangTextSchemaContextResolver.getAvailableSources().size()); - final SourceIdentifier fooModuleId = RevisionSourceIdentifier.create("foo", Revision.of("2016-09-26")); + final SourceIdentifier fooModuleId = new SourceIdentifier("foo", "2016-09-26"); final ListenableFuture foo = yangTextSchemaContextResolver.getSource(fooModuleId); assertTrue(foo.isDone()); assertEquals(fooModuleId, foo.get().getIdentifier()); - final SourceIdentifier barModuleId = RevisionSourceIdentifier.create("bar", Revision.of("2016-09-26")); + final SourceIdentifier barModuleId = new SourceIdentifier("bar", "2016-09-26"); final ListenableFuture bar = yangTextSchemaContextResolver.getSource(barModuleId); assertTrue(bar.isDone()); assertEquals(barModuleId, bar.get().getIdentifier()); - final SourceIdentifier bazModuleId = RevisionSourceIdentifier.create("baz", Revision.of("2016-09-26")); + final SourceIdentifier bazModuleId = new SourceIdentifier("baz", "2016-09-26"); final ListenableFuture baz = yangTextSchemaContextResolver.getSource(bazModuleId); assertTrue(baz.isDone()); assertEquals(bazModuleId, baz.get().getIdentifier()); - final SourceIdentifier foobarModuleId = RevisionSourceIdentifier.create("foobar", Revision.of("2016-09-26")); + final SourceIdentifier foobarModuleId = new SourceIdentifier("foobar", "2016-09-26"); final ListenableFuture foobar = yangTextSchemaContextResolver.getSource(foobarModuleId); assertTrue(foobar.isDone()); - try { - foobar.get(); - fail("A MissingSchemaSourceException should have been thrown."); - } catch (ExecutionException e) { - assertEquals("URL for RevisionSourceIdentifier [name=foobar@2016-09-26] not registered", - e.getCause().getMessage()); - } + + final Throwable cause = assertThrows(ExecutionException.class, foobar::get).getCause(); + assertThat(cause, instanceOf(MissingSchemaSourceException.class)); + assertEquals("URL for SourceIdentifier [foobar@2016-09-26] not registered", cause.getMessage()); Optional schemaContextOptional = yangTextSchemaContextResolver.getEffectiveModelContext(); assertTrue(schemaContextOptional.isPresent()); - SchemaContext schemaContext = schemaContextOptional.get(); + SchemaContext schemaContext = schemaContextOptional.orElseThrow(); assertEquals(3, schemaContext.getModules().size()); registration1.close(); @@ -96,7 +94,7 @@ public class YangTextSchemaContextResolverTest { schemaContextOptional = yangTextSchemaContextResolver.getEffectiveModelContext(); assertTrue(schemaContextOptional.isPresent()); - schemaContext = schemaContextOptional.get(); + schemaContext = schemaContextOptional.orElseThrow(); assertEquals(0, schemaContext.getModules().size()); } } diff --git a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java index bca4ae6d7f..a38e5ec520 100644 --- a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java +++ b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java @@ -8,6 +8,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.reactor; import static com.google.common.base.Preconditions.checkState; +import static com.google.common.base.Verify.verify; import static com.google.common.base.Verify.verifyNotNull; import static java.util.Objects.requireNonNull; @@ -35,10 +36,10 @@ import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.common.YangVersion; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.parser.spi.meta.DerivedNamespaceBehaviour; import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase; @@ -238,14 +239,17 @@ final class BuildGlobalContext extends NamespaceStorageSupport implements Regist private static SourceIdentifier createSourceIdentifier(final StmtContext root) { final QNameModule qNameModule = root.getFromNamespace(ModuleCtxToModuleQName.class, root); - final String arg = root.getRawArgument(); + final Object arg = root.getArgument(); + verify(arg instanceof Unqualified, "Unexpected argument %s", arg); + if (qNameModule != null) { // creates SourceIdentifier for a module - return RevisionSourceIdentifier.create(arg, qNameModule.getRevision()); + return new SourceIdentifier((Unqualified) arg, qNameModule.getRevision().orElse(null)); } // creates SourceIdentifier for a submodule - return RevisionSourceIdentifier.create(arg, StmtContextUtils.getLatestRevision(root.declaredSubstatements())); + return new SourceIdentifier((Unqualified) arg, + StmtContextUtils.getLatestRevision(root.declaredSubstatements()).orElse(null)); } @SuppressWarnings("checkstyle:illegalCatch") @@ -406,11 +410,12 @@ final class BuildGlobalContext extends NamespaceStorageSupport implements Regist checkState(currentPhase == ModelProcessingPhase.SOURCE_PRE_LINKAGE, "Required library sources can be collected only in ModelProcessingPhase.SOURCE_PRE_LINKAGE phase," + " but current phase was %s", currentPhase); - final TreeBasedTable, SourceSpecificContext> libSourcesTable = TreeBasedTable.create( - String::compareTo, Revision::compare); + final TreeBasedTable, SourceSpecificContext> libSourcesTable = + TreeBasedTable.create(Unqualified::compareTo, Revision::compare); for (final SourceSpecificContext libSource : libSources) { final SourceIdentifier libSourceIdentifier = requireNonNull(libSource.getRootIdentifier()); - libSourcesTable.put(libSourceIdentifier.getName(), libSourceIdentifier.getRevision(), libSource); + libSourcesTable.put(libSourceIdentifier.name(), + Optional.ofNullable(libSourceIdentifier.revision()), libSource); } final Set requiredLibs = new HashSet<>(); @@ -422,7 +427,7 @@ final class BuildGlobalContext extends NamespaceStorageSupport implements Regist } private void collectRequiredSourcesFromLib( - final TreeBasedTable, SourceSpecificContext> libSourcesTable, + final TreeBasedTable, SourceSpecificContext> libSourcesTable, final Set requiredLibs, final SourceSpecificContext source) { for (final SourceIdentifier requiredSource : source.getRequiredSources()) { final SourceSpecificContext libSource = getRequiredLibSource(requiredSource, libSourcesTable); @@ -433,14 +438,14 @@ final class BuildGlobalContext extends NamespaceStorageSupport implements Regist } private static SourceSpecificContext getRequiredLibSource(final SourceIdentifier requiredSource, - final TreeBasedTable, SourceSpecificContext> libSourcesTable) { - return requiredSource.getRevision().isPresent() - ? libSourcesTable.get(requiredSource.getName(), requiredSource.getRevision()) - : getLatestRevision(libSourcesTable.row(requiredSource.getName())); + final TreeBasedTable, SourceSpecificContext> libSourcesTable) { + final var revision = requiredSource.revision(); + return revision != null ? libSourcesTable.get(requiredSource.name(), Optional.of(revision)) + : getLatestRevision(libSourcesTable.row(requiredSource.name())); } - private static SourceSpecificContext getLatestRevision(final SortedMap, - SourceSpecificContext> sourceMap) { + private static SourceSpecificContext getLatestRevision( + final SortedMap, SourceSpecificContext> sourceMap) { return sourceMap != null && !sourceMap.isEmpty() ? sourceMap.get(sourceMap.lastKey()) : null; } diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/TextToIRTransformer.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/TextToIRTransformer.java index 0dd30ba444..06cdcde28c 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/TextToIRTransformer.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/TextToIRTransformer.java @@ -11,9 +11,8 @@ import com.google.common.annotations.Beta; import com.google.common.util.concurrent.Futures; import java.io.IOException; import org.eclipse.jdt.annotation.NonNull; -import org.opendaylight.yangtools.yang.common.Revision; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SchemaRepository; +import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceRegistry; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceTransformer; @@ -39,8 +38,7 @@ public final class TextToIRTransformer extends SchemaSourceTransformer imports = parseImports(submodule, source); @@ -271,7 +272,7 @@ public abstract class YangModelDependencyInfo { } private static StatementSourceReference getReference(final SourceIdentifier source, final IRStatement stmt) { - return ExplicitStatement.atPosition(source.getName(), stmt.startLine(), stmt.startColumn() + 1); + return ExplicitStatement.atPosition(source.name().getLocalName(), stmt.startLine(), stmt.startColumn() + 1); } /** @@ -295,10 +296,11 @@ public abstract class YangModelDependencyInfo { * Dependency information for submodule, also provides name for parent module. */ public static final class SubmoduleDependencyInfo extends YangModelDependencyInfo { - private final String belongsTo; + private final UnresolvedQName.Unqualified belongsTo; - private SubmoduleDependencyInfo(final String name, final String latestRevision, final String belongsTo, - final ImmutableSet imports, final ImmutableSet includes) { + private SubmoduleDependencyInfo(final String name, final String latestRevision, + final UnresolvedQName.Unqualified belongsTo, final ImmutableSet imports, + final ImmutableSet includes) { super(name, latestRevision, imports, includes); this.belongsTo = belongsTo; } @@ -308,7 +310,7 @@ public abstract class YangModelDependencyInfo { * * @return The module this info belongs to */ - public String getParentModule() { + public UnresolvedQName.Unqualified getParentModule() { return belongsTo; } @@ -325,16 +327,16 @@ public abstract class YangModelDependencyInfo { */ // FIXME: this is a rather nasty misuse of APIs :( private static final class ModuleImportImpl implements ModuleImport { - private final @NonNull String moduleName; + private final UnresolvedQName.@NonNull Unqualified moduleName; private final Revision revision; - ModuleImportImpl(final @NonNull String moduleName, final @Nullable Revision revision) { + ModuleImportImpl(final UnresolvedQName.@NonNull Unqualified moduleName, final @Nullable Revision revision) { this.moduleName = requireNonNull(moduleName, "Module name must not be null."); this.revision = revision; } @Override - public String getModuleName() { + public UnresolvedQName.Unqualified getModuleName() { return moduleName; } diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementSupport.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementSupport.java index 188ef4446a..f5beef4fd3 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementSupport.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementSupport.java @@ -106,7 +106,7 @@ public final class ImportStatementSupport final Mutable root = rootPrereq.resolve(ctx); // Version 1 sources must not import-by-revision Version 1.1 modules - if (importId.getRevision().isPresent() && root.yangVersion() == YangVersion.VERSION_1) { + if (importId.revision() != null && root.yangVersion() == YangVersion.VERSION_1) { final YangVersion importedVersion = importedModuleContext.yangVersion(); if (importedVersion != YangVersion.VERSION_1) { throw new YangVersionLinkageException(stmt, "Cannot import by revision version %s module %s", diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/RevisionImport.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/RevisionImport.java index 43f98daf19..f92094a878 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/RevisionImport.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/RevisionImport.java @@ -12,7 +12,6 @@ import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.f import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.firstAttributeOf; import java.util.Collection; -import java.util.Optional; import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; @@ -21,7 +20,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ImportEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ImportStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.parser.rfc7950.namespace.ModuleQNameToPrefix; import org.opendaylight.yangtools.yang.parser.spi.ModuleNamespace; @@ -52,12 +50,11 @@ final class RevisionImport { imported = importAction.requiresCtx(stmt, ModuleNamespace.class, NamespaceKeyCriterion.latestRevisionModule(moduleName), SOURCE_LINKAGE); } else { - imported = importAction.requiresCtx(stmt, ModuleNamespace.class, - RevisionSourceIdentifier.create(moduleName, Optional.of(revision)), SOURCE_LINKAGE); + imported = importAction.requiresCtx(stmt, ModuleNamespace.class, new SourceIdentifier(moduleName, revision), + SOURCE_LINKAGE); } - final Prerequisite> linkageTarget = importAction.mutatesCtx(stmt.getRoot(), - SOURCE_LINKAGE); + final Prerequisite> linkageTarget = importAction.mutatesCtx(stmt.getRoot(), SOURCE_LINKAGE); importAction.apply(new InferenceAction() { @Override @@ -89,9 +86,7 @@ final class RevisionImport { } static SourceIdentifier getImportedSourceIdentifier(final StmtContext stmt) { - final StmtContext revision = findFirstDeclaredSubstatement(stmt, - RevisionDateStatement.class); - return revision == null ? RevisionSourceIdentifier.create(stmt.argument(), Optional.empty()) - : RevisionSourceIdentifier.create(stmt.argument(), revision.argument()); + final var revision = findFirstDeclaredSubstatement(stmt, RevisionDateStatement.class); + return new SourceIdentifier(stmt.getArgument(), revision != null ? revision.getArgument() : null); } } diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BelongsToStatementSupport.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BelongsToStatementSupport.java index 0d171cd0cb..2d1427e3af 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BelongsToStatementSupport.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BelongsToStatementSupport.java @@ -11,7 +11,6 @@ import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.f import com.google.common.collect.ImmutableList; import java.util.Collection; -import java.util.Optional; import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference; @@ -20,7 +19,6 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatementDecorators; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; @@ -53,7 +51,7 @@ public final class BelongsToStatementSupport @Override public void onPreLinkageDeclared(final Mutable ctx) { - ctx.addRequiredSource(getSourceIdentifier(ctx)); + ctx.addRequiredSource(new SourceIdentifier(ctx.getArgument())); } @Override @@ -61,7 +59,7 @@ public final class BelongsToStatementSupport final Mutable belongsToCtx) { ModelActionBuilder belongsToAction = belongsToCtx.newInferenceAction(ModelProcessingPhase.SOURCE_LINKAGE); - final SourceIdentifier belongsToSourceIdentifier = getSourceIdentifier(belongsToCtx); + final SourceIdentifier belongsToSourceIdentifier = new SourceIdentifier(belongsToCtx.getArgument()); final Prerequisite> belongsToPrereq = belongsToAction.requiresCtx(belongsToCtx, ModuleNamespaceForBelongsTo.class, belongsToCtx.getArgument(), ModelProcessingPhase.SOURCE_LINKAGE); @@ -103,9 +101,4 @@ public final class BelongsToStatementSupport final ImmutableList> substatements) { return EffectiveStatements.createBelongsTo(stmt.declared(), substatements); } - - private static SourceIdentifier getSourceIdentifier( - final StmtContext belongsToCtx) { - return RevisionSourceIdentifier.create(belongsToCtx.getArgument(), Optional.empty()); - } } diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/IncludeStatementSupport.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/IncludeStatementSupport.java index 23e48654ee..92d86b7e2e 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/IncludeStatementSupport.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/IncludeStatementSupport.java @@ -13,7 +13,6 @@ import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.f import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableList; import java.util.Collection; -import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; @@ -25,7 +24,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.IncludeEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; +import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatementDecorators; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; @@ -75,10 +74,9 @@ public final class IncludeStatementSupport @Override public void onPreLinkageDeclared(final Mutable stmt) { - final StmtContext revision = findFirstDeclaredSubstatement(stmt, - RevisionDateStatement.class); - stmt.addRequiredSource(revision == null ? RevisionSourceIdentifier.create(stmt.argument(), Optional.empty()) - : RevisionSourceIdentifier.create(stmt.argument(), revision.argument())); + final var revision = findFirstDeclaredSubstatement(stmt, RevisionDateStatement.class); + stmt.addRequiredSource( + new SourceIdentifier(stmt.getArgument(), revision != null ? revision.getArgument() : null)); } @Override @@ -93,7 +91,7 @@ public final class IncludeStatementSupport NamespaceKeyCriterion.latestRevisionModule(submoduleName), SOURCE_LINKAGE); } else { requiresCtxPrerequisite = includeAction.requiresCtx(stmt, SubmoduleNamespace.class, - RevisionSourceIdentifier.create(submoduleName, Optional.of(revision.argument())), SOURCE_LINKAGE); + new SourceIdentifier(submoduleName, revision.argument()), SOURCE_LINKAGE); } includeAction.apply(new InferenceAction() { @@ -107,9 +105,9 @@ public final class IncludeStatementSupport "Cannot include a version %s submodule in a version %s module", subVersion, modVersion); } - stmt.addToNs(IncludedModuleContext.class, revision != null - ? RevisionSourceIdentifier.create(submoduleName, revision.argument()) - : RevisionSourceIdentifier.create(submoduleName, Optional.empty()), includedSubModuleContext); + stmt.addToNs(IncludedModuleContext.class, + new SourceIdentifier(submoduleName, revision != null ? revision.getArgument() : null), + includedSubModuleContext); stmt.addToNs(IncludedSubmoduleNameToModuleCtx.class, stmt.argument(), includedSubModuleContext); } diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementSupport.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementSupport.java index 90ea69b3d8..eecd41af64 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementSupport.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementSupport.java @@ -17,7 +17,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.common.QNameModule; @@ -35,7 +34,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement; import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatementDecorators; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; @@ -162,11 +160,11 @@ public final class ModuleStatementSupport stmt.addContext(PreLinkageModuleNamespace.class, moduleName, stmt); - final Optional revisionDate = StmtContextUtils.getLatestRevision(stmt.declaredSubstatements()); - final QNameModule qNameModule = QNameModule.create(moduleNs, revisionDate.orElse(null)).intern(); + final Revision revisionDate = StmtContextUtils.getLatestRevision(stmt.declaredSubstatements()).orElse(null); + final QNameModule qNameModule = QNameModule.create(moduleNs, revisionDate).intern(); stmt.addToNs(ModuleCtxToModuleQName.class, stmt, qNameModule); - stmt.setRootIdentifier(RevisionSourceIdentifier.create(stmt.getArgument().getLocalName(), revisionDate)); + stmt.setRootIdentifier(new SourceIdentifier(stmt.getArgument(), revisionDate)); } @Override @@ -175,8 +173,8 @@ public final class ModuleStatementSupport firstAttributeOf(stmt.declaredSubstatements(), NamespaceStatement.class), stmt, "Namespace of the module [%s] is missing", stmt.argument()); - final Optional revisionDate = StmtContextUtils.getLatestRevision(stmt.declaredSubstatements()); - final QNameModule qNameModule = QNameModule.create(moduleNs, revisionDate.orElse(null)).intern(); + final Revision revisionDate = StmtContextUtils.getLatestRevision(stmt.declaredSubstatements()).orElse(null); + final QNameModule qNameModule = QNameModule.create(moduleNs, revisionDate).intern(); final StmtContext possibleDuplicateModule = stmt.getFromNamespace(NamespaceToModule.class, qNameModule); if (possibleDuplicateModule != null && possibleDuplicateModule != stmt) { @@ -185,7 +183,7 @@ public final class ModuleStatementSupport } final Unqualified moduleName = stmt.getArgument(); - final SourceIdentifier moduleIdentifier = RevisionSourceIdentifier.create(moduleName, revisionDate); + final SourceIdentifier moduleIdentifier = new SourceIdentifier(moduleName, revisionDate); stmt.addContext(ModuleNamespace.class, moduleIdentifier, stmt); stmt.addContext(ModuleNamespaceForBelongsTo.class, moduleName, stmt); diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementSupport.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementSupport.java index ea05675da1..ab6e728cca 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementSupport.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementSupport.java @@ -22,7 +22,6 @@ import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatementDecorators; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; @@ -124,14 +123,14 @@ public final class SubmoduleStatementSupport @Override public void onPreLinkageDeclared(final Mutable stmt) { - stmt.setRootIdentifier(RevisionSourceIdentifier.create(stmt.getRawArgument(), - StmtContextUtils.getLatestRevision(stmt.declaredSubstatements()))); + stmt.setRootIdentifier(new SourceIdentifier(stmt.getArgument(), + StmtContextUtils.getLatestRevision(stmt.declaredSubstatements()).orElse(null))); } @Override public void onLinkageDeclared(final Mutable stmt) { - final SourceIdentifier submoduleIdentifier = RevisionSourceIdentifier.create(stmt.getRawArgument(), - StmtContextUtils.getLatestRevision(stmt.declaredSubstatements())); + final SourceIdentifier submoduleIdentifier = new SourceIdentifier(stmt.getArgument(), + StmtContextUtils.getLatestRevision(stmt.declaredSubstatements()).orElse(null)); final StmtContext possibleDuplicateSubmodule = stmt.getFromNamespace(SubmoduleNamespace.class, submoduleIdentifier); diff --git a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug8597Test.java b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug8597Test.java index 40ca85b095..64345368a8 100644 --- a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug8597Test.java +++ b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug8597Test.java @@ -20,7 +20,7 @@ public class Bug8597Test extends AbstractYangTest { public void test() throws Exception { final var foo = assertEffectiveModelDir("/bugs/bug8597").findModule("foo").orElseThrow(); for (ModuleImport moduleImport : foo.getImports()) { - switch (moduleImport.getModuleName()) { + switch (moduleImport.getModuleName().getLocalName()) { case "bar": assertEquals(Revision.ofNullable("1970-01-01"), moduleImport.getRevision()); assertEquals(Optional.of("bar-ref"), moduleImport.getReference()); diff --git a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug9005Test.java b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug9005Test.java index 828722729b..61a66f18f8 100644 --- a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug9005Test.java +++ b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug9005Test.java @@ -12,6 +12,7 @@ import static org.junit.Assert.assertEquals; import java.util.Collection; import org.junit.Test; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.ModuleImport; import org.opendaylight.yangtools.yang.model.api.Submodule; @@ -26,7 +27,7 @@ public class Bug9005Test extends AbstractYangTest { final Collection imports = foo.getImports(); assertEquals(1, imports.size()); final ModuleImport imp1 = imports.iterator().next(); - assertEquals("bar-2", imp1.getModuleName()); + assertEquals(Unqualified.of("bar-2"), imp1.getModuleName()); assertEquals("bar", imp1.getPrefix()); assertEquals(Revision.ofNullable("2000-01-02"), imp1.getRevision()); @@ -37,7 +38,7 @@ public class Bug9005Test extends AbstractYangTest { assertEquals(1, subImports.size()); final ModuleImport subImp1 = subImports.iterator().next(); - assertEquals("bar-1", subImp1.getModuleName()); + assertEquals(Unqualified.of("bar-1"), subImp1.getModuleName()); assertEquals("bar", subImp1.getPrefix()); assertEquals(Revision.ofNullable("2000-01-01"), subImp1.getRevision()); } diff --git a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveModuleTest.java b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveModuleTest.java index 3647c4579f..ec05aaa253 100644 --- a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveModuleTest.java +++ b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveModuleTest.java @@ -16,6 +16,7 @@ import org.junit.Test; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.common.YangVersion; import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode; @@ -64,7 +65,7 @@ public class EffectiveModuleTest { assertEquals(1, imports.size()); final ModuleImport importStmt = imports.iterator().next(); assertNotNull(importStmt); - assertEquals("imported", importStmt.getModuleName()); + assertEquals(Unqualified.of("imported"), importStmt.getModuleName()); assertEquals(Optional.of(REVISION), importStmt.getRevision()); assertEquals("imp-pref", importStmt.getPrefix()); diff --git a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/MoreRevisionsTest.java b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/MoreRevisionsTest.java index aab46a403f..343265cbd2 100644 --- a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/MoreRevisionsTest.java +++ b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/MoreRevisionsTest.java @@ -19,6 +19,7 @@ import org.junit.Test; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -142,7 +143,7 @@ public class MoreRevisionsTest extends AbstractYangTest { Collection imports = interfacesModule20121115.getImports(); assertEquals(1, imports.size()); ModuleImport interfacesImport = imports.iterator().next(); - assertEquals("ietf-yang-types", interfacesImport.getModuleName()); + assertEquals(Unqualified.of("ietf-yang-types"), interfacesImport.getModuleName()); assertEquals(Optional.of(rev20100924), interfacesImport.getRevision()); } @@ -211,7 +212,7 @@ public class MoreRevisionsTest extends AbstractYangTest { Collection imports = interfacesModule20121115.getImports(); assertEquals(1, imports.size()); ModuleImport interfacesImport = imports.iterator().next(); - assertEquals("ietf-yang-types", interfacesImport.getModuleName()); + assertEquals(Unqualified.of("ietf-yang-types"), interfacesImport.getModuleName()); assertEquals(Optional.of(rev20100924), interfacesImport.getRevision()); } @@ -230,7 +231,7 @@ public class MoreRevisionsTest extends AbstractYangTest { Collection imports = monitoringModule19700101.getImports(); assertEquals(1, imports.size()); ModuleImport monitoringImport = imports.iterator().next(); - assertEquals("ietf-yang-types", monitoringImport.getModuleName()); + assertEquals(Unqualified.of("ietf-yang-types"), monitoringImport.getModuleName()); assertEquals(Optional.of(rev20130715), monitoringImport.getRevision()); } diff --git a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/StmtTestUtils.java b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/StmtTestUtils.java index 1b037d9441..88d40a527c 100644 --- a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/StmtTestUtils.java +++ b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/StmtTestUtils.java @@ -177,7 +177,8 @@ public final class StmtTestUtils { } } - return context.findModule(requestedModuleImport.getModuleName(), requestedModuleImport.getRevision()) + return context.findModule(requestedModuleImport.getModuleName().getLocalName(), + requestedModuleImport.getRevision()) .orElse(null); } diff --git a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YangParserTest.java b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YangParserTest.java index e3bf84065b..86c91d030c 100644 --- a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YangParserTest.java +++ b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YangParserTest.java @@ -29,6 +29,7 @@ import java.util.Set; import org.junit.Test; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.common.YangVersion; import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode; @@ -75,11 +76,11 @@ public class YangParserTest extends AbstractModelTest { assertEquals(2, imports.size()); final ModuleImport import2 = TestUtils.findImport(imports, "br"); - assertEquals("bar", import2.getModuleName()); + assertEquals(Unqualified.of("bar"), import2.getModuleName()); assertEquals(Revision.ofNullable("2013-07-03"), import2.getRevision()); final ModuleImport import3 = TestUtils.findImport(imports, "bz"); - assertEquals("baz", import3.getModuleName()); + assertEquals(Unqualified.of("baz"), import3.getModuleName()); assertEquals(Revision.ofNullable("2013-02-27"), import3.getRevision()); assertEquals(Optional.of("opendaylight"), FOO.getOrganization()); diff --git a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/yin/YinFileImportStmtTest.java b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/yin/YinFileImportStmtTest.java index 62fb46f964..e84aa6b8b8 100644 --- a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/yin/YinFileImportStmtTest.java +++ b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/yin/YinFileImportStmtTest.java @@ -16,6 +16,7 @@ import static org.junit.Assert.assertNotNull; import java.util.Collection; import java.util.Iterator; import org.junit.Test; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.ModuleImport; @@ -32,11 +33,14 @@ public class YinFileImportStmtTest extends AbstractYinModulesTest { Iterator importsIterator = imports.iterator(); ModuleImport moduleImport = importsIterator.next(); - assertThat(moduleImport.getModuleName(), anyOf(is("ietf-yang-types"), is("ietf-inet-types"))); + final var nameMatch = anyOf(is(Unqualified.of("ietf-yang-types")), + is(Unqualified.of("ietf-inet-types"))); + + assertThat(moduleImport.getModuleName(), nameMatch); assertThat(moduleImport.getPrefix(), anyOf(is("yang"), is("inet"))); moduleImport = importsIterator.next(); - assertThat(moduleImport.getModuleName(), anyOf(is("ietf-yang-types"), is("ietf-inet-types"))); + assertThat(moduleImport.getModuleName(), nameMatch); assertThat(moduleImport.getPrefix(), anyOf(is("yang"), is("inet"))); } } diff --git a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/NamespaceKeyCriterion.java b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/NamespaceKeyCriterion.java index 307fe3d62f..fe4b755b92 100644 --- a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/NamespaceKeyCriterion.java +++ b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/NamespaceKeyCriterion.java @@ -35,12 +35,12 @@ public abstract class NamespaceKeyCriterion { @Override public boolean match(final SourceIdentifier key) { - return moduleName.getLocalName().equals(key.getName()); + return moduleName.equals(key.name()); } @Override public SourceIdentifier select(final SourceIdentifier first, final SourceIdentifier second) { - return Revision.compare(first.getRevision(), second.getRevision()) >= 0 ? first : second; + return Revision.compare(first.revision(), second.revision()) >= 0 ? first : second; } @Override diff --git a/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/Util.java b/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/Util.java index 07cf2e2ccd..0b645f6c36 100644 --- a/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/Util.java +++ b/plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/Util.java @@ -24,8 +24,8 @@ import org.apache.maven.model.Dependency; import org.apache.maven.model.Plugin; import org.apache.maven.project.MavenProject; import org.apache.maven.repository.RepositorySystem; +import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.model.api.ModuleLike; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -145,6 +145,6 @@ final class Util { } static SourceIdentifier moduleToIdentifier(final ModuleLike module) { - return RevisionSourceIdentifier.create(module.getName(), module.getRevision()); + return new SourceIdentifier(Unqualified.of(module.getName()), module.getRevision().orElse(null)); } } diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/RevisionSourceIdentifier.java b/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/RevisionSourceIdentifier.java deleted file mode 100644 index 02869cbc4e..0000000000 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/RevisionSourceIdentifier.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.yangtools.yang.model.repo.api; - -import com.google.common.annotations.Beta; -import java.util.Objects; -import java.util.Optional; -import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.jdt.annotation.Nullable; -import org.opendaylight.yangtools.yang.common.Revision; -import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified; - -/** - * YANG Schema revision source identifier. - * - *

- * Simple transfer object represents revision identifier of source for YANG schema (module or submodule), which consists - * of - *

    - *
  • YANG schema name ({@link #getName()} - *
  • Module revision (optional) ({link {@link #getRevision()}) - *
- * - *

- * Revision source identifier is designated to be carry only necessary information to look-up YANG model source - * and to be used by various SchemaSourceProviders. - * - *

- * Note:On source retrieval layer it is impossible to distinguish between YANG module and/or submodule unless - * source is present. - * - *

- * (For further reference see: http://tools.ietf.org/html/rfc6020#section-5.2 - * and http://tools.ietf.org/html/rfc6022#section-3.1 ). - */ -@Beta -public final class RevisionSourceIdentifier extends SourceIdentifier { - private static final long serialVersionUID = 1L; - - /** - * Creates new YANG Schema revision source identifier for sources without a revision. - * - * @param name Name of schema - */ - RevisionSourceIdentifier(final String name) { - super(name); - } - - /** - * Creates new YANG Schema revision source identifier. - * - * @param name Name of schema - * @param revision Revision of source, may be null - */ - RevisionSourceIdentifier(final String name, final @Nullable Revision revision) { - super(name, revision); - } - - /** - * Creates new YANG Schema revision source identifier. - * - * @param name Name of schema - * @param formattedRevision Revision of source, potentially not present - */ - private RevisionSourceIdentifier(final String name, final Optional revision) { - super(name, revision); - } - - /** - * Creates new YANG Schema revision source identifier. - * - * @param moduleName Name of schema - * @param revision Revision of source in format YYYY-mm-dd. If not present, default value will be used. - * @return A RevisionSourceIdentifier - */ - public static @NonNull RevisionSourceIdentifier create(final String moduleName, final Optional revision) { - return new RevisionSourceIdentifier(moduleName, revision); - } - - public static @NonNull RevisionSourceIdentifier create(final Unqualified moduleName, - final Optional revision) { - return create(moduleName.getLocalName(), revision); - } - - /** - * Creates new YANG Schema revision source identifier. - * - * @param moduleName Name of schema - * @param revision Revision of source, may be null - * @return A RevisionSourceIdentifier - */ - public static @NonNull RevisionSourceIdentifier create(final String moduleName, final @Nullable Revision revision) { - return new RevisionSourceIdentifier(moduleName, revision); - } - - public static @NonNull RevisionSourceIdentifier create(final Unqualified moduleName, - final @Nullable Revision revision) { - return create(moduleName.getLocalName(), revision); - } - - /** - * Creates new YANG Schema revision source identifier for sources without - * a revision. - * - * @param moduleName Name of schema - * @return A RevisionSourceIdentifier - */ - public static @NonNull RevisionSourceIdentifier create(final String moduleName) { - return new RevisionSourceIdentifier(moduleName); - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + Objects.hashCode(getName()); - result = prime * result + Objects.hashCode(getRevision()); - return result; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof RevisionSourceIdentifier other)) { - return false; - } - return Objects.equals(getName(), other.getName()) && Objects.equals(getRevision(), other.getRevision()); - } - - @Override - public String toString() { - final StringBuilder sb = new StringBuilder("RevisionSourceIdentifier [name="); - sb.append(getName()); - - final Optional rev = getRevision(); - if (rev.isPresent()) { - sb.append('@').append(rev.get()); - } - return sb.append(']').toString(); - } -} diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SourceIdentifier.java b/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SourceIdentifier.java index 274012874c..8b5411cd34 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SourceIdentifier.java +++ b/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SourceIdentifier.java @@ -9,15 +9,11 @@ package org.opendaylight.yangtools.yang.model.repo.api; import static java.util.Objects.requireNonNull; -import com.google.common.annotations.Beta; -import com.google.common.collect.Interner; -import com.google.common.collect.Interners; -import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.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.UnresolvedQName.Unqualified; import org.opendaylight.yangtools.yang.common.YangConstants; /** @@ -28,69 +24,50 @@ import org.opendaylight.yangtools.yang.common.YangConstants; * For further reference see: RFC6020 * and RFC6022. */ -@Beta -public abstract class SourceIdentifier implements Identifier, Immutable { - private static final Interner INTERNER = Interners.newWeakInterner(); - private static final long serialVersionUID = 2L; - - private final @Nullable Revision revision; - private final @NonNull String name; +public record SourceIdentifier(@NonNull Unqualified name, @Nullable Revision revision) implements Identifier { + private static final long serialVersionUID = 3L; /** - * Creates new YANG Schema source identifier for sources without revision. + * Creates new YANG Schema source identifier for sources with or without a revision. * * @param name Name of schema + * @param revision Revision of schema + * @throws NullPointerException if {@code name} is null */ - SourceIdentifier(final String name) { - this(name, (Revision) null); + public SourceIdentifier { + requireNonNull(name); } /** - * Creates new YANG Schema source identifier. + * Creates new YANG Schema source identifier for sources without a revision. * * @param name Name of schema - * @param revision Revision of source, may be null + * @throws NullPointerException if {@code name} is null */ - SourceIdentifier(final String name, final @Nullable Revision revision) { - this.name = requireNonNull(name); - this.revision = revision; + public SourceIdentifier(final @NonNull Unqualified name) { + this(name, null); } /** - * Creates new YANG Schema source identifier. + * Creates new YANG Schema source identifier for sources without a revision. * * @param name Name of schema - * @param revision Revision of source, possibly not present - */ - SourceIdentifier(final String name, final Optional revision) { - this(name, revision.orElse(null)); - } - - /** - * Return an interned reference to an equivalent SourceIdentifier. - * - * @return Interned reference, or this object if it was interned. + * @throws NullPointerException if {@code name} is null + * @throws IllegalArgumentException if {@code name} is not a valid YANG identifier */ - public @NonNull SourceIdentifier intern() { - return INTERNER.intern(this); + public SourceIdentifier(final @NonNull String name) { + this(Unqualified.of(name)); } /** - * Returns model name. + * Creates new YANG Schema source identifier for sources with or without a revision. * - * @return model name - */ - public @NonNull String getName() { - return name; - } - - /** - * Returns revision of source or null if revision was not supplied. - * - * @return revision of source or null if revision was not supplied. + * @param name Name of schema + * @throws NullPointerException if {@code name} is null + * @throws IllegalArgumentException if {@code name} is not a valid YANG identifier */ - public Optional getRevision() { - return Optional.ofNullable(revision); + public SourceIdentifier(final @NonNull String name, final @Nullable String revision) { + this(Unqualified.of(name), revision != null ? Revision.of(revision) : null); } /** @@ -105,7 +82,16 @@ public abstract class SourceIdentifier implements Identifier, Immutable { * @return Filename for this source identifier. */ public @NonNull String toYangFilename() { - return toYangFileName(name, Optional.ofNullable(revision)); + return toYangFileName(name.getLocalName(), revision); + } + + @Override + public String toString() { + final var sb = new StringBuilder("SourceIdentifier [").append(name.getLocalName()); + if (revision != null) { + sb.append('@').append(revision); + } + return sb.append(']').toString(); } /** @@ -122,10 +108,10 @@ public abstract class SourceIdentifier implements Identifier, Immutable { * @param revision optional revision * @return Filename for this source identifier. */ - public static @NonNull String toYangFileName(final String moduleName, final Optional revision) { + public static @NonNull String toYangFileName(final @NonNull String moduleName, final @Nullable Revision revision) { final StringBuilder sb = new StringBuilder(moduleName); - if (revision.isPresent()) { - sb.append('@').append(revision.orElseThrow()); + if (revision != null) { + sb.append('@').append(revision); } return sb.append(YangConstants.RFC6020_YANG_FILE_EXTENSION).toString(); } diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangTextSchemaSource.java b/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangTextSchemaSource.java index 40a2ae5ccd..8cd7de30be 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangTextSchemaSource.java +++ b/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangTextSchemaSource.java @@ -23,7 +23,6 @@ import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import org.eclipse.jdt.annotation.NonNull; -import org.opendaylight.yangtools.yang.common.Revision; /** * YANG text schema source representation. Exposes an RFC6020 or RFC7950 text representation as an {@link InputStream}. @@ -42,7 +41,7 @@ public abstract class YangTextSchemaSource extends ByteSource implements YangSch final String baseName = name.substring(0, name.length() - RFC6020_YANG_FILE_EXTENSION.length()); final var parsed = parseFilename(baseName); - return RevisionSourceIdentifier.create(parsed.getKey(), Revision.ofNullable(parsed.getValue())); + return new SourceIdentifier(parsed.getKey(), parsed.getValue()); } /** diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinDomSchemaSource.java b/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinDomSchemaSource.java index bfcae8300e..bac0786482 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinDomSchemaSource.java +++ b/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinDomSchemaSource.java @@ -25,7 +25,6 @@ import javax.xml.transform.dom.DOMSource; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; 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; @@ -89,8 +88,7 @@ public abstract class YinDomSchemaSource implements YinXmlSchemaSource { final Attr dateAttr = revisionStmt.getAttributeNode(REVISION_ARG); checkArgument(dateAttr != null, "No revision statement argument found in %s", revisionStmt); - final SourceIdentifier parsedId = RevisionSourceIdentifier.create(nameAttr.getValue(), - Revision.of(dateAttr.getValue())); + final SourceIdentifier parsedId = new SourceIdentifier(nameAttr.getValue(), dateAttr.getValue()); final SourceIdentifier id; if (!parsedId.equals(identifier)) { LOG.debug("Changed identifier from {} to {}", identifier, parsedId); diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinTextSchemaSource.java b/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinTextSchemaSource.java index eb89a17b64..e65d828bb7 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinTextSchemaSource.java +++ b/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinTextSchemaSource.java @@ -19,7 +19,6 @@ import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; import org.eclipse.jdt.annotation.NonNull; -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; @@ -52,7 +51,7 @@ public abstract class YinTextSchemaSource extends ByteSource implements YinSchem } final var parsed = YangNames.parseFilename(baseName); - return RevisionSourceIdentifier.create(parsed.getKey(), Revision.ofNullable(parsed.getValue())); + return new SourceIdentifier(parsed.getKey(), parsed.getValue()); } @Override diff --git a/yang/yang-repo-fs/src/main/java/org/opendaylight/yangtools/yang/model/repo/fs/FilesystemSchemaSourceCache.java b/yang/yang-repo-fs/src/main/java/org/opendaylight/yangtools/yang/model/repo/fs/FilesystemSchemaSourceCache.java index 128be91f42..ab48b92abd 100644 --- a/yang/yang-repo-fs/src/main/java/org/opendaylight/yangtools/yang/model/repo/fs/FilesystemSchemaSourceCache.java +++ b/yang/yang-repo-fs/src/main/java/org/opendaylight/yangtools/yang/model/repo/fs/FilesystemSchemaSourceCache.java @@ -35,7 +35,6 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.model.repo.api.MissingSchemaSourceException; -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; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; @@ -141,9 +140,9 @@ public final class FilesystemSchemaSourceCache rev = identifier.getRevision(); + final Revision rev = identifier.revision(); final File file; - if (rev.isEmpty()) { + if (rev == null) { // FIXME: this does not look right file = findFileWithNewestRev(identifier, storageDirectory); } else { @@ -152,11 +151,9 @@ public final class FilesystemSchemaSourceCache immediateFluentFuture( new YangTextSchemaSource(runningId) { diff --git a/yang/yang-repo-fs/src/test/java/org/opendaylight/yangtools/yang/model/repo/fs/FilesystemSchemaSourceCacheTest.java b/yang/yang-repo-fs/src/test/java/org/opendaylight/yangtools/yang/model/repo/fs/FilesystemSchemaSourceCacheTest.java index 91f27b6c8d..8a20352b3b 100644 --- a/yang/yang-repo-fs/src/test/java/org/opendaylight/yangtools/yang/model/repo/fs/FilesystemSchemaSourceCacheTest.java +++ b/yang/yang-repo-fs/src/test/java/org/opendaylight/yangtools/yang/model/repo/fs/FilesystemSchemaSourceCacheTest.java @@ -40,8 +40,6 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.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.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.model.repo.spi.PotentialSchemaSource; @@ -60,15 +58,15 @@ public class FilesystemSchemaSourceCacheTest { @Before public void setUp() throws Exception { - this.storageDir = Files.createTempDir(); - doReturn(this.registration).when(this.registry).registerSchemaSource(any(SchemaSourceProvider.class), + storageDir = Files.createTempDir(); + doReturn(registration).when(registry).registerSchemaSource(any(SchemaSourceProvider.class), any(PotentialSchemaSource.class)); } @Test public void testCacheAndRestore() throws Exception { final FilesystemSchemaSourceCache cache - = new FilesystemSchemaSourceCache<>(this.registry, YangTextSchemaSource.class, this.storageDir); + = new FilesystemSchemaSourceCache<>(registry, YangTextSchemaSource.class, storageDir); final String content = "content1"; final YangTextSchemaSource source = new TestingYangSource("test", "2012-12-12", content); @@ -89,13 +87,13 @@ public class FilesystemSchemaSourceCacheTest { assertThat(Files.asCharSource(storedFiles.get(1), StandardCharsets.UTF_8).read(), either(containsString(content)).or(containsString(content2))); - verify(this.registry, times(2)).registerSchemaSource(any(SchemaSourceProvider.class), + verify(registry, times(2)).registerSchemaSource(any(SchemaSourceProvider.class), any(PotentialSchemaSource.class)); // Create new cache from stored sources - new FilesystemSchemaSourceCache<>(this.registry, YangTextSchemaSource.class, this.storageDir); + new FilesystemSchemaSourceCache<>(registry, YangTextSchemaSource.class, storageDir); - verify(this.registry, times(4)).registerSchemaSource(any(SchemaSourceProvider.class), + verify(registry, times(4)).registerSchemaSource(any(SchemaSourceProvider.class), any(PotentialSchemaSource.class)); final List storedFilesAfterNewCache = getFilesFromCache(); @@ -109,7 +107,7 @@ public class FilesystemSchemaSourceCacheTest { @Test public void testCacheDuplicate() throws Exception { final FilesystemSchemaSourceCache cache - = new FilesystemSchemaSourceCache<>(this.registry, YangTextSchemaSource.class, this.storageDir); + = new FilesystemSchemaSourceCache<>(registry, YangTextSchemaSource.class, storageDir); final String content = "content1"; final YangTextSchemaSource source = new TestingYangSource("test", null, content); @@ -119,13 +117,13 @@ public class FilesystemSchemaSourceCacheTest { final List storedFiles = getFilesFromCache(); assertEquals(1, storedFiles.size()); - verify(this.registry).registerSchemaSource(any(SchemaSourceProvider.class), any(PotentialSchemaSource.class)); + verify(registry).registerSchemaSource(any(SchemaSourceProvider.class), any(PotentialSchemaSource.class)); } @Test public void testCacheMultipleRevisions() throws Exception { final FilesystemSchemaSourceCache cache - = new FilesystemSchemaSourceCache<>(this.registry, YangTextSchemaSource.class, this.storageDir); + = new FilesystemSchemaSourceCache<>(registry, YangTextSchemaSource.class, storageDir); final String content = "content1"; final YangTextSchemaSource source = new TestingYangSource("test", null, content); @@ -142,15 +140,15 @@ public class FilesystemSchemaSourceCacheTest { assertThat(filesToFilenamesWithoutRevision(storedFiles), both(hasItem("test")) .and(hasItem("test@2012-12-12")).and(hasItem("test@2013-12-12"))); - verify(this.registry, times(3)).registerSchemaSource(any(SchemaSourceProvider.class), + verify(registry, times(3)).registerSchemaSource(any(SchemaSourceProvider.class), any(PotentialSchemaSource.class)); } @Test public void sourceIdToFileEmptyRevWithEmptyDir() { - final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("test"); - final File sourceIdToFile = FilesystemSchemaSourceCache.sourceIdToFile(sourceIdentifier, this.storageDir); - final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>(this.registry, + final SourceIdentifier sourceIdentifier = new SourceIdentifier("test"); + final File sourceIdToFile = FilesystemSchemaSourceCache.sourceIdToFile(sourceIdentifier, storageDir); + final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>(registry, YangTextSchemaSource.class, sourceIdToFile); assertNotNull(cache); final List storedFiles = Arrays.asList(sourceIdToFile.listFiles()); @@ -159,46 +157,46 @@ public class FilesystemSchemaSourceCacheTest { @Test public void sourceIdToFileEmptyRevWithOneItemInDir() { - final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>(this.registry, - YangTextSchemaSource.class, this.storageDir); + final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>(registry, + YangTextSchemaSource.class, storageDir); final String content = "content1"; final YangTextSchemaSource source = new TestingYangSource("test", "2013-12-12", content); cache.offer(source); - final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("test"); + final SourceIdentifier sourceIdentifier = new SourceIdentifier("test"); final File sourceIdToFile = FilesystemSchemaSourceCache.sourceIdToFile(sourceIdentifier, - this.storageDir); + storageDir); assertNotNull(sourceIdToFile); - final List storedFiles = Arrays.asList(this.storageDir.listFiles()); + final List storedFiles = Arrays.asList(storageDir.listFiles()); assertEquals(1, storedFiles.size()); } @Test public void sourceIdToFileEmptyRevWithMoreItemsInDir() { - final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>(this.registry, - YangTextSchemaSource.class, this.storageDir); + final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>(registry, + YangTextSchemaSource.class, storageDir); final String content = "content1"; final YangTextSchemaSource source = new TestingYangSource("test", "2012-12-12", content); final YangTextSchemaSource source2 = new TestingYangSource("test", "2013-12-12", content); cache.offer(source); cache.offer(source2); - final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("test"); - final File sourceIdToFile = FilesystemSchemaSourceCache.sourceIdToFile(sourceIdentifier, this.storageDir); + final SourceIdentifier sourceIdentifier = new SourceIdentifier("test"); + final File sourceIdToFile = FilesystemSchemaSourceCache.sourceIdToFile(sourceIdentifier, storageDir); assertNotNull(sourceIdToFile); - final List storedFiles = Arrays.asList(this.storageDir.listFiles()); + final List storedFiles = Arrays.asList(storageDir.listFiles()); assertEquals(2, storedFiles.size()); } @Test public void test() throws Exception { - final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>(this.registry, - YangTextSchemaSource.class, this.storageDir); + final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>(registry, + YangTextSchemaSource.class, storageDir); final String content = "content1"; final YangTextSchemaSource source = new TestingYangSource("test", "2013-12-12", content); cache.offer(source); - final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("test", Revision.of("2013-12-12")); + final SourceIdentifier sourceIdentifier = new SourceIdentifier("test", "2013-12-12"); final ListenableFuture checked = cache.getSource(sourceIdentifier); assertNotNull(checked); final YangTextSchemaSource checkedGet = checked.get(); @@ -209,26 +207,26 @@ public class FilesystemSchemaSourceCacheTest { @Test public void test1() throws Exception { - final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>(this.registry, - YangTextSchemaSource.class, this.storageDir); + final FilesystemSchemaSourceCache cache = new FilesystemSchemaSourceCache<>(registry, + YangTextSchemaSource.class, storageDir); final String content = "content1"; final YangTextSchemaSource source = new TestingYangSource("test", "2013-12-12", content); cache.offer(source); - final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("test1", Revision.of("2012-12-12")); + final SourceIdentifier sourceIdentifier = new SourceIdentifier("test1", "2012-12-12"); final ListenableFuture checked = cache.getSource(sourceIdentifier); assertNotNull(checked); assertThrows(ExecutionException.class, () -> checked.get()); } private List getFilesFromCache() { - return Arrays.asList(this.storageDir.listFiles()); + return Arrays.asList(storageDir.listFiles()); } - private class TestingYangSource extends YangTextSchemaSource { + private static class TestingYangSource extends YangTextSchemaSource { private final String content; TestingYangSource(final String name, final String revision, final String content) { - super(RevisionSourceIdentifier.create(name, Revision.ofNullable(revision))); + super(new SourceIdentifier(name, revision)); this.content = content; } @@ -239,7 +237,7 @@ public class FilesystemSchemaSourceCacheTest { @Override public InputStream openStream() throws IOException { - return new ByteArrayInputStream(this.content.getBytes(StandardCharsets.UTF_8)); + return new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8)); } @Override diff --git a/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/GuavaSchemaSourceCacheTest.java b/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/GuavaSchemaSourceCacheTest.java index 3e2c637c2b..72cb5b5505 100644 --- a/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/GuavaSchemaSourceCacheTest.java +++ b/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/GuavaSchemaSourceCacheTest.java @@ -26,8 +26,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.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.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.YangSchemaSourceRepresentation; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; @@ -70,7 +69,7 @@ public class GuavaSchemaSourceCacheTest { final String content = "content"; final YangTextSchemaSource source = new TestingYangSource("test", "2012-12-12", content); cache.offer(source); - final var sourceIdentifier = RevisionSourceIdentifier.create("test", Revision.of("2012-12-12")); + final var sourceIdentifier = new SourceIdentifier("test", "2012-12-12"); final var checkedSource = cache .getSource(sourceIdentifier); assertNotNull(checkedSource); final var yangSchemaSourceRepresentation = checkedSource.get(); @@ -82,7 +81,7 @@ public class GuavaSchemaSourceCacheTest { @Test public void inMemorySchemaSourceCacheNullGetSourcestest() throws Exception { try (var cache = GuavaSchemaSourceCache.createSoftCache(registry, REPRESENTATION)) { - final var sourceIdentifier = RevisionSourceIdentifier.create("test", Revision.of("2012-12-12")); + final var sourceIdentifier = new SourceIdentifier("test", "2012-12-12"); final var checkedSource = cache.getSource(sourceIdentifier); assertNotNull(checkedSource); assertThrows(ExecutionException.class, () -> checkedSource.get()); @@ -98,7 +97,7 @@ public class GuavaSchemaSourceCacheTest { cache1.offer(source); cache2.offer(source); - final var sourceIdentifier = RevisionSourceIdentifier.create("test", Revision.of("2012-12-12")); + final var sourceIdentifier = new SourceIdentifier("test", "2012-12-12"); final var checkedSource = cache1.getSource(sourceIdentifier); final var checkedSource2 = cache2.getSource(sourceIdentifier); assertNotNull(checkedSource); @@ -113,7 +112,7 @@ public class GuavaSchemaSourceCacheTest { private final String content; TestingYangSource(final String name, final String revision, final String content) { - super(RevisionSourceIdentifier.create(name, Revision.ofNullable(revision))); + super(new SourceIdentifier(name, revision)); this.content = content; } diff --git a/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/PotentialSchemaSourceTest.java b/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/PotentialSchemaSourceTest.java index 951a8842ac..89a7d1f147 100644 --- a/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/PotentialSchemaSourceTest.java +++ b/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/PotentialSchemaSourceTest.java @@ -16,7 +16,6 @@ import static org.junit.Assert.assertTrue; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; @@ -27,8 +26,7 @@ public class PotentialSchemaSourceTest { } - @Mock - public SourceIdentifier sourceIdentifier; + public final SourceIdentifier sourceIdentifier = new SourceIdentifier("foo"); @SuppressWarnings("exports") public PotentialSchemaSource source; @SuppressWarnings("exports") diff --git a/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/SchemaSourceTransformerTest.java b/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/SchemaSourceTransformerTest.java index f852cd17cc..217f34eeeb 100644 --- a/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/SchemaSourceTransformerTest.java +++ b/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/SchemaSourceTransformerTest.java @@ -21,7 +21,6 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import org.opendaylight.yangtools.yang.model.repo.api.EffectiveModelContextFactory; -import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SchemaContextFactoryConfiguration; import org.opendaylight.yangtools.yang.model.repo.api.SchemaRepository; import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; @@ -48,10 +47,10 @@ public class SchemaSourceTransformerTest { @Test public void schemaSourceTransformerTest() { - this.schema = new SchemaSourceTransformer<>( - this.provider, SchemaSourceTransformerTest.SRC_CLASS, this.consumer, - SchemaSourceTransformerTest.DST_CLASS, this.function); - assertNotNull(this.schema); + schema = new SchemaSourceTransformer<>( + provider, SchemaSourceTransformerTest.SRC_CLASS, consumer, + SchemaSourceTransformerTest.DST_CLASS, function); + assertNotNull(schema); } @Test @@ -59,12 +58,12 @@ public class SchemaSourceTransformerTest { final Provider p = new Provider(); final Registrator reg = new Registrator(p, SchemaSourceTransformerTest.SRC_CLASS, PotentialSchemaSource.Costs.IMMEDIATE); - final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("source"); + final SourceIdentifier sourceIdentifier = new SourceIdentifier("source"); reg.register(sourceIdentifier); - this.schema = new SchemaSourceTransformer<>(p, - SchemaSourceTransformerTest.SRC_CLASS, this.consumer, SchemaSourceTransformerTest.DST_CLASS, - this.function); - final SchemaSourceProvider prov = this.schema; + schema = new SchemaSourceTransformer<>(p, + SchemaSourceTransformerTest.SRC_CLASS, consumer, SchemaSourceTransformerTest.DST_CLASS, + function); + final SchemaSourceProvider prov = schema; final Future source = prov.getSource(sourceIdentifier); assertNotNull(source); source.cancel(true); @@ -73,7 +72,7 @@ public class SchemaSourceTransformerTest { @Test public void schemaSourceRegAndUnregSchemaSourceTest() { - final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("source"); + final SourceIdentifier sourceIdentifier = new SourceIdentifier("source"); final Foo foo = new Foo<>(sourceIdentifier, SchemaSourceTransformerTest.SRC_CLASS, PotentialSchemaSource.Costs.COMPUTATION); @@ -84,24 +83,24 @@ public class SchemaSourceTransformerTest { reg.register(sourceIdentifier); final Consumer c = new Consumer(); - this.schema = new SchemaSourceTransformer<>(p, - SchemaSourceTransformerTest.SRC_CLASS, c, SchemaSourceTransformerTest.DST_CLASS, this.function); + schema = new SchemaSourceTransformer<>(p, + SchemaSourceTransformerTest.SRC_CLASS, c, SchemaSourceTransformerTest.DST_CLASS, function); - final SchemaSourceListener listener = this.schema; + final SchemaSourceListener listener = schema; p.registerSchemaSourceListener(listener); final PotentialSchemaSource[] potList = { foo.getPotentialSchemSource() }; final Iterable> sources = Arrays.asList(potList); listener.schemaSourceRegistered(sources); - final ListenableFuture source = this.schema.getSource(sourceIdentifier); + final ListenableFuture source = schema.getSource(sourceIdentifier); assertNotNull(source); listener.schemaSourceUnregistered(foo.getPotentialSchemSource()); - final ListenableFuture source2 = this.schema.getSource(sourceIdentifier); + final ListenableFuture source2 = schema.getSource(sourceIdentifier); assertNotNull(source2); } - private class Foo { + private static class Foo { final PotentialSchemaSource src; @@ -116,7 +115,7 @@ public class SchemaSourceTransformerTest { } - private class Registrator extends AbstractSchemaSourceCache { + private static class Registrator extends AbstractSchemaSourceCache { Registrator(final SchemaSourceRegistry consumer, final Class srcClass, final Costs cost) { @@ -136,7 +135,7 @@ public class SchemaSourceTransformerTest { } - private class Provider extends AbstractSchemaRepository { + private static class Provider extends AbstractSchemaRepository { @Override public EffectiveModelContextFactory createEffectiveModelContextFactory( final SchemaContextFactoryConfiguration config) { @@ -144,7 +143,7 @@ public class SchemaSourceTransformerTest { } } - private class Consumer extends AbstractSchemaRepository { + private static class Consumer extends AbstractSchemaRepository { @Override public EffectiveModelContextFactory createEffectiveModelContextFactory( final SchemaContextFactoryConfiguration config) { diff --git a/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/SoftSchemaSourceCacheTest.java b/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/SoftSchemaSourceCacheTest.java index e699da45ef..4002d147ce 100644 --- a/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/SoftSchemaSourceCacheTest.java +++ b/yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/SoftSchemaSourceCacheTest.java @@ -26,8 +26,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.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.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.YangSchemaSourceRepresentation; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; @@ -62,7 +61,7 @@ public class SoftSchemaSourceCacheTest { final String content = "content"; final YangTextSchemaSource source = new TestingYangSource("test", "2012-12-12", content); cache.offer(source); - final var sourceIdentifier = RevisionSourceIdentifier.create("test", Revision.of("2012-12-12")); + final var sourceIdentifier = new SourceIdentifier("test", "2012-12-12"); final var checkedSource = cache .getSource(sourceIdentifier); assertNotNull(checkedSource); final var yangSchemaSourceRepresentation = checkedSource.get(); @@ -74,7 +73,7 @@ public class SoftSchemaSourceCacheTest { @Test public void inMemorySchemaSourceCacheNullGetSourcestest() throws Exception { try (var cache = new SoftSchemaSourceCache<>(registry, REPRESENTATION)) { - final var sourceIdentifier = RevisionSourceIdentifier.create("test", Revision.of("2012-12-12")); + final var sourceIdentifier = new SourceIdentifier("test", "2012-12-12"); final var checkedSource = cache.getSource(sourceIdentifier); assertNotNull(checkedSource); assertThrows(ExecutionException.class, () -> checkedSource.get()); @@ -90,7 +89,7 @@ public class SoftSchemaSourceCacheTest { cache1.offer(source); cache2.offer(source); - final var sourceIdentifier = RevisionSourceIdentifier.create("test", Revision.of("2012-12-12")); + final var sourceIdentifier = new SourceIdentifier("test", "2012-12-12"); final var checkedSource = cache1.getSource(sourceIdentifier); final var checkedSource2 = cache2.getSource(sourceIdentifier); assertNotNull(checkedSource); @@ -105,7 +104,7 @@ public class SoftSchemaSourceCacheTest { private final String content; TestingYangSource(final String name, final String revision, final String content) { - super(RevisionSourceIdentifier.create(name, Revision.ofNullable(revision))); + super(new SourceIdentifier(name, revision)); this.content = content; } -- 2.36.6