You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2022/08/29 12:33:10 UTC

[isis] branch ISIS-3193 created (now 646916c30e)

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a change to branch ISIS-3193
in repository https://gitbox.apache.org/repos/asf/isis.git


      at 646916c30e ISIS-3193: introduces isDirty flag to Bindable, so that calculating dependent defaults don't overwrite

This branch includes the following new commits:

     new 646916c30e ISIS-3193: introduces isDirty flag to Bindable, so that calculating dependent defaults don't overwrite

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[isis] 01/01: ISIS-3193: introduces isDirty flag to Bindable, so that calculating dependent defaults don't overwrite

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-3193
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 646916c30e3b10bc0da04999ad5a32458e6a6c49
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Aug 29 13:32:46 2022 +0100

    ISIS-3193: introduces isDirty flag to Bindable, so that calculating dependent defaults don't overwrite
---
 .../java/org/apache/isis/commons/binding/Bindable.java |  3 +++
 .../commons/internal/binding/_BindableAbstract.java    |  7 +++++++
 .../isis/commons/internal/binding/_Bindables.java      |  2 ++
 .../ui/components/actions/ActionParametersForm.java    | 18 ++++++++++++------
 4 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/commons/src/main/java/org/apache/isis/commons/binding/Bindable.java b/commons/src/main/java/org/apache/isis/commons/binding/Bindable.java
index 86f8f85222..4b638a06b1 100644
--- a/commons/src/main/java/org/apache/isis/commons/binding/Bindable.java
+++ b/commons/src/main/java/org/apache/isis/commons/binding/Bindable.java
@@ -37,4 +37,7 @@ public interface Bindable<T> extends Observable<T>, Writable<T> {
 
     <R> Bindable<R> mapToBindable(Function<T, R> forwardMapper, Function<R, T> reverseMapper);
 
+    boolean isDirty();
+
+    void clearDirty();
 }
diff --git a/commons/src/main/java/org/apache/isis/commons/internal/binding/_BindableAbstract.java b/commons/src/main/java/org/apache/isis/commons/internal/binding/_BindableAbstract.java
index 45334960f2..23c794465e 100644
--- a/commons/src/main/java/org/apache/isis/commons/internal/binding/_BindableAbstract.java
+++ b/commons/src/main/java/org/apache/isis/commons/internal/binding/_BindableAbstract.java
@@ -29,6 +29,7 @@ import org.apache.isis.commons.binding.InvalidationListener;
 import org.apache.isis.commons.binding.Observable;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 
+import lombok.Getter;
 import lombok.NonNull;
 import lombok.Setter;
 import lombok.val;
@@ -50,6 +51,7 @@ public abstract class _BindableAbstract<T> implements Bindable<T> {
     private Observable<? extends T> observable = null;;
     private InvalidationListener invalidationListener = null;
     private boolean valid = true;
+    @Getter private boolean dirty = false;
     private InternalUtil<T> util = null;
 
     /**
@@ -120,6 +122,7 @@ public abstract class _BindableAbstract<T> implements Bindable<T> {
         val newValue = valueGuard.apply(proposedNewValue);
         if (value != newValue) {
             value = newValue;
+            dirty = true;
             markInvalid();
         }
     }
@@ -206,6 +209,10 @@ public abstract class _BindableAbstract<T> implements Bindable<T> {
         return newBindable;
     }
 
+    @Override public void clearDirty() {
+        dirty = false;
+    }
+
     // -- HELPER
 
     private void markInvalid() {
diff --git a/commons/src/main/java/org/apache/isis/commons/internal/binding/_Bindables.java b/commons/src/main/java/org/apache/isis/commons/internal/binding/_Bindables.java
index 21a0405cc2..f2e57ab668 100644
--- a/commons/src/main/java/org/apache/isis/commons/internal/binding/_Bindables.java
+++ b/commons/src/main/java/org/apache/isis/commons/internal/binding/_Bindables.java
@@ -48,12 +48,14 @@ public class _Bindables {
     public static <T> _BindableAbstract<T> forValue(final T initialValue) {
         val bindable = new SimpleBindable<T>();
         bindable.setValue(initialValue);
+        bindable.clearDirty();
         return bindable;
     }
 
     public static BooleanBindable forBoolean(final boolean initialValue) {
         val bindable = new BooleanBindable();
         bindable.setValue(initialValue);
+        bindable.clearDirty();
         return bindable;
     }
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java
index f1178501ad..f465225fe5 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java
@@ -27,11 +27,13 @@ import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.repeater.RepeatingView;
 
+import org.apache.isis.commons.binding.Bindable;
 import org.apache.isis.commons.functional.Either;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.debug._Debug;
 import org.apache.isis.commons.internal.debug.xray.XrayUi;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.core.metamodel.object.ManagedObject;
 import org.apache.isis.core.metamodel.object.ManagedObjects;
 import org.apache.isis.viewer.commons.model.PlacementDirection;
 import org.apache.isis.viewer.commons.model.components.ComponentType;
@@ -151,13 +153,17 @@ extends PromptFormAbstract<ActionModel> {
             val pendingArgs = paramModel.getParameterNegotiationModel();
 
             val actionParameter = paramModel.getMetaModel();
-            // reassess defaults
-            val paramDefaultValue = actionParameter.getDefault(pendingArgs);
 
-            if (ManagedObjects.isNullOrUnspecifiedOrEmpty(paramDefaultValue)) {
-                pendingArgs.clearParamValue(paramIndex);
-            } else {
-                pendingArgs.setParamValue(paramIndex, paramDefaultValue);
+            val bindableParamValue = pendingArgs.getBindableParamValue(paramIndex);
+            if(! bindableParamValue.isDirty()) {
+                // reassess defaults
+                val paramDefaultValue = actionParameter.getDefault(pendingArgs);
+                if (ManagedObjects.isNullOrUnspecifiedOrEmpty(paramDefaultValue)) {
+                    pendingArgs.clearParamValue(paramIndex);
+                } else {
+                    pendingArgs.setParamValue(paramIndex, paramDefaultValue);
+                }
+                bindableParamValue.clearDirty();
             }
 
             val paramPanel = paramPanels.get(paramIndex);