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));

Reply via email to