You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/10/07 10:39:10 UTC

[isis] 01/02: ISIS-2441: use _Result instead of _Either when applicable

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch 2441-auditing
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 292afbade9569609f2e9e5936943a61db3a64842
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Oct 7 11:18:30 2020 +0200

    ISIS-2441: use _Result instead of _Either when applicable
---
 .../isis/commons/internal/resources/_Json.java     | 82 ++++++----------------
 .../isis/commons/internal/resources/_Yaml.java     | 34 +++------
 .../viewer/resources/ObjectActionArgHelper.java    | 33 ++++-----
 3 files changed, 47 insertions(+), 102 deletions(-)

diff --git a/commons/src/main/java/org/apache/isis/commons/internal/resources/_Json.java b/commons/src/main/java/org/apache/isis/commons/internal/resources/_Json.java
index 348335c..5b763f1 100644
--- a/commons/src/main/java/org/apache/isis/commons/internal/resources/_Json.java
+++ b/commons/src/main/java/org/apache/isis/commons/internal/resources/_Json.java
@@ -29,7 +29,7 @@ import com.fasterxml.jackson.databind.JsonMappingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
 
-import org.apache.isis.commons.internal.base._Either;
+import org.apache.isis.commons.internal.base._Result;
 
 import lombok.val;
 
@@ -73,12 +73,8 @@ public class _Json {
      * @param content
      * @return
      */
-    public static <T> _Either<T, Exception> tryReadJson(final Class<T> clazz, InputStream content) {
-        try {
-            return _Either.left(readJson(clazz, content));
-        } catch (Exception e) {
-            return _Either.right(e);
-        }
+    public static <T> _Result<T> tryReadJson(final Class<T> clazz, InputStream content) {
+        return _Result.of(()->readJson(clazz, content));
     }
 
     /**
@@ -108,12 +104,8 @@ public class _Json {
      * @param content
      * @return
      */
-    public static <T> _Either<List<T>, Exception> tryReadJsonList(final Class<T> clazz, InputStream content) {
-        try {
-            return _Either.left(readJsonList(clazz, content));
-        } catch (Exception e) {
-            return _Either.right(e);
-        }
+    public static <T> _Result<List<T>> tryReadJsonList(final Class<T> clazz, InputStream content) {
+        return _Result.of(()->readJsonList(clazz, content));
     }
 
 
@@ -144,12 +136,8 @@ public class _Json {
      * @param content
      * @return
      */
-    public static <T> _Either<T, Exception> tryReadJson(final Class<T> clazz, String content) {
-        try {
-            return _Either.left(readJson(clazz, content));
-        } catch (Exception e) {
-            return _Either.right(e);
-        }
+    public static <T> _Result<T> tryReadJson(final Class<T> clazz, String content) {
+        return _Result.of(()->readJson(clazz, content));
     }
 
     /**
@@ -179,12 +167,8 @@ public class _Json {
      * @param content
      * @return
      */
-    public static <T> _Either<List<T>, Exception> tryReadJsonList(final Class<T> clazz, String content) {
-        try {
-            return _Either.left(readJsonList(clazz, content));
-        } catch (Exception e) {
-            return _Either.right(e);
-        }
+    public static <T> _Result<List<T>> tryReadJsonList(final Class<T> clazz, String content) {
+        return _Result.of(()->readJsonList(clazz, content));
     }
 
 
@@ -215,12 +199,8 @@ public class _Json {
      * @param content
      * @return
      */
-    public static <T> _Either<T, Exception> tryReadJson(final Class<T> clazz, File content) {
-        try {
-            return _Either.left(readJson(clazz, content));
-        } catch (Exception e) {
-            return _Either.right(e);
-        }
+    public static <T> _Result<T> tryReadJson(final Class<T> clazz, File content) {
+        return _Result.of(()->readJson(clazz, content));
     }
 
     /**
@@ -250,12 +230,8 @@ public class _Json {
      * @param content
      * @return
      */
-    public static <T> _Either<List<T>, Exception> tryReadJsonList(final Class<T> clazz, File content) {
-        try {
-            return _Either.left(readJsonList(clazz, content));
-        } catch (Exception e) {
-            return _Either.right(e);
-        }
+    public static <T> _Result<List<T>> tryReadJsonList(final Class<T> clazz, File content) {
+        return _Result.of(()->readJsonList(clazz, content));
     }
 
     // -- BYTE CONTENT
@@ -285,12 +261,8 @@ public class _Json {
      * @param content
      * @return
      */
-    public static <T> _Either<T, Exception> tryReadJson(final Class<T> clazz, byte[] content) {
-        try {
-            return _Either.left(readJson(clazz, content));
-        } catch (Exception e) {
-            return _Either.right(e);
-        }
+    public static <T> _Result<T> tryReadJson(final Class<T> clazz, byte[] content) {
+        return _Result.of(()->readJson(clazz, content));
     }
 
     /**
@@ -320,12 +292,8 @@ public class _Json {
      * @param content
      * @return
      */
-    public static <T> _Either<List<T>, Exception> tryReadJsonList(final Class<T> clazz, byte[] content) {
-        try {
-            return _Either.left(readJsonList(clazz, content));
-        } catch (Exception e) {
-            return _Either.right(e);
-        }
+    public static <T> _Result<List<T>> tryReadJsonList(final Class<T> clazz, byte[] content) {
+        return _Result.of(()->readJsonList(clazz, content));
     }
     
     // -- WRITING
@@ -341,20 +309,12 @@ public class _Json {
         return toString(objectMapper, pojo);
     }
     
-    public static <T> _Either<String, Exception> tryToString(ObjectMapper objectMapper, Object pojo) {
-        try {
-            return _Either.left(toString(objectMapper, pojo));
-        } catch (Exception e) {
-            return _Either.right(e);
-        }
+    public static <T> _Result<String> tryToString(ObjectMapper objectMapper, Object pojo) {
+        return _Result.of(()->toString(objectMapper, pojo));
     }
     
-    public static <T> _Either<String, Exception> tryToString(Object pojo) {
-        try {
-            return _Either.left(toString(pojo));
-        } catch (Exception e) {
-            return _Either.right(e);
-        }
+    public static <T> _Result<String> tryToString(Object pojo) {
+        return _Result.of(()->toString(pojo));
     }
 
 }
diff --git a/commons/src/main/java/org/apache/isis/commons/internal/resources/_Yaml.java b/commons/src/main/java/org/apache/isis/commons/internal/resources/_Yaml.java
index 3f9a076..9d15e02 100644
--- a/commons/src/main/java/org/apache/isis/commons/internal/resources/_Yaml.java
+++ b/commons/src/main/java/org/apache/isis/commons/internal/resources/_Yaml.java
@@ -28,7 +28,7 @@ import java.io.InputStream;
 import org.yaml.snakeyaml.Yaml;
 import org.yaml.snakeyaml.constructor.Constructor;
 
-import org.apache.isis.commons.internal.base._Either;
+import org.apache.isis.commons.internal.base._Result;
 
 import lombok.val;
 
@@ -68,12 +68,8 @@ public class _Yaml {
      * @param content
      * @return
      */
-    public static <T> _Either<T, Exception> tryReadYaml(final Class<T> clazz, InputStream content) {
-        try {
-            return _Either.left(readYaml(clazz, content));
-        } catch (Exception e) {
-            return _Either.right(e);
-        }
+    public static <T> _Result<T> tryReadYaml(final Class<T> clazz, InputStream content) {
+        return _Result.of(()->readYaml(clazz, content));
     }
     
     // -- FROM STRING
@@ -99,12 +95,8 @@ public class _Yaml {
      * @param content
      * @return
      */
-    public static <T> _Either<T, Exception> tryReadYaml(final Class<T> clazz, String content) {
-        try {
-            return _Either.left(readYaml(clazz, content));
-        } catch (Exception e) {
-            return _Either.right(e);
-        }
+    public static <T> _Result<T> tryReadYaml(final Class<T> clazz, String content) {
+        return _Result.of(()->readYaml(clazz, content));
     }
     
     // -- FROM FILE
@@ -134,12 +126,8 @@ public class _Yaml {
      * @param content
      * @return
      */
-    public static <T> _Either<T, Exception> tryReadYaml(final Class<T> clazz, File content) {
-        try {
-            return _Either.left(readYaml(clazz, content));
-        } catch (Exception e) {
-            return _Either.right(e);
-        }
+    public static <T> _Result<T> tryReadYaml(final Class<T> clazz, File content) {
+        return _Result.of(()->readYaml(clazz, content));
     }
     
     // -- FROM BYTE ARRAY
@@ -168,12 +156,8 @@ public class _Yaml {
      * @param content
      * @return
      */
-    public static <T> _Either<T, Exception> tryReadYaml(final Class<T> clazz, byte[] content) {
-        try {
-            return _Either.left(readYaml(clazz, content));
-        } catch (Exception e) {
-            return _Either.right(e);
-        }
+    public static <T> _Result<T> tryReadYaml(final Class<T> clazz, byte[] content) {
+        return _Result.of(()->readYaml(clazz, content));
     }
     
 }
diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/ObjectActionArgHelper.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/ObjectActionArgHelper.java
index 819e546..037791e 100644
--- a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/ObjectActionArgHelper.java
+++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/ObjectActionArgHelper.java
@@ -23,6 +23,7 @@ import java.util.Map;
 
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.base._Either;
+import org.apache.isis.commons.internal.base._Result;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.metamodel.interactions.managed.InteractionVeto;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
@@ -54,23 +55,23 @@ public class ObjectActionArgHelper {
         val parameters = action.getParameters();
         for (int i = 0; i < jsonArgList.size(); i++) {
             final JsonRepresentation argRepr = jsonArgList.get(i);
-            val paramMeta = parameters.getElseFail(i);
+            final int argIndex = i;
+            val paramMeta = parameters.getElseFail(argIndex);
             val paramSpec = paramMeta.getSpecification();
-            try {
-                if(paramMeta.isOptional() && argRepr == null) {
-                    argAdapters.add(_Either.leftNullable(ManagedObject.empty(paramSpec)));
-                } else {
-                    val argAdapter = new JsonParserHelper(resourceContext, paramSpec)
-                            .objectAdapterFor(argRepr);
-                    argAdapters.add(_Either.left(argAdapter));
-                }
-            } catch (Exception e) {
-                
-                val veto = InteractionVeto.actionParamInvalid(
-                        String.format("exception when parsing paramNr %d [%s]: %s", i, argRepr, e));
-                
-                argAdapters.add(_Either.right(veto));
-            }
+            
+            val objectOrVeto = _Result.of(()->
+                    (paramMeta.isOptional() && argRepr == null) 
+                    ? ManagedObject.empty(paramSpec)
+                    : new JsonParserHelper(resourceContext, paramSpec)
+                            .objectAdapterFor(argRepr))
+            .<_Either<ManagedObject, InteractionVeto>>fold(
+                    _Either::left, 
+                    exception->_Either.right(
+                            InteractionVeto.actionParamInvalid(
+                                    String.format("exception when parsing paramNr %d [%s]: %s", 
+                                            argIndex, argRepr, exception))));
+            
+            argAdapters.add(objectOrVeto);
         }
         return Can.ofCollection(argAdapters);
     }