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/09/17 14:45:37 UTC

[isis] branch master updated: ISIS-2871: UI 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 837bd88  ISIS-2871: UI fixes
837bd88 is described below

commit 837bd888f21705d9d510dc4e06670a07ad9c55df
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Sep 17 16:45:25 2021 +0200

    ISIS-2871: UI fixes
---
 .../interactions/managed/ManagedProperty.java      |  2 ++
 .../interactions/managed/_BindingUtil.java         | 10 +++++++--
 .../common/model/feature/PropertyUiModel.java      |  5 +++++
 .../viewer/wicket/model/models/ScalarModel.java    | 24 +++++++++++-----------
 .../wicket/model/models/ScalarParameterModel.java  |  6 +++---
 .../wicket/model/models/ScalarPropertyModel.java   | 24 ++++++++++++++--------
 .../property/PropertyFormExecutorStrategy.java     |  3 ++-
 7 files changed, 48 insertions(+), 26 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedProperty.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedProperty.java
index 08e5940..a9b5dc7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedProperty.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedProperty.java
@@ -165,5 +165,7 @@ extends ManagedMember {
     }
 
 
+
+
 }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/_BindingUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/_BindingUtil.java
index 9299d38..7a51263 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/_BindingUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/_BindingUtil.java
@@ -89,9 +89,15 @@ class _BindingUtil {
         return bindableValue.mapToBindable(
                 value->{
                     final var pojo = ManagedObjects.UnwrapUtil.single(value);
-                    return parser.parseableTextRepresentation(context, pojo);
+                    final var text = parser.parseableTextRepresentation(context, pojo);
+                    System.err.printf("toText: %s -> '%s'%n", ""+value, text);
+                    return text;
                 },
-                text->ManagedObject.of(spec, parser.parseTextRepresentation(context, text)));
+                text->{
+                    final var value = ManagedObject.of(spec, parser.parseTextRepresentation(context, text));
+                    System.err.printf("fromText: '%s' -> %s%n", text, ""+value);
+                    return value;
+                });
     }
 
 }
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/feature/PropertyUiModel.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/feature/PropertyUiModel.java
index 9330ab7..c538d2d 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/feature/PropertyUiModel.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/feature/PropertyUiModel.java
@@ -20,6 +20,7 @@ package org.apache.isis.viewer.common.model.feature;
 
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.core.metamodel.interactions.managed.PropertyNegotiationModel;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 
@@ -29,6 +30,10 @@ public interface PropertyUiModel extends ScalarUiModel {
     @Override
     OneToOneAssociation getMetaModel();
 
+    // -- PENDING PROPERTY VALUE MODEL
+
+    PropertyNegotiationModel getPendingPropertyModel();
+
     // -- SHORTCUTS
 
     @Override
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 4ff8339..83614ae 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
@@ -179,24 +179,24 @@ implements HasRenderingHints, ScalarUiModel, LinksProvider, FormExecutorContext
                 .anyMatch(x -> x.isAssignableFrom(scalarType));
     }
 
+    /** get the proposed value, subject to negotiation */
     public String getObjectAsString() {
-        final ManagedObject adapter = getObject();
-        if (adapter == null) {
-            return null;
-        }
-        final var spec = adapter.getSpecification();
-        if(spec.isValue()) {
-            managedValue().getValueAsParsableText().getValue();
-        }
-        return adapter.titleString();
+        final var proposedValue = proposedValue();
+        setObject(proposedValue.getValue().getValue()); // keep the wicket model in sync
+        return proposedValue.getValueAsParsableText().getValue();
     }
 
+    /**
+     * set the proposed value, subject to negotiation, only updates the negotiation model
+     * actual application of the proposed value is only applied after passing verification (not done here)
+     */
     public void setObjectAsString(final String enteredText) {
-        managedValue().getValueAsParsableText().setValue(enteredText);
-        setObject(managedValue().getValue().getValue());
+        final var proposedValue = proposedValue();
+        proposedValue.getValueAsParsableText().setValue(enteredText);
+        setObject(proposedValue.getValue().getValue()); // keep the wicket model in sync
     }
 
-    public abstract ManagedValue managedValue();
+    public abstract ManagedValue proposedValue();
 
     public abstract boolean whetherHidden();
 
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java
index 29df55e..b10acd9 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java
@@ -46,8 +46,8 @@ implements ParameterUiModel {
 
     private final ActionParameterMemento paramMemento;
 
-    @Getter(onMethod = @__(@Override))
-    @Setter(onMethod = @__(@Override))
+    @Getter(onMethod_ = {@Override})
+    @Setter(onMethod_ = {@Override})
     private transient ParameterNegotiationModel pendingParameterModel;
 
     /**
@@ -154,7 +154,7 @@ implements ParameterUiModel {
     }
 
     @Override
-    public ManagedValue managedValue() {
+    public ManagedValue proposedValue() {
         return getPendingParameterModel().getParamModels().getElseFail(paramMemento.getNumber());
     }
 
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java
index 15d419a..d4e4310 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java
@@ -42,6 +42,8 @@ implements PropertyUiModel {
 
     private final PropertyMemento propertyMemento;
 
+    private transient PropertyNegotiationModel pendingPropertyModel;
+
     /**
      * Creates a model representing a property of a parent object, with the
      * {@link #getObject() value of this model} to be current value of the
@@ -87,6 +89,14 @@ implements PropertyUiModel {
             : managedProperty;
     }
 
+    @Override
+    public PropertyNegotiationModel getPendingPropertyModel() {
+        if(pendingPropertyModel==null) {
+            pendingPropertyModel = getManagedProperty().startNegotiation();
+        }
+        return pendingPropertyModel;
+    }
+
     private ManagedProperty createManagedProperty(final @NonNull ManagedObject owner) {
         val where = this.getRenderingHint().asWhere();
         return ManagedProperty.of(owner, getMetaModel(), where);
@@ -131,15 +141,15 @@ implements PropertyUiModel {
     }
 
     public void reset() {
+        pendingPropertyModel = null; // invalidate
         val propertyValue = getManagedProperty().getPropertyValue();
-        val presentationValue = ManagedObjects.isNullOrUnspecifiedOrEmpty(propertyValue)
+        val presentedValue = ManagedObjects.isNullOrUnspecifiedOrEmpty(propertyValue)
                 ? null
                 : propertyValue;
 
-        this.setObject(presentationValue);
+        this.setObject(presentedValue);
     }
 
-
     @Override
     public ManagedObject load() {
         return loadFromSuper();
@@ -156,8 +166,7 @@ implements PropertyUiModel {
     }
 
     public String getReasonInvalidIfAny() {
-        val associate = getObject();
-        return validate(associate);
+        return getPendingPropertyModel().getValidationMessage().getValue();
     }
 
     /**
@@ -165,7 +174,6 @@ implements PropertyUiModel {
      *
      * @return adapter, which may be different from the original
      */
-    @Deprecated // use managedValue() instead
     public ManagedObject applyValue() {
         val proposedNewValue = getObject();
         getManagedProperty().modifyProperty(proposedNewValue);
@@ -173,8 +181,8 @@ implements PropertyUiModel {
     }
 
     @Override
-    public ManagedValue managedValue() {
-        return getManagedProperty().startNegotiation();
+    public ManagedValue proposedValue() {
+        return getPendingPropertyModel();
     }
 
     @Override
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyFormExecutorStrategy.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyFormExecutorStrategy.java
index 964a40e..a16a793 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyFormExecutorStrategy.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyFormExecutorStrategy.java
@@ -26,7 +26,8 @@ import org.apache.isis.viewer.wicket.model.models.ScalarPropertyModel;
 import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
 import org.apache.isis.viewer.wicket.ui.panels.FormExecutorStrategy;
 
-public class PropertyFormExecutorStrategy implements FormExecutorStrategy<ScalarPropertyModel> {
+public class PropertyFormExecutorStrategy
+implements FormExecutorStrategy<ScalarPropertyModel> {
 
     private final ScalarPropertyModel model;