Add ImmediateYangTextSchemaSource 02/105802/3
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 3 May 2023 01:36:25 +0000 (03:36 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 3 May 2023 02:12:45 +0000 (04:12 +0200)
Add ImmediateYangTextSchemaSource, which has the backing bytes readily
available. This is open for extension, making it useable in the context
of NETCONF's CachedYangTextSchemaSource.

While we are at it, we clean up how addToStringAttributes() works,
making it optional to implement it.

JIRA: YANGTOOLS-1507
Change-Id: I8a97549993a276bb419383a0d9b3eea031866d64
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/DelegatedYangTextSchemaSource.java
yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/DelegatedYinTextSchemaSource.java
yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/ImmediateYangTextSchemaSource.java [new file with mode: 0644]
yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/ResourceYangTextSchemaSource.java
yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/ResourceYinTextSchemaSource.java
yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YangTextFileSchemaSource.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/YinTextFileSchemaSource.java
yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/YinTextSchemaSource.java

index c2c6d02625f3abbeb007fca73d66d2dc538efd74..26e5bc7221852adcf08138c1e132370af1c34ef5 100644 (file)
@@ -42,6 +42,6 @@ final class DelegatedYangTextSchemaSource extends YangTextSchemaSource implement
 
     @Override
     protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
-        return toStringHelper.add("delegate", delegate);
+        return super.addToStringAttributes(toStringHelper).add("delegate", delegate);
     }
 }
index d88b912d6457a9f63bc63d1bf7a36c266156bda4..83e802dac758a9998bc3bce0a55594eaa85d625e 100644 (file)
@@ -42,6 +42,6 @@ final class DelegatedYinTextSchemaSource extends YinTextSchemaSource implements
 
     @Override
     protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
-        return toStringHelper.add("delegate", delegate);
+        return super.addToStringAttributes(toStringHelper).add("delegate", delegate);
     }
 }
diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/ImmediateYangTextSchemaSource.java b/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/ImmediateYangTextSchemaSource.java
new file mode 100644 (file)
index 0000000..c3f5f2a
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2023 PANTHEON.tech, s.r.o. 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 java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+
+/**
+ * A {@link YangTextSchemaSource} with content readily available.
+ */
+public class ImmediateYangTextSchemaSource extends YangTextSchemaSource {
+    private final @Nullable String symbolicName;
+    private final byte @NonNull [] bytes;
+
+    public ImmediateYangTextSchemaSource(final SourceIdentifier identifier, final byte[] bytes) {
+        this(identifier, bytes, null);
+    }
+
+    public ImmediateYangTextSchemaSource(final SourceIdentifier identifier, final byte[] bytes,
+            final @Nullable String symbolicName) {
+        super(identifier);
+        this.bytes = bytes.clone();
+        this.symbolicName = symbolicName;
+    }
+
+    @Override
+    public final Optional<String> getSymbolicName() {
+        return Optional.ofNullable(symbolicName);
+    }
+
+    @Override
+    public final InputStream openStream() {
+        return new ByteArrayInputStream(bytes);
+    }
+}
index 8250fedada9d6021ae033226a0420ca7f94a95c6..7eef2ff028ffa39b8b060fbc051cf3a6719189f2 100644 (file)
@@ -35,7 +35,7 @@ final class ResourceYangTextSchemaSource extends YangTextSchemaSource implements
 
     @Override
     protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
-        return toStringHelper.add("url", url);
+        return super.addToStringAttributes(toStringHelper).add("url", url);
     }
 
     @Override
index e929ae947c013602be309bc432e3403ee8c211ca..0713ff9b799b9f11f9337372ae9c8ad429df4e30 100644 (file)
@@ -35,7 +35,7 @@ final class ResourceYinTextSchemaSource extends YinTextSchemaSource implements D
 
     @Override
     protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
-        return toStringHelper.add("url", url);
+        return super.addToStringAttributes(toStringHelper).add("url", url);
     }
 
     @Override
index fb795c29b14a2d5cfeffdd4cb00512f54d115b7a..6821e1a0164446751599d6f1945cf7480b807c2e 100644 (file)
@@ -43,7 +43,7 @@ final class YangTextFileSchemaSource extends YangTextSchemaSource implements Del
 
     @Override
     protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
-        return toStringHelper.add("path", path);
+        return super.addToStringAttributes(toStringHelper).add("path", path);
     }
 
     @Override
index 907450dbaebd0101c2294097ec48c7a8b2f73974..1300faeb71a2f0381b57fee1ecab18053ec40780 100644 (file)
@@ -150,7 +150,7 @@ public abstract class YangTextSchemaSource extends ByteSource implements YangSch
 
     @Override
     public final String toString() {
-        return addToStringAttributes(MoreObjects.toStringHelper(this).add("identifier", identifier)).toString();
+        return addToStringAttributes(MoreObjects.toStringHelper(this).omitNullValues()).toString();
     }
 
     /**
@@ -162,5 +162,7 @@ public abstract class YangTextSchemaSource extends ByteSource implements YangSch
      * @param toStringHelper ToStringHelper onto the attributes can be added
      * @return ToStringHelper supplied as input argument.
      */
-    protected abstract ToStringHelper addToStringAttributes(ToStringHelper toStringHelper);
+    protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
+        return toStringHelper.add("identifier", identifier);
+    }
 }
index 13362bd24cdb37207e1ab17c93ca8ee89c9fb5ff..10b993e02f209c07893ca1584a72c111713d2cda 100644 (file)
@@ -43,7 +43,7 @@ final class YinTextFileSchemaSource extends YinTextSchemaSource implements Deleg
 
     @Override
     protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
-        return toStringHelper.add("path", path);
+        return super.addToStringAttributes(toStringHelper).add("path", path);
     }
 
     @Override
index 27db51f28c7253969a19d18f05826cc66679d83b..9fc0f6254cb85697f1b7b5c2de65acb8de3c9beb 100644 (file)
@@ -66,7 +66,7 @@ public abstract class YinTextSchemaSource extends ByteSource implements YinSchem
 
     @Override
     public final String toString() {
-        return addToStringAttributes(MoreObjects.toStringHelper(this).add("identifier", identifier)).toString();
+        return addToStringAttributes(MoreObjects.toStringHelper(this).omitNullValues()).toString();
     }
 
     /**
@@ -78,7 +78,9 @@ public abstract class YinTextSchemaSource extends ByteSource implements YinSchem
      * @param toStringHelper ToStringHelper onto the attributes can be added
      * @return ToStringHelper supplied as input argument.
      */
-    protected abstract ToStringHelper addToStringAttributes(@NonNull ToStringHelper toStringHelper);
+    protected ToStringHelper addToStringAttributes(final @NonNull ToStringHelper toStringHelper) {
+        return toStringHelper.add("identifier", identifier);
+    }
 
     /**
      * Create a new YinTextSchemaSource with a specific source identifier and backed