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/03/03 19:32:52 UTC

[isis] branch master updated: ISIS-2877: various regr. fixes

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 d01f223  ISIS-2877: various regr. fixes
d01f223 is described below

commit d01f223fc8d391a2627e26ad863280b567b33a7e
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Mar 3 20:30:36 2022 +0100

    ISIS-2877: various regr. fixes
    
    - also properly cancel scalar model edit when on inline prompt
---
 .../wicket/model/models/InlinePromptContext.java   | 28 +++++++-
 .../viewer/wicket/model/models/ScalarModel.java    |  1 +
 .../ui/components/scalars/ScalarPanelAbstract.java | 82 ++++++++++++----------
 .../blobclob/IsisBlobOrClobPanelAbstract.java      |  3 +-
 .../components/scalars/primitive/BooleanPanel.java |  6 +-
 .../widgets/linkandlabel/ActionLink.java           |  4 +-
 .../wicket/ui/panels/PromptFormAbstract.java       | 25 +------
 7 files changed, 78 insertions(+), 71 deletions(-)

diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/InlinePromptContext.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/InlinePromptContext.java
index 34fbf36..fffe4d7 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/InlinePromptContext.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/InlinePromptContext.java
@@ -24,22 +24,44 @@ import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 
+import org.apache.isis.commons.internal.base._Either;
+import org.apache.isis.commons.internal.functions._Functions;
+
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import lombok.val;
 
-@Getter
 @RequiredArgsConstructor
 public class InlinePromptContext implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
+    private final ScalarModel scalarModel;
+
+    @Getter
+    private final MarkupContainer scalarTypeContainer;
+
     private final Component scalarIfRegular;
     private final WebMarkupContainer scalarIfRegularInlinePromptForm;
-    private final MarkupContainer scalarTypeContainer;
 
-    public void onCancel() {
+    public void onPrompt() {
+        scalarIfRegular.setVisible(false);
+        scalarIfRegularInlinePromptForm.setVisible(true);
+    }
+
+    public void onCancel(final _Either<ActionModel, ScalarPropertyModel> memberModel) {
+
+        memberModel
+        .accept(_Functions.noopConsumer(), prop->{
+            // reset the UI form input field to the untouched property value
+            val untouchedPropertyValue = prop.getManagedProperty().getPropertyValue();
+            scalarModel.setObject(untouchedPropertyValue);
+        });
+
         scalarIfRegular.setVisible(true);
         scalarIfRegularInlinePromptForm.setVisible(false);
+
     }
 
+
 }
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index 5c08c09..f4ee515 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -350,4 +350,5 @@ implements HasRenderingHints, ScalarUiModel, LinksProvider, FormExecutorContext
     }
 
 
+
 }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 09d0528..e4d8c43 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -106,10 +106,10 @@ implements ScalarModelSubscriber, HasScalarModel {
      */
     public static final String ID_SCALAR_IF_REGULAR_INLINE_PROMPT_FORM = "scalarIfRegularInlinePromptForm";
 
-    private static final String ID_EDIT_PROPERTY = "editProperty";
-    private static final String ID_FEEDBACK = "feedback";
-    private static final String ID_ASSOCIATED_ACTION_LINKS_BELOW = "associatedActionLinksBelow";
-    private static final String ID_ASSOCIATED_ACTION_LINKS_RIGHT = "associatedActionLinksRight";
+    protected static final String ID_EDIT_PROPERTY = "editProperty";
+    protected static final String ID_FEEDBACK = "feedback";
+    protected static final String ID_ASSOCIATED_ACTION_LINKS_BELOW = "associatedActionLinksBelow";
+    protected static final String ID_ASSOCIATED_ACTION_LINKS_RIGHT = "associatedActionLinksRight";
 
     public enum Repaint {
         ENTIRE_FORM,
@@ -326,31 +326,37 @@ implements ScalarModelSubscriber, HasScalarModel {
             componentIfCompact = createShallowComponentForCompact();
             componentIfRegular.setVisible(true);
             componentIfCompact.setVisible(false);
+            componentIfRegular.setOutputMarkupId(true); // enable as AJAX target
+
+            scalarTypeContainer.addOrReplace(componentIfCompact, componentIfRegular,
+                    scalarIfRegularInlinePromptForm = createInlinePromptForm());
+
+            // even if this particular scalarModel (property) is not configured for inline edits,
+            // it's possible that one of the associated actions is.  Thus we set the prompt context
+            scalarModel.setInlinePromptContext(
+                    new InlinePromptContext(
+                            scalarModel,
+                            scalarTypeContainer,
+                            getComponentForRegular(), scalarIfRegularInlinePromptForm));
+
+            val associatedLinksAndLabels = associatedLinksAndLabels();
+            addPositioningCssTo(componentIfRegular, associatedLinksAndLabels);
+            addActionLinksBelowAndRight(componentIfRegular, associatedLinksAndLabels);
+
+            addFeedbackOnlyTo(componentIfRegular, getValidationFeedbackReceiver());
+
             break;
         default:
             componentIfRegular = createShallowComponentForRegular();
             componentIfCompact = createComponentForCompact();
             componentIfRegular.setVisible(false);
             componentIfCompact.setVisible(true);
-            break;
-        }
-
-        componentIfRegular.setOutputMarkupId(true); // enable as AJAX target
 
-        scalarTypeContainer.addOrReplace(componentIfCompact, componentIfRegular,
-                scalarIfRegularInlinePromptForm = createInlinePromptForm());
+            scalarTypeContainer.addOrReplace(componentIfCompact, componentIfRegular,
+                    scalarIfRegularInlinePromptForm = createInlinePromptForm());
 
-        // find associated actions for this scalar property (only properties will have any.)
-        final ScalarModel.AssociatedActions associatedActions =
-                scalarModel.getAssociatedActions();
-        val inlineActionIfAny =
-                associatedActions.getFirstAssociatedWithInlineAsIfEdit();
-        val remainingAssociated = associatedActions.getRemainingAssociated();
-
-        // convert those actions into UI layer widgets
-        final Can<LinkAndLabel> remainingLinkAndLabels = remainingAssociated.stream()
-        .map(LinkAndLabelFactory.forPropertyOrParameter(scalarModel))
-        .collect(Can.toCan());
+            break;
+        }
 
         val inlinePromptConfig = getInlinePromptConfig();
         if(inlinePromptConfig.isSupported()) {
@@ -358,13 +364,6 @@ implements ScalarModelSubscriber, HasScalarModel {
             componentIfRegular
                 .add(inlinePromptLink = createInlinePromptLink());
 
-            // even if this particular scalarModel (property) is not configured for inline edits,
-            // it's possible that one of the associated actions is.  Thus we set the prompt context
-            scalarModel.setInlinePromptContext(
-                    new InlinePromptContext(
-                            getComponentForRegular(),
-                            scalarIfRegularInlinePromptForm, scalarTypeContainer));
-
             // start off assuming that neither the property nor any of the associated actions
             // are using inline prompts
 
@@ -378,6 +377,9 @@ implements ScalarModelSubscriber, HasScalarModel {
 
             } else {
 
+                val inlineActionIfAny =
+                        scalarModel.getAssociatedActions().getFirstAssociatedWithInlineAsIfEdit();
+
                 // not editable property, but maybe one of the actions is.
                 inlineActionIfAny
                 .map(LinkAndLabelFactory.forPropertyOrParameter(scalarModel))
@@ -404,18 +406,22 @@ implements ScalarModelSubscriber, HasScalarModel {
             Wkt.noTabbing(getValidationFeedbackReceiver());
         }
 
-        addPositioningCssTo(componentIfRegular, remainingLinkAndLabels);
-        addActionLinksBelowAndRight(componentIfRegular, remainingLinkAndLabels);
-
-        addEditPropertyTo(componentIfRegular);
-        addFeedbackOnlyTo(componentIfRegular, getValidationFeedbackReceiver());
-
+        addEditProperty();
         addCssFromMetaModel();
 
         notifyOnChange(this);
         addFormComponentBehaviourToUpdateSubscribers();
     }
 
+    private Can<LinkAndLabel> associatedLinksAndLabels() {
+        // find associated actions for this scalar property (only properties will have any.)
+        // convert those actions into UI layer widgets
+        return scalarModel.getAssociatedActions()
+                .getRemainingAssociated()
+                .stream()
+                .map(LinkAndLabelFactory.forPropertyOrParameter(scalarModel))
+                .collect(Can.toCan());
+    }
     /**
      * Builds the hidden REGULAR component when in COMPACT format.
      * <p>Is added to {@link #scalarTypeContainer}.
@@ -666,6 +672,7 @@ implements ScalarModelSubscriber, HasScalarModel {
         onSwitchFormForInlinePrompt(scalarIfRegularInlinePromptForm, target);
     }
 
+
     /**
      * Optional hook.
      */
@@ -676,16 +683,15 @@ implements ScalarModelSubscriber, HasScalarModel {
 
     // ///////////////////////////////////////////////////////////////////
 
-    protected void addEditPropertyTo(
-            final MarkupContainer scalarIfRegularFormGroup) {
+    protected void addEditProperty() {
 
         if(scalarModel.canEnterEditMode() &&
                 (scalarModel.getPromptStyle().isDialog() ||
                         !getInlinePromptConfig().isSupported())) {
-            val editProperty = Wkt.containerAdd(scalarIfRegularFormGroup, ID_EDIT_PROPERTY);
+            val editProperty = Wkt.containerAdd(componentIfRegular, ID_EDIT_PROPERTY);
             Wkt.behaviorAddOnClick(editProperty, this::onPropertyEditClick);
         } else {
-            Components.permanentlyHide(scalarIfRegularFormGroup, ID_EDIT_PROPERTY);
+            Components.permanentlyHide(componentIfRegular, ID_EDIT_PROPERTY);
         }
     }
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/blobclob/IsisBlobOrClobPanelAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/blobclob/IsisBlobOrClobPanelAbstract.java
index e25336e..8c913de 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/blobclob/IsisBlobOrClobPanelAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/blobclob/IsisBlobOrClobPanelAbstract.java
@@ -111,7 +111,8 @@ extends ScalarPanelWithFormFieldAbstract<T> {
     protected MarkupContainer createShallowComponentForRegular() {
         val shallowRegular = super.createShallowComponentForRegular();
         Components.permanentlyHide(shallowRegular,
-                ID_IMAGE, ID_SCALAR_NAME, ID_SCALAR_VALUE, "feedback");
+                ID_IMAGE, ID_SCALAR_NAME, ID_SCALAR_VALUE, ID_FEEDBACK,
+                ID_ASSOCIATED_ACTION_LINKS_BELOW, ID_ASSOCIATED_ACTION_LINKS_RIGHT);
         return shallowRegular;
     }
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
index df8cf3e..bca048eb 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
@@ -65,13 +65,13 @@ extends ScalarPanelWithFormFieldAbstract<Boolean> {
 
     @Override
     protected Component createComponentForCompact() {
-        val checkbox = Wkt.checkbox(
+        checkBox = Wkt.checkbox(
                 ID_SCALAR_IF_COMPACT,
                 BooleanModel.forScalarModel(scalarModel()),
                 scalarModel().isRequired(),
                 CheckBoxXConfig.Sizes.sm);
-        checkbox.setEnabled(false); // will be enabled before rendering if required
-        return checkbox;
+        checkBox.setEnabled(false); // will be enabled before rendering if required
+        return checkBox;
     }
 
 
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 9d55c76..39517d9 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
@@ -250,8 +250,8 @@ extends IndicatingAjaxLink<ManagedObject> {
         getComponentFactoryRegistry().addOrReplaceComponent(scalarTypeContainer,
                 ScalarPanelAbstract.ID_SCALAR_IF_REGULAR_INLINE_PROMPT_FORM, ComponentType.PARAMETERS, actionModel);
 
-        inlinePromptContext.getScalarIfRegular().setVisible(false);
-        inlinePromptContext.getScalarIfRegularInlinePromptForm().setVisible(true);
+        inlinePromptContext.onPrompt();
+
         target.add(scalarTypeContainer);
     }
 
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 937bcac..61d6cf8 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
@@ -35,19 +35,15 @@ import org.apache.isis.commons.internal.base._Either;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.debug._Probe;
 import org.apache.isis.commons.internal.debug._Probe.EntryPoint;
-import org.apache.isis.commons.internal.functions._Functions;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.metamodel.spec.ManagedObjects;
 import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 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.FormExecutorContext;
-import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.model.models.ScalarPropertyModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarModelSubscriber;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
-import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
 import org.apache.isis.viewer.wicket.ui.pages.PageAbstract;
 import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
 import org.apache.isis.viewer.wicket.ui.util.Components;
@@ -139,25 +135,6 @@ implements ScalarModelSubscriber {
                 + "action prompt.");
 
         setLastFocusHint();
-
-        getMemberModel()
-        .accept(_Functions.noopConsumer(), prop->{
-
-            // reset the UI form input field to the untouched property value
-            val scalarContainer = prop.getInlinePromptContext().getScalarIfRegular();
-            if(scalarContainer instanceof FormGroup) {
-                val scalarFormComponent = ((FormGroup)scalarContainer).getFormComponent();
-                if(scalarFormComponent.getDefaultModel() instanceof ScalarModel) {
-                    val untouchedPropertyValue = prop.getManagedProperty().getPropertyValue();
-                    scalarFormComponent.setDefaultModelObject(untouchedPropertyValue);
-                } else {
-                    val untouchedPropertyValue = ManagedObjects.UnwrapUtil
-                            .single(prop.getManagedProperty().getPropertyValue());
-                    scalarFormComponent.setDefaultModelObject(untouchedPropertyValue);
-                }
-            }
-
-        });
         completePrompt(target);
     }
 
@@ -224,7 +201,7 @@ implements ScalarModelSubscriber {
             .setVisible(false);
 
         // change visibility of inline components
-        formExecutorContext().getInlinePromptContext().onCancel();
+        formExecutorContext().getInlinePromptContext().onCancel(getMemberModel());
 
         Optional.ofNullable(formExecutorContext().getInlinePromptContext().getScalarTypeContainer())
         .ifPresent(scalarTypeContainer->{