Do not subclass YangTextSchemaSource in yang-parser-impl 71/95871/1
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 21 Apr 2021 05:47:24 +0000 (07:47 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 21 Apr 2021 06:27:12 +0000 (08:27 +0200)
We have a readily-available URL-based implementation, reuse it instead
of rolling our own.

JIRA: YANGTOOLS-1275
Change-Id: I43a6215e8dbe678966c80d3d05dde5a44c8e7833
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit 3310cd312a6419064b7a2850865e434970ba5a67)

yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangTextSchemaSource.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolver.java

index d21fdcb021aecd36399355f7fda36ec470e7b07d..2d87b9c905c9a7aa7acf6e88933a3898f994dfbf 100644 (file)
@@ -126,6 +126,18 @@ public abstract class YangTextSchemaSource extends ByteSource implements YangSch
         return new ResourceYangTextSchemaSource(identifier, url);
     }
 
+    /**
+     * Create a new {@link YangTextSchemaSource} backed by a URL.
+     *
+     * @param url Backing URL
+     * @param identifier Source identifier
+     * @return A new instance.
+     * @throws NullPointerException if any argument is {@code null}
+     */
+    public static @NonNull YangTextSchemaSource forURL(final URL url, final SourceIdentifier identifier) {
+        return new ResourceYangTextSchemaSource(identifier, url);
+    }
+
     @Override
     public final SourceIdentifier getIdentifier() {
         return identifier;
index 3606cc387616d972062aec8ee8e7965fdb68e636..6cdcaac81c57ef724385921f9845e798714468fa 100644 (file)
@@ -13,7 +13,6 @@ import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediate
 import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFluentFuture;
 
 import com.google.common.annotations.Beta;
-import com.google.common.base.MoreObjects.ToStringHelper;
 import com.google.common.base.Verify;
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.ImmutableSet;
@@ -21,7 +20,6 @@ import com.google.common.collect.Multimap;
 import com.google.common.util.concurrent.FluentFuture;
 import com.google.common.util.concurrent.ListenableFuture;
 import java.io.IOException;
-import java.io.InputStream;
 import java.net.URL;
 import java.util.Collection;
 import java.util.Optional;
@@ -177,23 +175,7 @@ public final class YangTextSchemaContextResolver implements AutoCloseable, Schem
 
         final String path = url.getPath();
         final String fileName = path.substring(path.lastIndexOf('/') + 1);
-        final SourceIdentifier guessedId = guessSourceIdentifier(fileName);
-        return registerSource(new YangTextSchemaSource(guessedId) {
-            @Override
-            public InputStream openStream() throws IOException {
-                return url.openStream();
-            }
-
-            @Override
-            public Optional<String> getSymbolicName() {
-                return Optional.of(url.toString());
-            }
-
-            @Override
-            protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
-                return toStringHelper.add("url", url);
-            }
-        });
+        return registerSource(YangTextSchemaSource.forURL(url, guessSourceIdentifier(fileName)));
     }
 
     private static SourceIdentifier guessSourceIdentifier(final @NonNull String fileName) {
@@ -275,7 +257,7 @@ public final class YangTextSchemaContextResolver implements AutoCloseable, Schem
     }
 
     @Override
-    public synchronized FluentFuture<YangTextSchemaSource> getSource(
+    public synchronized @NonNull FluentFuture<YangTextSchemaSource> getSource(
             final SourceIdentifier sourceIdentifier) {
         final Collection<YangTextSchemaSource> ret = texts.get(sourceIdentifier);