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",