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/17 18:01:05 UTC
[isis] branch master updated: ISIS-2896: ManagedAction: don't memoize the head, as owner might dynamically re-attach (when entity)
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 e82715e ISIS-2896: ManagedAction: don't memoize the head, as owner might dynamically re-attach (when entity)
e82715e is described below
commit e82715ebf8089a6b93f5c62393fb353a3b4312f9
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Nov 17 18:59:48 2021 +0100
ISIS-2896: ManagedAction: don't memoize the head, as owner might
dynamically re-attach (when entity)
---
.../metamodel/interactions/managed/ManagedAction.java | 15 +++++++++------
.../interactions/managed/ParameterNegotiationModel.java | 2 +-
.../viewer/wicket/ui/panels/FormExecutorDefault.java | 16 +++++++---------
3 files changed, 17 insertions(+), 16 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedAction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedAction.java
index 91bef57..e57f4a7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedAction.java
@@ -83,7 +83,6 @@ public final class ManagedAction extends ManagedMember {
// -- IMPLEMENTATION
@Getter private final ObjectAction action;
- @Getter private final ActionInteractionHead interactionHead;
@Getter private final MultiselectChoices multiselectChoices;
private ManagedAction(
@@ -94,16 +93,20 @@ public final class ManagedAction extends ManagedMember {
super(owner, where);
this.action = action;
- this.interactionHead = action.interactionHead(owner);
this.multiselectChoices = multiselectChoices;
}
+ //ISIS-2897 ... don't memoize the head, as owner might dynamically re-attach (when entity)
+ ActionInteractionHead interactionHead() {
+ return action.interactionHead(getOwner());
+ }
+
/**
* @returns a new {@link ParameterNegotiationModel} that is associated with this managed-action;
* parameters if any are initialized with their defaults (taking into account any supporting methods)
*/
public ParameterNegotiationModel startParameterNegotiation() {
- return interactionHead.defaults(this);
+ return interactionHead().defaults(this);
}
@Override
@@ -125,7 +128,7 @@ public final class ManagedAction extends ManagedMember {
}
final ManagedObject actionResult = getAction()
- .execute(getInteractionHead(), actionParameters, InteractionInitiatedBy.USER);
+ .execute(interactionHead(), actionParameters, InteractionInitiatedBy.USER);
return _Either.left(route(actionResult));
}
@@ -140,7 +143,7 @@ public final class ManagedAction extends ManagedMember {
final ManagedObject actionResult = getAction()
.executeWithRuleChecking(
- getInteractionHead(), actionParameters, InteractionInitiatedBy.USER, getWhere());
+ interactionHead(), actionParameters, InteractionInitiatedBy.USER, getWhere());
return route(actionResult);
}
@@ -161,7 +164,7 @@ public final class ManagedAction extends ManagedMember {
val method = ((ObjectMemberAbstract)action).getFacetedMethod().getMethod();
final Object[] executionParameters = UnwrapUtil.multipleAsArray(actionParameters);
- final Object targetPojo = UnwrapUtil.single(getInteractionHead().getTarget());
+ final Object targetPojo = UnwrapUtil.single(interactionHead().getTarget());
val resultPojo = CanonicalParameterUtil
.invoke(method, targetPojo, executionParameters);
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 b6c9df2..7dc6d9d 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
@@ -73,7 +73,7 @@ public class ParameterNegotiationModel {
final @NonNull ManagedAction managedAction,
final @NonNull Can<ManagedObject> initialParamValues) {
this.managedAction = managedAction;
- this.head = managedAction.getInteractionHead(); //TODO maybe don't memoize
+ this.head = managedAction.interactionHead(); //TODO maybe don't memoize
this.validationFeedbackActive = _Bindables.forValue(false);
val paramNrIterator = IntStream.range(0, initialParamValues.size()).iterator();
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
index 77ee726..28d0c62 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
@@ -91,7 +91,13 @@ implements FormExecutor {
try {
- final Optional<Recognition> invalidReasonIfAny = getReasonInvalidIfAny();
+ final Optional<Recognition> invalidReasonIfAny = Recognition.of(
+ Category.CONSTRAINT_VIOLATION,
+ actionOrPropertyModel
+ .fold(
+ act->act.getValidityConsent().getReason(),
+ prop->prop.getReasonInvalidIfAny()));
+
if (invalidReasonIfAny.isPresent()) {
raiseWarning(ajaxTarget, feedbackFormIfAny, invalidReasonIfAny.get());
return FormExecutionOutcome.FAILURE_SO_STAY_ON_PAGE; // invalid args, stay on page
@@ -189,14 +195,6 @@ implements FormExecutor {
}
}
- private Optional<Recognition> getReasonInvalidIfAny() {
- val reason = actionOrPropertyModel
- .fold(
- act->act.getValidityConsent().getReason(),
- prop->prop.getReasonInvalidIfAny());
- return Recognition.of(Category.CONSTRAINT_VIOLATION, reason);
- }
-
// -- DEPENDENCIES
private IsisAppCommonContext getCommonContext() {