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 2022/04/06 08:46:35 UTC

[isis] branch master updated: ISIS-2993: adds Try.fold()

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

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


The following commit(s) were added to refs/heads/master by this push:
     new dc632e51eb ISIS-2993: adds Try.fold()
dc632e51eb is described below

commit dc632e51eb855e3c6f0852309c2faaed5a5e6aa1
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Apr 6 10:46:27 2022 +0200

    ISIS-2993: adds Try.fold()
---
 .../org/apache/isis/commons/functional/Try.java    | 24 ++++++++++++++++++++++
 .../persistence/jdo/_JdoExceptionTranslator.java   |  4 ++--
 .../persistence/jpa/_JpaExceptionTranslator.java   |  6 +++---
 .../viewer/resources/ObjectActionArgHelper.java    |  6 +++---
 4 files changed, 32 insertions(+), 8 deletions(-)

diff --git a/commons/src/main/java/org/apache/isis/commons/functional/Try.java b/commons/src/main/java/org/apache/isis/commons/functional/Try.java
index 1f373f32b1..1d5bbfc50b 100644
--- a/commons/src/main/java/org/apache/isis/commons/functional/Try.java
+++ b/commons/src/main/java/org/apache/isis/commons/functional/Try.java
@@ -125,6 +125,16 @@ public interface Try<T> {
      */
     Try<T> mapEmptyToFailure();
 
+    // -- FOLDING
+
+    /**
+     * Folds the contained {@code value} or {@code failure} to a new value of type {@code R}
+     * using according mapping function {@code successMapper} or {@code failureMapper}.
+     */
+    <R> R fold(
+            final @NonNull Function<Optional<T>, R> successMapper,
+            final @NonNull Function<Throwable, R> failureMapper);
+
     // -- CONCATENATION
 
     /**
@@ -201,6 +211,13 @@ public interface Try<T> {
             return Try.run(runnable);
         }
 
+        @Override
+        public <R> R fold(
+                final @NonNull Function<Optional<T>, R> successMapper,
+                final @NonNull Function<Throwable, R> failureMapper) {
+            return successMapper.apply(getValue());
+        }
+
     }
 
     // -- FAILURE
@@ -267,6 +284,13 @@ public interface Try<T> {
             return new Failure<>(throwable);
         }
 
+        @Override
+        public <R> R fold(
+                final @NonNull Function<Optional<T>, R> successMapper,
+                final @NonNull Function<Throwable, R> failureMapper) {
+            return failureMapper.apply(throwable);
+        }
+
     }
 
 }
diff --git a/regressiontests/stable-persistence-jdo/src/test/java/org/apache/isis/testdomain/persistence/jdo/_JdoExceptionTranslator.java b/regressiontests/stable-persistence-jdo/src/test/java/org/apache/isis/testdomain/persistence/jdo/_JdoExceptionTranslator.java
index 897d343142..78eb35485b 100644
--- a/regressiontests/stable-persistence-jdo/src/test/java/org/apache/isis/testdomain/persistence/jdo/_JdoExceptionTranslator.java
+++ b/regressiontests/stable-persistence-jdo/src/test/java/org/apache/isis/testdomain/persistence/jdo/_JdoExceptionTranslator.java
@@ -29,7 +29,7 @@ import org.springframework.dao.DataAccessException;
 
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import org.apache.isis.commons.functional.Result;
+import org.apache.isis.commons.functional.Try;
 import org.apache.isis.persistence.jdo.spring.integration.JdoTransactionManager;
 
 final class _JdoExceptionTranslator {
@@ -37,7 +37,7 @@ final class _JdoExceptionTranslator {
     // not used, but maybe keep for debugging purposes
     static DataAccessException translate(final Throwable failure, final JdoTransactionManager txManager) {
 
-        return (DataAccessException) Result.failure(failure)
+        return (DataAccessException) Try.failure(failure)
 
         //XXX seems like a bug in DN, why do we need to unwrap this?
         .mapFailure(ex->ex instanceof IllegalArgumentException
diff --git a/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/_JpaExceptionTranslator.java b/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/_JpaExceptionTranslator.java
index 380a3d3e1f..949ca5b85e 100644
--- a/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/_JpaExceptionTranslator.java
+++ b/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/_JpaExceptionTranslator.java
@@ -24,15 +24,15 @@ import org.springframework.dao.DataAccessException;
 import org.springframework.dao.support.DataAccessUtils;
 import org.springframework.orm.jpa.JpaTransactionManager;
 
-import org.apache.isis.commons.functional.Result;
+import org.apache.isis.commons.functional.Try;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 
 final class _JpaExceptionTranslator {
 
     // not used, but maybe keep for debugging purposes
-    static DataAccessException translate(Throwable failure, JpaTransactionManager txManager) {
+    static DataAccessException translate(final Throwable failure, final JpaTransactionManager txManager) {
 
-        return (DataAccessException) Result.failure(failure)
+        return (DataAccessException) Try.failure(failure)
 
         .mapFailure(ex-> _Exceptions.streamCausalChain(ex)
                 .filter(e->e instanceof RuntimeException)
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 f5a3d294f6..3c33b00214 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
@@ -22,7 +22,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.isis.commons.collections.Can;
-import org.apache.isis.commons.functional.Result;
+import org.apache.isis.commons.functional.Try;
 import org.apache.isis.commons.internal.base._Either;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.metamodel.interactions.managed.InteractionVeto;
@@ -59,13 +59,13 @@ public class ObjectActionArgHelper {
             val paramMeta = parameters.getElseFail(argIndex);
             val paramSpec = paramMeta.getElementType();
 
-            val objectOrVeto = Result.of(()->
+            val objectOrVeto = Try.call(()->
                     (paramMeta.isOptional() && argRepr == null)
                     ? ManagedObject.empty(paramSpec)
                     : new JsonParserHelper(resourceContext, paramSpec)
                             .objectAdapterFor(argRepr))
             .<_Either<ManagedObject, InteractionVeto>>fold(
-                    _Either::left,
+                    success->_Either.left(success.orElseThrow()),
                     exception->_Either.right(
                             InteractionVeto.actionParamInvalid(
                                     String.format("exception when parsing paramNr %d [%s]: %s",