Add JSONCodec.parseValue(String) 59/111159/1
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 1 Apr 2024 18:12:36 +0000 (20:12 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 1 Apr 2024 18:33:16 +0000 (20:33 +0200)
JSONCodec's parsing does not have a document context, add convenience
a convenience method.

JIRA: YANGTOOLS-1567
Change-Id: Iae1329be54bcb2f9249d0a159b4aa316be2e8d3d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
codec/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/AbstractJSONCodec.java
codec/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/EmptyJSONCodec.java
codec/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/IdentityrefJSONCodec.java
codec/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONCodec.java
codec/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONInstanceIdentifierCodec.java
codec/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JsonParserStream.java
codec/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/NullJSONCodec.java
codec/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/UnionJSONCodec.java
codec/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/YT1473Test.java

index a7c6cf94094255501f65f9b9434a951e1b1ec0e8..9ae8dadd681fd022fd9478e5091c7af3553a4a44 100644 (file)
@@ -31,7 +31,7 @@ abstract sealed class AbstractJSONCodec<T> implements JSONCodec<T>
     }
 
     @Override
-    public final T parseValue(final Object ctx, final String str) {
+    public final T parseValue(final String str) {
         return codec.deserialize(str);
     }
 
index 3165ad072bfee59a5d5956ce5bdf47a34c993e68..260167cdf9f3d9c55ccb01c90b7f1c3f1a49f671 100644 (file)
@@ -13,11 +13,10 @@ import java.io.IOException;
 import org.opendaylight.yangtools.yang.common.Empty;
 
 final class EmptyJSONCodec implements JSONCodec<Empty> {
-
     static final EmptyJSONCodec INSTANCE = new EmptyJSONCodec();
 
     private EmptyJSONCodec() {
-
+        // Hidden on purpose
     }
 
     @Override
@@ -26,7 +25,7 @@ final class EmptyJSONCodec implements JSONCodec<Empty> {
     }
 
     @Override
-    public Empty parseValue(final Object ctx, final String input) {
+    public Empty parseValue(final String input) {
         return Empty.value();
     }
 
index b2a2df6aace7d9593682847d11db0b6efda650cf..cf4164ed4b29c105f253841e2e37e92fa6780981 100644 (file)
@@ -34,7 +34,7 @@ final class IdentityrefJSONCodec implements JSONCodec<QName> {
     }
 
     @Override
-    public QName parseValue(final Object ctx, final String value) {
+    public QName parseValue(final String value) {
         return IdentityCodecUtil.parseIdentity(value, context, prefix -> {
             if (prefix.isEmpty()) {
                 return parentModule;
index 5ddadbaef673b31745ce21363d0850d82e520ecd..f03805a31210924e728414a1266cab2bd5045342 100644 (file)
@@ -27,4 +27,24 @@ public sealed interface JSONCodec<T> extends TypeAwareCodec<T, Object, JsonWrite
      */
     @Override
     void writeValue(JsonWriter ctx, T value) throws IOException;
-}
+
+    /**
+     * {@inheritDoc}.
+     *
+     * @deprecated Use {@link #parseValue(String)} instead.
+     */
+    @Override
+    @Deprecated
+    default T parseValue(final Object ctx, final String str) {
+        return parseValue(str);
+    }
+
+    /**
+     * Parse a String representation into its native format.
+     *
+     * @param str String representation
+     * @return Value in native format
+     * @throws IllegalArgumentException if the value does not parse or pass type validation
+     */
+    T parseValue(String str);
+}
\ No newline at end of file
index ee5f777cc6cd996eaafdd7a285375f0172b1f70a..85db6d3e065dcfbd7859b41b721b3c70fca5f0b3 100644 (file)
@@ -83,9 +83,9 @@ abstract sealed class JSONInstanceIdentifierCodec extends AbstractStringInstance
             final String value) {
         requireNonNull(schemaNode, "schemaNode cannot be null");
         if (schemaNode instanceof LeafSchemaNode leafSchemaNode) {
-            return codecFactory.codecFor(leafSchemaNode, resolver).parseValue(null, value);
+            return codecFactory.codecFor(leafSchemaNode, resolver).parseValue(value);
         } else if (schemaNode instanceof LeafListSchemaNode leafListSchemaNode) {
-            return codecFactory.codecFor(leafListSchemaNode, resolver).parseValue(null, value);
+            return codecFactory.codecFor(leafListSchemaNode, resolver).parseValue(value);
         }
         throw new IllegalArgumentException("schemaNode " + schemaNode
                 + " must be of type LeafSchemaNode or LeafListSchemaNode");
@@ -97,7 +97,7 @@ abstract sealed class JSONInstanceIdentifierCodec extends AbstractStringInstance
     }
 
     @Override
-    public final YangInstanceIdentifier parseValue(final Object ctx, final String str) {
+    public final YangInstanceIdentifier parseValue(final String str) {
         return deserialize(str);
     }
 
index e117d4a28c0dc9ed221188afb86b866241f37f3b..d9d2fd1d0c1ce8bae87c309ab0dd9d7bb738bdce 100644 (file)
@@ -363,7 +363,7 @@ public final class JsonParserStream implements Closeable, Flushable {
 
     private Object translateValueByType(final String value, final DataSchemaNode node) {
         if (node instanceof TypedDataSchemaNode typedNode) {
-            return codecs.codecFor(typedNode, stack).parseValue(null, value);
+            return codecs.codecFor(typedNode, stack).parseValue(value);
         }
         throw new IllegalArgumentException("Unexpected node " + node);
     }
index 79861b3babc78fa39a3a2944dcdce7d44f759f05..a4fa1fcb7afa15e15999dfeb8fb1a76a82c48b32 100644 (file)
@@ -26,7 +26,7 @@ final class NullJSONCodec implements JSONCodec<Object> {
     }
 
     @Override
-    public Object parseValue(final Object ctx, final String str) {
+    public Object parseValue(final String str) {
         LOG.warn("Call of the deserializeString method on null codec. No operation performed.");
         return null;
     }
index 053fa6c764277d85cb4d70ad9a01136a61665179..7991fc5152397f87843bf30acdeacb35d166e692 100644 (file)
@@ -79,11 +79,11 @@ abstract sealed class UnionJSONCodec<T> implements JSONCodec<T> {
 
     @Override
     @SuppressWarnings("checkstyle:illegalCatch")
-    public final T parseValue(final Object ctx, final String str) {
-        for (JSONCodec<?> codec : codecs) {
+    public final T parseValue(final String str) {
+        for (var codec : codecs) {
             final Object ret;
             try {
-                ret = codec.parseValue(ctx, str);
+                ret = codec.parseValue(str);
             } catch (RuntimeException e) {
                 LOG.debug("Codec {} did not accept input '{}'", codec, str, e);
                 continue;
@@ -98,14 +98,14 @@ abstract sealed class UnionJSONCodec<T> implements JSONCodec<T> {
     @Override
     @SuppressWarnings("checkstyle:illegalCatch")
     public final void writeValue(final JsonWriter ctx, final T value) throws IOException {
-        for (JSONCodec<?> codec : codecs) {
+        for (var codec : codecs) {
             if (!codec.getDataType().isInstance(value)) {
                 LOG.debug("Codec {} cannot accept input {}, skipping it", codec, value);
                 continue;
             }
 
             @SuppressWarnings("unchecked")
-            final JSONCodec<Object> objCodec = (JSONCodec<Object>) codec;
+            final var objCodec = (JSONCodec<Object>) codec;
             try {
                 objCodec.writeValue(ctx, value);
                 return;
index 5e968223d361d4f6e7f44ec346a4cd8df7786849..b3a0904fc05204188bc358d8793d8622bf475f94 100644 (file)
@@ -218,7 +218,7 @@ class YT1473Test {
         verify(writer).value(captor.capture());
 
         assertEquals(expected, captor.getValue());
-        assertEquals(id, CODEC.parseValue(null, expected));
+        assertEquals(id, CODEC.parseValue(expected));
     }
 
     private static YangInstanceIdentifier buildYangInstanceIdentifier(final QName node, final QName key,