This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch 2877_compound.value.types
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/2877_compound.value.types by
this push:
new a0ff472 ISIS-2871: prepare FormExecutor for a new mode
a0ff472 is described below
commit a0ff4723ed7262447a64586ab018d8d4f5eaea9b
Author: andi-huber <[email protected]>
AuthorDate: Sat Oct 23 20:10:45 2021 +0200
ISIS-2871: prepare FormExecutor for a new mode
- that is, when nested, on successful form execution, don't redirect to
a new page
---
.../isis/viewer/wicket/model/models/FormExecutor.java | 14 ++++++++++++--
.../wicket/ui/components/layout/bs3/BS3GridPanel.java | 2 +-
.../ui/components/widgets/linkandlabel/ActionLink.java | 10 ++++------
.../isis/viewer/wicket/ui/panels/FormExecutorDefault.java | 14 ++++++--------
.../isis/viewer/wicket/ui/panels/PromptFormAbstract.java | 8 +++++---
5 files changed, 28 insertions(+), 20 deletions(-)
diff --git
a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java
b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java
index 2c48892..0c9feba 100644
---
a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java
+++
b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutor.java
@@ -31,8 +31,18 @@ import org.apache.wicket.markup.html.form.Form;
*/
public interface FormExecutor extends Serializable {
- boolean executeAndProcessResults(
+ enum FormExecutionOutcome {
+ FAILURE_SO_STAY_ON_PAGE,
+ SUCCESS_SO_REDIRECT_TO_RESULT_PAGE,
+ SUCCESS_IN_NESTED_CONTEXT_SO_STAY_ON_PAGE;
+
+ public boolean isFailure() { return this == FAILURE_SO_STAY_ON_PAGE; }
+ public boolean isSuccess() { return this != FAILURE_SO_STAY_ON_PAGE; }
+ }
+
+ FormExecutionOutcome executeAndProcessResults(
final Page page,
final AjaxRequestTarget targetIfAny,
- final Form<?> feedbackFormIfAny, final boolean promptStyle);
+ final Form<?> feedbackFormIfAny,
+ final boolean promptStyle);
}
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/BS3GridPanel.java
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/BS3GridPanel.java
index 8f10e7f..5b52d4a 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/BS3GridPanel.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/BS3GridPanel.java
@@ -48,7 +48,7 @@ extends PanelAbstract<ManagedObject, EntityModel> {
private final BS3Grid bs3Page;
- public static Optional<BS3GridPanel> extraContent(final String id, final
ActionModel actionModel) {
+ public static Optional<BS3GridPanel> extraContentForMixin(final String id,
final ActionModel actionModel) {
final ObjectAction action = actionModel.getAction();
if(action instanceof ObjectActionMixedIn) {
final ObjectActionMixedIn actionMixedIn = (ObjectActionMixedIn)
action;
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
index 036eb74..fb93115 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
@@ -41,7 +41,6 @@ import
org.apache.isis.viewer.wicket.model.isis.WicketViewerSettingsAccessor;
import org.apache.isis.viewer.wicket.model.models.ActionModel;
import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
import org.apache.isis.viewer.wicket.model.models.ActionPromptWithExtraContent;
-import org.apache.isis.viewer.wicket.model.models.FormExecutor;
import org.apache.isis.viewer.wicket.model.models.PageType;
import org.apache.isis.viewer.wicket.model.util.CommonContextUtils;
import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry;
@@ -211,7 +210,7 @@ extends IndicatingAjaxLink<ManagedObject> {
castTo(actionPrompt, ActionPromptWithExtraContent.class)
.ifPresent(promptWithExtraContent->{
-
BS3GridPanel.extraContent(promptWithExtraContent.getExtraContentId(),
actionModel)
+
BS3GridPanel.extraContentForMixin(promptWithExtraContent.getExtraContentId(),
actionModel)
.ifPresent(gridPanel->promptWithExtraContent.setExtraContentPanel(gridPanel,
target));
});
}
@@ -224,11 +223,10 @@ extends IndicatingAjaxLink<ManagedObject> {
// returns true - if redirecting to new page, or repainting all
components.
// returns false - if invalid args; if concurrency exception;
- final FormExecutor formExecutor =
- new FormExecutorDefault(_Either.left(actionModel));
- boolean succeeded = formExecutor.executeAndProcessResults(page, null,
null, actionModel.isWithinPrompt());
+ val formExecutor = new FormExecutorDefault(_Either.left(actionModel));
+ val outcome = formExecutor.executeAndProcessResults(page, null, null,
actionModel.isWithinPrompt());
- if(succeeded) {
+ if(outcome.isSuccess()) {
// intercept redirect request to sign-in page
Optional.ofNullable(actionModel.getObject())
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 534c1c2..f39a403 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
@@ -35,8 +35,8 @@ import org.apache.isis.commons.internal.base._Either;
import org.apache.isis.core.metamodel.spec.ManagedObjects.EntityUtil;
import org.apache.isis.core.runtime.context.IsisAppCommonContext;
import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
-import org.apache.isis.viewer.wicket.model.models.FormExecutor;
import org.apache.isis.viewer.wicket.model.models.ActionModel;
+import org.apache.isis.viewer.wicket.model.models.FormExecutor;
import org.apache.isis.viewer.wicket.model.models.ScalarPropertyModel;
import org.apache.isis.viewer.wicket.ui.actionresponse.ActionResultResponse;
import
org.apache.isis.viewer.wicket.ui.actionresponse.ActionResultResponseType;
@@ -66,7 +66,7 @@ implements FormExecutor {
* <tt>true</tt> if redirecting to new page, or repainting all components
*/
@Override
- public boolean executeAndProcessResults(
+ public FormExecutionOutcome executeAndProcessResults(
final Page page,
final AjaxRequestTarget ajaxTarget,
final Form<?> feedbackFormIfAny,
@@ -77,7 +77,7 @@ implements FormExecutor {
final Optional<Recognition> invalidReasonIfAny =
getReasonInvalidIfAny();
if (invalidReasonIfAny.isPresent()) {
raiseWarning(ajaxTarget, feedbackFormIfAny,
invalidReasonIfAny.get());
- return false; // invalid args, stay on page
+ return FormExecutionOutcome.FAILURE_SO_STAY_ON_PAGE; //
invalid args, stay on page
}
//
@@ -103,8 +103,7 @@ implements FormExecutor {
resultAdapter);
}
- val resultResponse =
- actionOrPropertyModel.fold(
+ val resultResponse = actionOrPropertyModel.fold(
act->ActionResultResponseType
.determineAndInterpretResult(act, ajaxTarget,
resultAdapter, act.snapshotArgs()),
prop->ActionResultResponse
@@ -115,7 +114,7 @@ implements FormExecutor {
.getHandlingStrategy()
.handleResults(getCommonContext(), resultResponse);
- return true; // valid args, allow redirect
+ return FormExecutionOutcome.SUCCESS_SO_REDIRECT_TO_RESULT_PAGE; //
success (valid args), allow redirect
} catch (Throwable ex) {
@@ -130,11 +129,10 @@ implements FormExecutor {
// attempt to recognize this exception using the
ExceptionRecognizers
if(recognizeExceptionThenRaise(ex, ajaxTarget,
feedbackFormIfAny).isPresent()) {
- return false; // invalid args, stay on page
+ return FormExecutionOutcome.FAILURE_SO_STAY_ON_PAGE; //
invalid args, stay on page
}
throw ex; // redirect to the error page.
-
}
}
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
index 9879157..88c026f 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
@@ -59,6 +59,8 @@ import
org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
import org.apache.isis.viewer.wicket.ui.util.Components;
import org.apache.isis.viewer.wicket.ui.util.Wkt;
+import lombok.val;
+
public abstract class PromptFormAbstract<T extends
FormExecutorContext
& IModel<ManagedObject>>
@@ -251,10 +253,10 @@ implements ScalarModelSubscriber {
final FormExecutor formExecutor = new
FormExecutorDefault(getMemberModel());
- final boolean withinPrompt = formExecutorContext.isWithinPrompt();
- boolean succeeded =
formExecutor.executeAndProcessResults(target.getPage(), target, form,
withinPrompt);
+ val outcome = formExecutor
+ .executeAndProcessResults(target.getPage(), target, form,
formExecutorContext.isWithinPrompt());
- if (succeeded) {
+ if (outcome.isSuccess()) {
completePrompt(target);
okButton.send(target.getPage(), Broadcast.EXACT,
newCompletedEvent(target, form));