Move YinTextSource to yang.model.api.source 62/109662/4
authorRobert Varga <robert.varga@pantheon.tech>
Sun, 7 Jan 2024 15:16:48 +0000 (16:16 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Sun, 7 Jan 2024 15:29:52 +0000 (16:29 +0100)
YinTextSource is something defined in RFC6020, really, expose this
construct at yang-model-api level.

JIRA: YANGTOOLS-1561
Change-Id: Icbfa6a96a11090031c95595da14e92b888f06f23
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/source/YinTextSource.java [moved from model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YinTextSource.java with 66% similarity]
model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/AbstractYinTextSource.java [new file with mode: 0644]
model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/DelegatedYinTextSource.java
model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/FileYinTextSource.java
model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/URLYinTextSource.java
parser/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/DefaultYangParser.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/YinTextToDomTransformer.java
parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/TestUtils.java

similarity index 66%
rename from model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/YinTextSource.java
rename to model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/source/YinTextSource.java
index 255c258c14b327d16eecbdc728b81df601a78bb9..a4c6c2bab8ac20ccce6ddb05d67460eb588ab1b7 100644 (file)
@@ -5,33 +5,19 @@
  * 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.spi.source;
-
-import static java.util.Objects.requireNonNull;
+package org.opendaylight.yangtools.yang.model.api.source;
 
 import com.google.common.base.MoreObjects;
 import com.google.common.base.MoreObjects.ToStringHelper;
 import com.google.common.io.ByteSource;
 import java.io.InputStream;
-import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier;
-import org.opendaylight.yangtools.yang.model.api.source.YinSourceRepresentation;
+import org.eclipse.jdt.annotation.NonNullByDefault;
 
 /**
  * YIN text schema source representation. Exposes an RFC6020 or RFC7950 XML representation as an {@link InputStream}.
  */
+@NonNullByDefault
 public abstract class YinTextSource extends ByteSource implements YinSourceRepresentation {
-    private final @NonNull SourceIdentifier sourceId;
-
-    protected YinTextSource(final SourceIdentifier sourceId) {
-        this.sourceId = requireNonNull(sourceId);
-    }
-
-    @Override
-    public final SourceIdentifier sourceId() {
-        return sourceId;
-    }
-
     @Override
     public final Class<YinTextSource> getType() {
         return YinTextSource.class;
@@ -51,7 +37,7 @@ public abstract class YinTextSource extends ByteSource implements YinSourceRepre
      * @param toStringHelper ToStringHelper onto the attributes can be added
      * @return ToStringHelper supplied as input argument.
      */
-    protected ToStringHelper addToStringAttributes(final @NonNull ToStringHelper toStringHelper) {
-        return toStringHelper.add("identifier", sourceId);
+    protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
+        return toStringHelper.add("sourceId", sourceId());
     }
 }
diff --git a/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/AbstractYinTextSource.java b/model/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/source/AbstractYinTextSource.java
new file mode 100644 (file)
index 0000000..4e3a281
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2015 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.spi.source;
+
+import static java.util.Objects.requireNonNull;
+
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.opendaylight.yangtools.concepts.Delegator;
+import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier;
+import org.opendaylight.yangtools.yang.model.api.source.YinTextSource;
+
+/**
+ * Abstract base class for implementing {@link YinTextSource}s with {@link Delegator}.
+ */
+@NonNullByDefault
+abstract class AbstractYinTextSource<T> extends YinTextSource implements Delegator<T> {
+    private final SourceIdentifier sourceId;
+    private final T delegate;
+
+    AbstractYinTextSource(final SourceIdentifier sourceId, final T delegate) {
+        this.sourceId = requireNonNull(sourceId);
+        this.delegate = requireNonNull(delegate);
+    }
+
+    @Override
+    public final SourceIdentifier sourceId() {
+        return sourceId;
+    }
+
+    @Override
+    public final T getDelegate() {
+        return delegate;
+    }
+
+}
index 5a96bba5e64c3c0ed2f614278b49c44a3f6d010b..9b973f534a3a43a126b7100f88065545c4bc3782 100644 (file)
@@ -7,24 +7,19 @@
  */
 package org.opendaylight.yangtools.yang.model.spi.source;
 
-import static java.util.Objects.requireNonNull;
-
 import com.google.common.base.MoreObjects.ToStringHelper;
 import com.google.common.io.ByteSource;
 import java.io.IOException;
 import java.io.InputStream;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.NonNullByDefault;
-import org.opendaylight.yangtools.concepts.Delegator;
 import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier;
 
 /**
  * A {@link YangTextSource} delegating to a {@link ByteSource}.
  */
 @NonNullByDefault
-public class DelegatedYinTextSource extends YinTextSource implements Delegator<ByteSource> {
-    private final ByteSource delegate;
-
+public class DelegatedYinTextSource extends AbstractYinTextSource<ByteSource> {
     /**
      * Default constructor.
      *
@@ -32,27 +27,21 @@ public class DelegatedYinTextSource extends YinTextSource implements Delegator<B
      * @param delegate backing {@link ByteSource} instance
      */
     public DelegatedYinTextSource(final SourceIdentifier sourceId, final ByteSource delegate) {
-        super(sourceId);
-        this.delegate = requireNonNull(delegate);
-    }
-
-    @Override
-    public final ByteSource getDelegate() {
-        return delegate;
+        super(sourceId, delegate);
     }
 
     @Override
     public final InputStream openStream() throws IOException {
-        return delegate.openStream();
+        return getDelegate().openStream();
     }
 
     @Override
     public final @NonNull String symbolicName() {
-        return "[" + delegate.toString() + "]";
+        return "[" + getDelegate().toString() + "]";
     }
 
     @Override
     protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
-        return super.addToStringAttributes(toStringHelper).add("delegate", delegate);
+        return super.addToStringAttributes(toStringHelper).add("delegate", getDelegate());
     }
 }
index f5299e90dae9db040546a435ba88f61e76c38388..b7d4448d9bda379ed08bef5ea07636168dc32258 100644 (file)
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.yangtools.yang.model.spi.source;
 
-import static java.util.Objects.requireNonNull;
-
 import com.google.common.base.MoreObjects.ToStringHelper;
 import java.io.IOException;
 import java.io.InputStream;
@@ -16,22 +14,18 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.NonNullByDefault;
-import org.opendaylight.yangtools.concepts.Delegator;
 import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier;
 
 /**
- * A {@link YinTextSource} backed by a file.
+ * A {@link AbstractYinTextSource} backed by a file.
  */
 @NonNullByDefault
-public class FileYinTextSource extends YinTextSource implements Delegator<Path> {
-    private final Path path;
-
+public class FileYinTextSource extends AbstractYinTextSource<Path> {
     public FileYinTextSource(final SourceIdentifier sourceId, final Path path) {
-        super(sourceId);
+        super(sourceId, path);
         if (!Files.isRegularFile(path)) {
             throw new IllegalArgumentException("Supplied path " + path + " is not a regular file");
         }
-        this.path = requireNonNull(path);
     }
 
     public FileYinTextSource(final Path path) {
@@ -39,23 +33,18 @@ public class FileYinTextSource extends YinTextSource implements Delegator<Path>
         this(SourceIdentifier.ofYinFileName(path.toFile().getName()), path);
     }
 
-    @Override
-    public final Path getDelegate() {
-        return path;
-    }
-
     @Override
     public final InputStream openStream() throws IOException {
-        return Files.newInputStream(path);
+        return Files.newInputStream(getDelegate());
     }
 
     @Override
     public final @NonNull String symbolicName() {
-        return path.toString();
+        return getDelegate().toString();
     }
 
     @Override
     protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
-        return super.addToStringAttributes(toStringHelper).add("path", path);
+        return super.addToStringAttributes(toStringHelper).add("path", getDelegate());
     }
 }
index 20aa0cf765c0cb83ce5da1794ca546974b44b681..a4390b426607f3ec237ac28640ebe1089bb35f7a 100644 (file)
@@ -7,51 +7,40 @@
  */
 package org.opendaylight.yangtools.yang.model.spi.source;
 
-import static java.util.Objects.requireNonNull;
-
 import com.google.common.base.MoreObjects.ToStringHelper;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.NonNullByDefault;
-import org.opendaylight.yangtools.concepts.Delegator;
 import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier;
 
 /**
- * A {@link YinTextSource}.backed by a {@link URL}.
+ * A {@link AbstractYinTextSource}.backed by a {@link URL}.
  */
 @NonNullByDefault
-public class URLYinTextSource extends YinTextSource implements Delegator<URL> {
-    private final URL url;
-
+public class URLYinTextSource extends AbstractYinTextSource<URL> {
     public URLYinTextSource(final SourceIdentifier sourceId, final URL url) {
-        super(sourceId);
-        this.url = requireNonNull(url);
+        super(sourceId, url);
     }
 
     public URLYinTextSource(final URL url) {
         this(SourceIdentifier.ofYinFileName(extractFileName(url.getPath())), url);
     }
 
-    @Override
-    public final URL getDelegate() {
-        return url;
-    }
-
     @Override
     public final InputStream openStream() throws IOException {
-        return url.openStream();
+        return getDelegate().openStream();
     }
 
     @Override
     public final @NonNull String symbolicName() {
-        return url.toString();
+        return getDelegate().toString();
     }
 
     @Override
     protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
-        return super.addToStringAttributes(toStringHelper).add("url", url);
+        return super.addToStringAttributes(toStringHelper).add("url", getDelegate());
     }
 
     private static String extractFileName(final String path) {
index 519d4d2f5c13e7f6097ed5bf2beaf9f562f15543..b2c60ccd41131d8257d5fd118e7e37479098ed19 100644 (file)
@@ -19,11 +19,11 @@ import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.source.SourceRepresentation;
+import org.opendaylight.yangtools.yang.model.api.source.YinTextSource;
 import org.opendaylight.yangtools.yang.model.api.stmt.FeatureSet;
 import org.opendaylight.yangtools.yang.model.spi.source.YangIRSchemaSource;
 import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource;
 import org.opendaylight.yangtools.yang.model.spi.source.YinDomSource;
-import org.opendaylight.yangtools.yang.model.spi.source.YinTextSource;
 import org.opendaylight.yangtools.yang.model.spi.source.YinXmlSource;
 import org.opendaylight.yangtools.yang.parser.api.YangParser;
 import org.opendaylight.yangtools.yang.parser.api.YangParserException;
index f4921d0e1c1c16f9b1b6d17270f5b93b122edcea..b6c9bf5c2569fba6d3bf721dd6e3af54ea140a45 100644 (file)
@@ -13,11 +13,11 @@ import java.io.IOException;
 import javax.xml.parsers.SAXParser;
 import javax.xml.transform.dom.DOMSource;
 import org.opendaylight.yangtools.util.xml.UntrustedXML;
+import org.opendaylight.yangtools.yang.model.api.source.YinTextSource;
 import org.opendaylight.yangtools.yang.model.repo.api.SchemaRepository;
 import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceRegistry;
 import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceTransformer;
 import org.opendaylight.yangtools.yang.model.spi.source.YinDomSource;
-import org.opendaylight.yangtools.yang.model.spi.source.YinTextSource;
 import org.w3c.dom.Document;
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.DefaultHandler;
index e36577b76270280d583a6c02231b87f71971a487..eec1dff6987733821e2004fbbcd66ca931556397 100644 (file)
@@ -23,10 +23,10 @@ import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.ModuleImport;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.source.YinTextSource;
 import org.opendaylight.yangtools.yang.model.api.stmt.FeatureSet;
 import org.opendaylight.yangtools.yang.model.spi.source.FileYinTextSource;
 import org.opendaylight.yangtools.yang.model.spi.source.YangTextSource;
-import org.opendaylight.yangtools.yang.model.spi.source.YinTextSource;
 import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors;
 import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangStatementStreamSource;
 import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YinStatementStreamSource;