Remove RevisionSourceIdentifier 98/100998/13
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 4 May 2022 23:59:19 +0000 (01:59 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 9 May 2022 08:03:38 +0000 (10:03 +0200)
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 <robert.varga@pantheon.tech>
56 files changed:
model/odlext-model-api/src/main/java/org/opendaylight/yangtools/odlext/model/api/OpenDaylightExtensionsConstants.java
model/openconfig-model-api/src/main/java/org/opendaylight/yangtools/openconfig/model/api/OpenConfigConstants.java
model/rfc6241-model-api/src/main/java/org/opendaylight/yangtools/rfc6241/model/api/NetconfConstants.java
model/rfc6536-model-api/src/main/java/org/opendaylight/yangtools/rfc6536/model/api/NACMConstants.java
model/rfc6643-model-api/src/main/java/org/opendaylight/yangtools/rfc6643/model/api/IetfYangSmiv2Constants.java
model/rfc7952-model-api/src/main/java/org/opendaylight/yangtools/rfc7952/model/api/MetadataConstants.java
model/rfc8040-model-api/src/main/java/org/opendaylight/yangtools/rfc8040/model/api/YangDataConstants.java
model/rfc8528-model-api/src/main/java/org/opendaylight/yangtools/rfc8528/model/api/SchemaMountConstants.java
model/rfc8639-model-api/src/main/java/org/opendaylight/yangtools/rfc8639/model/api/SubscribedNotificationsConstants.java
model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ModuleImport.java
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/ImportEffectiveStatementImpl.java
model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/ModuleDependencySort.java
model/yang-model-spi/src/test/java/org/opendaylight/yangtools/yang/model/spi/ModuleDependencySortTest.java
model/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/FilteringSchemaContextProxy.java
model/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaContextUtil.java
model/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/SchemaContextProxyTest.java
model/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/YT691Test.java
parser/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/OperationsValidateModuleAction.java
parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolver.java
parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/RevisionDependencyResolver.java
parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/SourceIdMismatchDetector.java
parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolver.java
parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolverTest.java
parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/SharedEffectiveModelContextFactoryTest.java
parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/YT1428Test.java
parser/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolverTest.java
parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/TextToIRTransformer.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YangModelDependencyInfo.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementSupport.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/RevisionImport.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BelongsToStatementSupport.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/IncludeStatementSupport.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementSupport.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementSupport.java
parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug8597Test.java
parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/Bug9005Test.java
parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveModuleTest.java
parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/MoreRevisionsTest.java
parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/StmtTestUtils.java
parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YangParserTest.java
parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/yin/YinFileImportStmtTest.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/NamespaceKeyCriterion.java
plugin/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/Util.java
yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/RevisionSourceIdentifier.java [deleted file]
yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SourceIdentifier.java
yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangTextSchemaSource.java
yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinDomSchemaSource.java
yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinTextSchemaSource.java
yang/yang-repo-fs/src/main/java/org/opendaylight/yangtools/yang/model/repo/fs/FilesystemSchemaSourceCache.java
yang/yang-repo-fs/src/test/java/org/opendaylight/yangtools/yang/model/repo/fs/FilesystemSchemaSourceCacheIntegrationTest.java
yang/yang-repo-fs/src/test/java/org/opendaylight/yangtools/yang/model/repo/fs/FilesystemSchemaSourceCacheTest.java
yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/GuavaSchemaSourceCacheTest.java
yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/PotentialSchemaSourceTest.java
yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/SchemaSourceTransformerTest.java
yang/yang-repo-spi/src/test/java/org/opendaylight/yangtools/yang/model/repo/spi/SoftSchemaSourceCacheTest.java

index c591c12a8b7c96b848aa85ee097a5280a5734866..545535a36a66363ab14e3686afcc52723cd638c7 100644 (file)
@@ -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
index 3c130c8bfacf6bb7c9fd47f62f6eac4812551f2e..e125d9fb7676e0910124679f981f7700670e7928 100644 (file)
@@ -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.
      */
index 14756f2cfdeb4d93367944a6f9853819fc76d7be..cbd34189385d4f3e64eb7ce7c145ae22922a10b5 100644 (file)
@@ -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}.
index 633ed57489b11895e7f74272700ebd0e3547138d..6f30fd480b64a0a3b20193b6325d17c8675e1120 100644 (file)
@@ -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}.
index 25ad01d52cfafed03f8349dc9fd9ce67d9c447c1..797a042d1e1d85ffaa42e63ad2a2af6e8fff2d5f 100644 (file)
@@ -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}.
index b4f8adcb62f83f2545feec73ecd5f25d7ab6dd9c..9b4adf35eb10f2a2a39b1873a9531d2158ace1d6 100644 (file)
@@ -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}.
index 9d548ac648469880fdc19af4cd33c41b357a9073..b61f2b3e9c3fcd6169abe557978ff489ced7941a 100644 (file)
@@ -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}.
index 17d1bda2aed1f3beaff1eebb4231de153c8ac488..072f1b4ef24d81259cd36dab7131dca3528b74d8 100644 (file)
@@ -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}.
index 59405d989b018ed0bf9f6122d088f69da853be63..b46de022fefabfe309637635554b1fa76311ba2e 100644 (file)
@@ -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}.
index bf3ea93caee7f0a7b2bb0f693645a55cc2923533..b66a8c2700784a3ef24896c889721aa1ca61ad38 100644 (file)
@@ -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();
     }
 
     /**
index b593efd7934bea072783d703cb855e98b42181ca..09aad9b3cf821dad86cbbff7f6d1cebabef8b3db 100644 (file)
@@ -29,7 +29,7 @@ public final class ImportEffectiveStatementImpl extends WithSubstatements<Unqual
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
             final @NonNull SourceIdentifier importedSource) {
         super(declared, substatements);
-        revision = importedSource.getRevision().orElse(null);
+        revision = importedSource.revision();
     }
 
     @Override
index 599cd74a7f7d942967bd9b8f8885d82e3d2c2063..8cc4f039fccdebc4c2718717f0236ab7bc4f8f05 100644 (file)
@@ -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<Revision> 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() {
index 92505a42d1714896648960e9f2878d02bb8ce2f1..fec1802a43f27d995a1647831011af2922702c43 100644 (file)
@@ -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();
index 31ebeb67e22672f08a2739e527812e80c845d34e..c918baac26068fae1d86d19a2942df92d0005adf 100644 (file)
@@ -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<Module> sortedModules = new ArrayList<>(filteredModulesBuilder.build());
         sortedModules.sort(NAME_REVISION_COMPARATOR);
-        this.filteredModules = ImmutableSet.copyOf(sortedModules);
+        filteredModules = ImmutableSet.copyOf(sortedModules);
 
         final SetMultimap<XMLNamespace, Module> nsMap = Multimaps.newSetMultimap(new TreeMap<>(),
             AbstractSchemaContext::createModuleSet);
@@ -135,7 +135,8 @@ public final class FilteringSchemaContextProxy extends AbstractSchemaContext {
             for (ModuleImport moduleImport : module.getImports()) {
                 Optional<Revision> 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<Revision> 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<Revision> 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
index da7408df1b617642ddaa07b0b42431cff5c7d37e..9b39d85b929262c4c1a10139f99b797ba3473e92 100644 (file)
@@ -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));
     }
 }
index 1a3068a67e244aefcaff47d1006fb32049030d5f..839ea2cb3888c287d5980dd9e72d3c9e28527385 100644 (file)
@@ -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
index b7afea71d51119900c50119e537a68cf598448b3..8aeb05504a9dbfce1c8fbb78b9172b60a6b27da4 100644 (file)
@@ -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 = 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<SourceIdentifier> testSet = ImmutableSet.of(foo, sub1Foo, sub2Foo, bar, sub1Bar, baz);
         final EffectiveModelContext context = YangParserTestUtils.parseYangResourceDirectory("/yt691");
         final Set<SourceIdentifier> allModuleIdentifiers = SchemaContextUtil.getConstituentModuleIdentifiers(context);
index 80ae818550fd6ea241544706c64b2c5f3032eebe..92aaaa0f2fc30eef0497ab346e294e4d5f545fc6 100644 (file)
@@ -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<? extends Mutable<?, ?, ?>> 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.
index e87c7d3cfbd5406972e40af9c20b9570a2e0721a..99d0d15ef81d674fb4d44a816313367e38c7dfaa 100644 (file)
@@ -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;
         }
 
index 8bfda2aae2f9e9390092abfa9b6b7c49dbe6e0d5..7f3c339bc69f748d33e6b1f64d930b1d17fee443 100644 (file)
@@ -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<SourceIdentifier> haystack, final String needle) {
+    protected static SourceIdentifier findWildcard(final Iterable<SourceIdentifier> 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<SourceIdentifier> 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)) {
index 070b18f1ab8670c8a1f000f6b7737ea8d873c0e9..65454fc63cb6b44dea7fcdb449e0f9ac7a2beb00 100644 (file)
@@ -45,7 +45,7 @@ final class SourceIdMismatchDetector implements Function<List<IRSchemaSource>, 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);
                 }
             }
 
index 8e0c309d6d44d924d2913e39c560c4ba08c09223..d39a75ba7e4dc4029af7e6ec38f55c727f1b9741 100644 (file)
@@ -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<Revision> sourceRev = providedId.getRevision();
-                final Optional<Revision> 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);
         }
     }
 
index 47028cd9066f7abc591ac021ef6336b823072f46..633f44bb1a57acac0714268aba4179dc0e8d6588 100644 (file)
@@ -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);
     }
 }
index bcbaa6ee8522d146b93ab7a912790d8d8f7ef57e..dc1937aab3e6854e0d07198171c64aeda29acd91 100644 (file)
@@ -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")),
index 25e9a7870bf1dc9936579dfba6605f43b98e6b70..b9500aca0b85335050fa7700ec7c575271b9b60f 100644 (file)
@@ -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());
     }
 }
index ea11312091cc27d69c1b6678f2b5081b38a3c47d..b8cb536e8d32c2b9603a6310a94a64a776506a37 100644 (file)
@@ -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<YangTextSchemaSource> 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<YangTextSchemaSource> 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<YangTextSchemaSource> 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<YangTextSchemaSource> 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<? extends SchemaContext> 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());
     }
 }
index bca4ae6d7f6d3ca7db25a78784ac843af47297ff..a38e5ec5205ce32f7f1790de40118ccef332986a 100644 (file)
@@ -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<String, Optional<Revision>, SourceSpecificContext> libSourcesTable = TreeBasedTable.create(
-            String::compareTo, Revision::compare);
+        final TreeBasedTable<Unqualified, Optional<Revision>, 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<SourceSpecificContext> requiredLibs = new HashSet<>();
@@ -422,7 +427,7 @@ final class BuildGlobalContext extends NamespaceStorageSupport implements Regist
     }
 
     private void collectRequiredSourcesFromLib(
-            final TreeBasedTable<String, Optional<Revision>, SourceSpecificContext> libSourcesTable,
+            final TreeBasedTable<Unqualified, Optional<Revision>, SourceSpecificContext> libSourcesTable,
             final Set<SourceSpecificContext> 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<String, Optional<Revision>, SourceSpecificContext> libSourcesTable) {
-        return requiredSource.getRevision().isPresent()
-                ? libSourcesTable.get(requiredSource.getName(), requiredSource.getRevision())
-                        : getLatestRevision(libSourcesTable.row(requiredSource.getName()));
+            final TreeBasedTable<Unqualified, Optional<Revision>, 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<Optional<Revision>,
-            SourceSpecificContext> sourceMap) {
+    private static SourceSpecificContext getLatestRevision(
+            final SortedMap<Optional<Revision>, SourceSpecificContext> sourceMap) {
         return sourceMap != null && !sourceMap.isEmpty() ? sourceMap.get(sourceMap.lastKey()) : null;
     }
 
index 0dd30ba44432c9dda6814a453efb0fe92d4bbd64..06cdcde28cdd9da1cf278e06fc56221d318a53d8 100644 (file)
@@ -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<YangTextS
         final IRStatement rootStatement = AntlrSupport.createStatement(YangStatementStreamSource.parseYangSource(text));
         final String name = YangModelDependencyInfo.safeStringArgument(text.getIdentifier(), rootStatement, "name");
         final String latestRevision = YangModelDependencyInfo.getLatestRevision(rootStatement, text.getIdentifier());
-        final RevisionSourceIdentifier sourceId = latestRevision == null ? RevisionSourceIdentifier.create(name)
-                : RevisionSourceIdentifier.create(name, Revision.of(latestRevision));
+        final SourceIdentifier sourceId = new SourceIdentifier(name, latestRevision);
 
         return new IRSchemaSource(sourceId, rootStatement, text.getSymbolicName().orElse(null));
     }
index 73ca392e2041489583c27b5193305b107597dc0a..be5de12d28c5fa682ccfd191b45bb32c4bf0ef1f 100644 (file)
@@ -19,6 +19,7 @@ import java.util.Set;
 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;
 import org.opendaylight.yangtools.yang.model.api.ModuleImport;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.stmt.ImportEffectiveStatement;
@@ -190,8 +191,8 @@ public abstract class YangModelDependencyInfo {
             if (isBuiltin(substatement, IMPORT)) {
                 final String importedModuleName = safeStringArgument(source, substatement, "imported module name");
                 final String revisionDateStr = getRevisionDateString(substatement, source);
-                final Revision revisionDate = Revision.ofNullable(revisionDateStr).orElse(null);
-                result.add(new ModuleImportImpl(importedModuleName, revisionDate));
+                result.add(new ModuleImportImpl(UnresolvedQName.Unqualified.of(importedModuleName),
+                    revisionDateStr != null ? Revision.of(revisionDateStr) : null));
             }
         }
         return ImmutableSet.copyOf(result);
@@ -207,9 +208,9 @@ public abstract class YangModelDependencyInfo {
         for (final IRStatement substatement : module.statements()) {
             if (isBuiltin(substatement, INCLUDE)) {
                 final String revisionDateStr = getRevisionDateString(substatement, source);
-                final String IncludeModuleName = safeStringArgument(source, substatement, "included submodule name");
-                final Revision revisionDate = Revision.ofNullable(revisionDateStr).orElse(null);
-                result.add(new ModuleImportImpl(IncludeModuleName, revisionDate));
+                final String includeModuleName = safeStringArgument(source, substatement, "included submodule name");
+                result.add(new ModuleImportImpl(UnresolvedQName.Unqualified.of(includeModuleName),
+                    revisionDateStr == null ? null : Revision.of(revisionDateStr)));
             }
         }
         return ImmutableSet.copyOf(result);
@@ -241,7 +242,7 @@ public abstract class YangModelDependencyInfo {
     private static @NonNull YangModelDependencyInfo parseSubmoduleContext(final IRStatement submodule,
             final SourceIdentifier source) {
         final String name = safeStringArgument(source, submodule, "submodule name");
-        final String belongsTo = parseBelongsTo(submodule, source);
+        final UnresolvedQName.Unqualified belongsTo = UnresolvedQName.Unqualified.of(parseBelongsTo(submodule, source));
 
         final String latestRevision = getLatestRevision(submodule, source);
         final ImmutableSet<ModuleImport> 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<ModuleImport> imports, final ImmutableSet<ModuleImport> includes) {
+        private SubmoduleDependencyInfo(final String name, final String latestRevision,
+                final UnresolvedQName.Unqualified belongsTo, final ImmutableSet<ModuleImport> imports,
+                final ImmutableSet<ModuleImport> 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;
         }
 
index 188ef4446a4bfce69d84ae3a09ffff5266dc80e5..f5beef4fd3dc0a598db4bfa8b4ac0064e45115af 100644 (file)
@@ -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",
index 43f98daf198df690369a6bfa8b409bbcb5f8a891..f92094a8789f20fd4ab41ac0cea242ef65a03cba 100644 (file)
@@ -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<Mutable<?, ?, ?>> linkageTarget = importAction.mutatesCtx(stmt.getRoot(),
-            SOURCE_LINKAGE);
+        final Prerequisite<Mutable<?, ?, ?>> linkageTarget = importAction.mutatesCtx(stmt.getRoot(), SOURCE_LINKAGE);
 
         importAction.apply(new InferenceAction() {
             @Override
@@ -89,9 +86,7 @@ final class RevisionImport {
     }
 
     static SourceIdentifier getImportedSourceIdentifier(final StmtContext<Unqualified, ImportStatement, ?> stmt) {
-        final StmtContext<Revision, ?, ?> 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);
     }
 }
index 0d171cd0cb34a32fe16723ccef88d6bfc89fedf3..2d1427e3afd44c7b9f37676e554de22ca805200a 100644 (file)
@@ -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<Unqualified, BelongsToStatement, BelongsToEffectiveStatement> ctx) {
-        ctx.addRequiredSource(getSourceIdentifier(ctx));
+        ctx.addRequiredSource(new SourceIdentifier(ctx.getArgument()));
     }
 
     @Override
@@ -61,7 +59,7 @@ public final class BelongsToStatementSupport
             final Mutable<Unqualified, BelongsToStatement, BelongsToEffectiveStatement> belongsToCtx) {
         ModelActionBuilder belongsToAction = belongsToCtx.newInferenceAction(ModelProcessingPhase.SOURCE_LINKAGE);
 
-        final SourceIdentifier belongsToSourceIdentifier = getSourceIdentifier(belongsToCtx);
+        final SourceIdentifier belongsToSourceIdentifier = new SourceIdentifier(belongsToCtx.getArgument());
         final Prerequisite<StmtContext<?, ?, ?>> belongsToPrereq = belongsToAction.requiresCtx(belongsToCtx,
             ModuleNamespaceForBelongsTo.class, belongsToCtx.getArgument(), ModelProcessingPhase.SOURCE_LINKAGE);
 
@@ -103,9 +101,4 @@ public final class BelongsToStatementSupport
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         return EffectiveStatements.createBelongsTo(stmt.declared(), substatements);
     }
-
-    private static SourceIdentifier getSourceIdentifier(
-            final StmtContext<Unqualified, BelongsToStatement, BelongsToEffectiveStatement> belongsToCtx) {
-        return RevisionSourceIdentifier.create(belongsToCtx.getArgument(), Optional.empty());
-    }
 }
index 23e48654ee60692b220d3db23a1b10ce264acfe6..92d86b7e2ed4d8985c966d133947ed410c6fdd15 100644 (file)
@@ -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<Unqualified, IncludeStatement, IncludeEffectiveStatement> stmt) {
-        final StmtContext<Revision, ?, ?> 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);
             }
 
index 90ea69b3d80d5f9c0aec0a372f0edc901b1c69a7..eecd41af6409c4c33ba8130dd2ce7eb66a697bfa 100644 (file)
@@ -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<Revision> 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<Revision> 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<?, ModuleStatement, ModuleEffectiveStatement> 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);
index ea05675da1132253c99bd0a4defe5d7411b8d717..ab6e728cca37c5a86ea8298bd2121e4114d73d69 100644 (file)
@@ -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<Unqualified, SubmoduleStatement, SubmoduleEffectiveStatement> 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<Unqualified, SubmoduleStatement, SubmoduleEffectiveStatement> 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<?, SubmoduleStatement, SubmoduleEffectiveStatement>
             possibleDuplicateSubmodule = stmt.getFromNamespace(SubmoduleNamespace.class, submoduleIdentifier);
index 40ca85b095f94555159f8aa350fd3b69f20888c2..64345368a8eff2eb4c229d098bafec271155b7c2 100644 (file)
@@ -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());
index 828722729bbd60fff90e472c586337cd3053bad2..61a66f18f88d836c59b6c50e59e97545dec9c2b1 100644 (file)
@@ -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<? extends ModuleImport> 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());
     }
index 3647c4579f2800ab6f11800a9ddd02c4a4d60e19..ec05aaa2531769bb305e9fa0fa1ac76d12fe97f1 100644 (file)
@@ -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());
 
index aab46a403f556897991058f2b6c0c062fa7d64ac..343265cbd295042c1ab1db565dae9e94c5504817 100644 (file)
@@ -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<? extends ModuleImport> 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<? extends ModuleImport> 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<? extends ModuleImport> 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());
     }
 
index 1b037d94413f7f11cb24d67d14865a6507f22f94..88d40a527c18c670fbd95cde30fb0a900f974053 100644 (file)
@@ -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);
     }
 
index e3bf84065b42630b7b75ea0431af6158e7c5be80..86c91d030c3a4d506d7906c090435f4487161aeb 100644 (file)
@@ -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());
index 62fb46f96449418468c5acbfa0298112586722e2..e84aa6b8b8d1a7c7a5aa0881ed2dc01548a9ff3c 100644 (file)
@@ -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<? extends ModuleImport> 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")));
     }
 }
index 307fe3d62f00066b44b9283db813fc35fd4d29e3..fe4b755b92b37834d14ecec0b0e4a662090b782b 100644 (file)
@@ -35,12 +35,12 @@ public abstract class NamespaceKeyCriterion<K> {
 
         @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
index 07cf2e2ccdace69cd010296e4ecc1965ff67aedf..0b645f6c360273eeb8451db211369410e9f37e18 100644 (file)
@@ -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 (file)
index 02869cb..0000000
+++ /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.
- *
- * <p>
- * Simple transfer object represents revision identifier of source for YANG schema (module or submodule), which consists
- * of
- * <ul>
- * <li>YANG schema name ({@link #getName()}
- * <li>Module revision (optional) ({link {@link #getRevision()})
- * </ul>
- *
- * <p>
- * Revision source identifier is designated to be carry only necessary information to look-up YANG model source
- * and to be used by various SchemaSourceProviders.
- *
- * <p>
- * <b>Note:</b>On source retrieval layer it is impossible to distinguish between YANG module and/or submodule unless
- * source is present.
- *
- * <p>
- * (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> 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> revision) {
-        return new RevisionSourceIdentifier(moduleName, revision);
-    }
-
-    public static @NonNull RevisionSourceIdentifier create(final Unqualified moduleName,
-            final Optional<Revision> 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<Revision> rev = getRevision();
-        if (rev.isPresent()) {
-            sb.append('@').append(rev.get());
-        }
-        return sb.append(']').toString();
-    }
-}
index 274012874c469f946d07a8d35c0be27010477f02..8b5411cd34b3367ea8e14fd5c41140dce7ee6059 100644 (file)
@@ -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: <a href="https://tools.ietf.org/html/rfc6020#section-5.2">RFC6020</a>
  * and <a href="https://tools.ietf.org/html/rfc6022#section-3.1">RFC6022</a>.
  */
-@Beta
-public abstract class SourceIdentifier implements Identifier, Immutable {
-    private static final Interner<SourceIdentifier> 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> 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<Revision> 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> 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();
     }
index 40a2ae5ccd3cbb640e8d4426cd50ec506cbde823..8cd7de30be4b7f00b918948c5f51c782add7c379 100644 (file)
@@ -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());
     }
 
     /**
index bfcae8300eac96c1c94024fcf58767fc96300c91..bac0786482f3424be89ad591ac487e1b7d7f37b9 100644 (file)
@@ -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);
index eb89a17b64b700e2570eb193580b684414dd3c3f..e65d828bb7e5bb851388183450fbf133d406f482 100644 (file)
@@ -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
index 128be91f42570d687ed13d1cac666cc906a7763e..ab48b92abdf774d30614b2117b14384f1f1ae866 100644 (file)
@@ -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<T extends SchemaSourceRepresentat
     }
 
     static File sourceIdToFile(final SourceIdentifier identifier, final File storageDirectory) {
-        final Optional<Revision> 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<T extends SchemaSourceRepresentat
         return file;
     }
 
-    @SuppressFBWarnings(value = "NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE",
-            justification = "listFiles is analyzed to return null")
     private static File findFileWithNewestRev(final SourceIdentifier identifier, final File storageDirectory) {
         File[] files = storageDirectory.listFiles(new FilenameFilter() {
-            final Pattern pat = Pattern.compile(Pattern.quote(identifier.getName())
+            final Pattern pat = Pattern.compile(Pattern.quote(identifier.name().getLocalName())
                     + "(\\.yang|@\\d\\d\\d\\d-\\d\\d-\\d\\d.yang)");
 
             @Override
@@ -280,7 +277,7 @@ public final class FilesystemSchemaSourceCache<T extends SchemaSourceRepresentat
             if (matcher.matches()) {
                 final String moduleName = matcher.group("moduleName");
                 final String revision = matcher.group("revision");
-                return Optional.of(RevisionSourceIdentifier.create(moduleName, Revision.ofNullable(revision)));
+                return Optional.of(new SourceIdentifier(moduleName, revision));
             }
             return Optional.empty();
         }
index f1dbd0dca048b8c5615bce4a5be3befcb5d12ef3..1850f305c7f380457ee13c5a86966deda0fa6375 100644 (file)
@@ -33,11 +33,9 @@ import java.util.List;
 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.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.repo.api.MissingSchemaSourceException;
-import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
 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;
@@ -94,10 +92,10 @@ public class FilesystemSchemaSourceCacheIntegrationTest {
         assertEquals(4, listener.registeredSources.size());
 
         assertThat(Lists.transform(listener.registeredSources, PotentialSchemaSource::getSourceIdentifier),
-                both(hasItem(RevisionSourceIdentifier.create("test", Optional.empty())))
-                        .and(hasItem(RevisionSourceIdentifier.create("test", Revision.of("2012-12-12"))))
-                        .and(hasItem(RevisionSourceIdentifier.create("test", Revision.of("2013-12-12"))))
-                        .and(hasItem(RevisionSourceIdentifier.create("module", Revision.of("2010-12-12"))))
+                both(hasItem(new SourceIdentifier("test")))
+                        .and(hasItem(new SourceIdentifier("test", "2012-12-12")))
+                        .and(hasItem(new SourceIdentifier("test", "2013-12-12")))
+                        .and(hasItem(new SourceIdentifier("module", "2010-12-12")))
         );
     }
 
@@ -111,7 +109,7 @@ public class FilesystemSchemaSourceCacheIntegrationTest {
                 sharedSchemaRepository, YangTextSchemaSource.class, storageDir);
         sharedSchemaRepository.registerSchemaSourceListener(cache);
 
-        final SourceIdentifier runningId = RevisionSourceIdentifier.create("running", Revision.of("2012-12-12"));
+        final SourceIdentifier runningId = new SourceIdentifier("running", "2012-12-12");
 
         sharedSchemaRepository.registerSchemaSource(sourceIdentifier -> immediateFluentFuture(
             new YangTextSchemaSource(runningId) {
index 91f27b6c8dbbba7a47079dfd51dbed1cda1d0d5b..8a20352b3b244f2a84a46c725e544e38b9016d1e 100644 (file)
@@ -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<YangTextSchemaSource> 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<File> storedFilesAfterNewCache = getFilesFromCache();
@@ -109,7 +107,7 @@ public class FilesystemSchemaSourceCacheTest {
     @Test
     public void testCacheDuplicate() throws Exception {
         final FilesystemSchemaSourceCache<YangTextSchemaSource> 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<File> 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<YangTextSchemaSource> 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<YangTextSchemaSource> cache = new FilesystemSchemaSourceCache<>(this.registry,
+        final SourceIdentifier sourceIdentifier = new SourceIdentifier("test");
+        final File sourceIdToFile = FilesystemSchemaSourceCache.sourceIdToFile(sourceIdentifier, storageDir);
+        final FilesystemSchemaSourceCache<YangTextSchemaSource> cache = new FilesystemSchemaSourceCache<>(registry,
                 YangTextSchemaSource.class, sourceIdToFile);
         assertNotNull(cache);
         final List<File> storedFiles = Arrays.asList(sourceIdToFile.listFiles());
@@ -159,46 +157,46 @@ public class FilesystemSchemaSourceCacheTest {
 
     @Test
     public void sourceIdToFileEmptyRevWithOneItemInDir() {
-        final FilesystemSchemaSourceCache<YangTextSchemaSource> cache = new FilesystemSchemaSourceCache<>(this.registry,
-                YangTextSchemaSource.class, this.storageDir);
+        final FilesystemSchemaSourceCache<YangTextSchemaSource> 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<File> storedFiles = Arrays.asList(this.storageDir.listFiles());
+        final List<File> storedFiles = Arrays.asList(storageDir.listFiles());
         assertEquals(1, storedFiles.size());
     }
 
     @Test
     public void sourceIdToFileEmptyRevWithMoreItemsInDir() {
-        final FilesystemSchemaSourceCache<YangTextSchemaSource> cache = new FilesystemSchemaSourceCache<>(this.registry,
-                YangTextSchemaSource.class, this.storageDir);
+        final FilesystemSchemaSourceCache<YangTextSchemaSource> 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<File> storedFiles = Arrays.asList(this.storageDir.listFiles());
+        final List<File> storedFiles = Arrays.asList(storageDir.listFiles());
         assertEquals(2, storedFiles.size());
     }
 
     @Test
     public void test() throws Exception {
 
-        final FilesystemSchemaSourceCache<YangTextSchemaSource> cache = new FilesystemSchemaSourceCache<>(this.registry,
-                YangTextSchemaSource.class, this.storageDir);
+        final FilesystemSchemaSourceCache<YangTextSchemaSource> 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<? extends YangTextSchemaSource> 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<YangTextSchemaSource> cache = new FilesystemSchemaSourceCache<>(this.registry,
-                YangTextSchemaSource.class, this.storageDir);
+        final FilesystemSchemaSourceCache<YangTextSchemaSource> 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<? extends YangTextSchemaSource> checked = cache.getSource(sourceIdentifier);
         assertNotNull(checked);
         assertThrows(ExecutionException.class, () -> checked.get());
     }
 
     private List<File> 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
index 3e2c637c2bff8522576c2626c7a2042f9300c750..72cb5b55056edc5b88f0e9fe8bdcb185ca083225 100644 (file)
@@ -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;
         }
 
index 951a8842ac5fcfcae61d5ad43e1916c65971b140..89a7d1f1478b00b9288265556122c3ed0ce27a25 100644 (file)
@@ -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<TestSchemaSourceRepresentation> source;
     @SuppressWarnings("exports")
index f852cd17cc3f7b9ddab16531228a2514e11e36c6..217f34eeeb71613e5b55ba6322ff761aacadad3c 100644 (file)
@@ -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<YinXmlSchemaSource> prov = this.schema;
+        schema = new SchemaSourceTransformer<>(p,
+                SchemaSourceTransformerTest.SRC_CLASS, consumer, SchemaSourceTransformerTest.DST_CLASS,
+                function);
+        final SchemaSourceProvider<YinXmlSchemaSource> prov = schema;
         final Future<? extends YinXmlSchemaSource> 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<YangSchemaSourceRepresentation> 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<PotentialSchemaSource<?>> sources = Arrays.asList(potList);
         listener.schemaSourceRegistered(sources);
-        final ListenableFuture<YinXmlSchemaSource> source = this.schema.getSource(sourceIdentifier);
+        final ListenableFuture<YinXmlSchemaSource> source = schema.getSource(sourceIdentifier);
         assertNotNull(source);
 
         listener.schemaSourceUnregistered(foo.getPotentialSchemSource());
-        final ListenableFuture<YinXmlSchemaSource> source2 = this.schema.getSource(sourceIdentifier);
+        final ListenableFuture<YinXmlSchemaSource> source2 = schema.getSource(sourceIdentifier);
         assertNotNull(source2);
     }
 
-    private class Foo<T extends SchemaSourceRepresentation> {
+    private static class Foo<T extends SchemaSourceRepresentation> {
 
         final PotentialSchemaSource<T> src;
 
@@ -116,7 +115,7 @@ public class SchemaSourceTransformerTest {
 
     }
 
-    private class Registrator extends AbstractSchemaSourceCache<YangSchemaSourceRepresentation> {
+    private static class Registrator extends AbstractSchemaSourceCache<YangSchemaSourceRepresentation> {
 
         Registrator(final SchemaSourceRegistry consumer, final Class<YangSchemaSourceRepresentation> 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) {
index e699da45ef08a3abd319fdbad52bd1c99eb61f2e..4002d147ce70a2d04f197a70f8d4e28860a12def 100644 (file)
@@ -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;
         }