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 2021/11/11 10:57:00 UTC
[isis] branch master updated: ISIS-2877: properly handle parameter
model when value is set to null
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 e2c3c39 ISIS-2877: properly handle parameter model when value is set to null
e2c3c39 is described below
commit e2c3c398fa8a92a97412ab11b4e7d7baf07d1f36
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Nov 11 11:56:53 2021 +0100
ISIS-2877: properly handle parameter model when value is set to null
---
.../core/metamodel/commons/CanonicalParameterUtil.java | 9 +++++----
.../metamodel/interactions/managed/ActionInteraction.java | 5 ++---
.../interactions/managed/ParameterNegotiationModel.java | 14 ++++++++++++--
.../specloader/specimpl/ObjectActionParameterAbstract.java | 6 +++---
.../common/applib/mixins/Object_impersonateWithRoles.java | 2 +-
5 files changed, 23 insertions(+), 13 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/CanonicalParameterUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/CanonicalParameterUtil.java
index 5f34474..724f476 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/CanonicalParameterUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/CanonicalParameterUtil.java
@@ -55,7 +55,7 @@ public final class CanonicalParameterUtil {
// supports effective private constructors as well
return _Reflect.invokeConstructor(constructor, adaptedExecutionParameters)
- .mapFailure(ex->toVerboseException(constructor.getParameterTypes(), adaptedExecutionParameters, ex))
+ .mapFailure(ex->toVerboseException(constructor, adaptedExecutionParameters, ex))
.presentElseFail();
}
@@ -66,7 +66,7 @@ public final class CanonicalParameterUtil {
// supports effective private methods as well
return _Reflect.invokeMethodOn(method, targetPojo, adaptedExecutionParameters)
- .mapFailure(ex->toVerboseException(method.getParameterTypes(), adaptedExecutionParameters, ex))
+ .mapFailure(ex->toVerboseException(method, adaptedExecutionParameters, ex))
.optionalElseFail()
.orElse(null);
}
@@ -144,10 +144,11 @@ public final class CanonicalParameterUtil {
}
private static Throwable toVerboseException(
- final Class<?>[] parameterTypes,
+ final Executable executable,
final Object[] adaptedExecutionParameters,
final Throwable e) {
+ final Class<?>[] parameterTypes = executable.getParameterTypes();
final int expectedParamCount = _NullSafe.size(parameterTypes);
final int actualParamCount = _NullSafe.size(adaptedExecutionParameters);
if(expectedParamCount!=actualParamCount) {
@@ -188,7 +189,7 @@ public final class CanonicalParameterUtil {
}
}
if(paramTypeMismatchEncountered) {
- sb.insert(0, "expected param type mismatch\n");
+ sb.insert(0, String.format("expected param type mismatch in %s\n", executable));
return new IllegalArgumentException(sb.toString(), e);
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteraction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteraction.java
index 5ac8f08..f1fc78b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteraction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteraction.java
@@ -185,9 +185,8 @@ public final class ActionInteraction extends MemberInteraction<ManagedAction, Ac
public <X extends Throwable>
ManagedAction getManagedActionElseFail() {
- return getManagedActionElseThrow(veto->_Exceptions.unrecoverable("action vetoed: " + veto.getReason()));
+ return getManagedActionElseThrow(veto->
+ _Exceptions.unrecoverable("action vetoed: " + veto.getReason()));
}
-
-
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ParameterNegotiationModel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ParameterNegotiationModel.java
index 7c20973..0deebc0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ParameterNegotiationModel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ParameterNegotiationModel.java
@@ -18,6 +18,7 @@
*/
package org.apache.isis.core.metamodel.interactions.managed;
+import java.util.Objects;
import java.util.Optional;
import java.util.stream.IntStream;
@@ -99,9 +100,13 @@ public class ParameterNegotiationModel {
}
@NonNull public Can<ManagedObject> getParamValues() {
- return paramModels
+ return paramModels.stream()
+ .peek(x->System.err.printf("\tparam[%d]%s%n", x.getParamNr(), x.getValue().getValue()))
.map(ParameterModel::getValue)
- .map(Bindable::getValue);
+ .map(Bindable::getValue)
+ .peek(managedObj->Objects.requireNonNull(managedObj, ()->
+ String.format("param wrapper cannot be null %s", "?")))
+ .collect(Can.toCan());
}
@NonNull public ManagedObject getActionTarget() {
@@ -267,6 +272,11 @@ public class ParameterNegotiationModel {
bindableParamValue = _Bindables.forValue(initialValue);
bindableParamValue.addListener((e,o,n)->{
+ if(n==null) {
+ // lift null to empty ...
+ bindableParamValue.setValue(metaModel.getEmpty());
+ return;
+ }
getNegotiationModel().onNewParamValue();
});
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index b96b8cb..5c4b483 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -71,17 +71,17 @@ implements
protected ObjectActionParameterAbstract(
final FeatureType featureType,
- final int number,
+ final int parameterIndex,
final ObjectSpecification paramElementType,
final ObjectActionDefault objectAction) {
this.featureType = featureType;
- this.parameterIndex = number;
+ this.parameterIndex = parameterIndex;
this.parentAction = objectAction;
this.paramElementType = paramElementType;
this.javaSourceParamName =
- objectAction.getFacetedMethod().getMethod().getParameters()[number].getName();
+ objectAction.getFacetedMethod().getMethod().getParameters()[parameterIndex].getName();
}
@Override
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/applib/mixins/Object_impersonateWithRoles.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/applib/mixins/Object_impersonateWithRoles.java
index e6fb486..b6c3094 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/applib/mixins/Object_impersonateWithRoles.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/applib/mixins/Object_impersonateWithRoles.java
@@ -38,7 +38,7 @@ import lombok.RequiredArgsConstructor;
import lombok.val;
/**
- * Same as {@link ImpersonateMenu.impersonateWithRoles#act(String, List, String)},
+ * Same as {@link org.apache.isis.applib.services.user.ImpersonateMenu.impersonateWithRoles#act(String, List, String)},
* but implemented as a mixin so that can be invoked while accessing an object.
*
* @since 2.0 {@index}