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

ahuber pushed a commit to branch 3008-wkt.vwr.broken.defaults
in repository https://gitbox.apache.org/repos/asf/causeway.git

commit eac9a59ee959f35ca2a6e4814bae7132d4b2986e
Author: andi-huber <[email protected]>
AuthorDate: Sun Apr 30 09:13:53 2023 +0200

    CAUSEWAY-3008: some minor Xray refactoring
---
 .../managed/ParameterNegotiationModel.java         |  8 ++++
 .../core/metamodel/object/MmDebugUtils.java        | 51 ++++++++++++++++------
 .../webapp/wicket/jpa/DemoAppWicketJpa.java        |  3 +-
 .../causeway/viewer/wicket/model/models/_Xray.java |  9 ++--
 .../components/actions/ActionParametersForm.java   | 26 +++++------
 .../viewer/wicket/ui/components/actions/_Xray.java |  2 +-
 .../ui/components/scalars/ScalarPanelAbstract.java |  2 +-
 .../viewer/wicket/ui/components/scalars/_Xray.java | 16 +++----
 8 files changed, 74 insertions(+), 43 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ParameterNegotiationModel.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ParameterNegotiationModel.java
index 2cfca6ce81..9fee9f92ef 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ParameterNegotiationModel.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ParameterNegotiationModel.java
@@ -252,6 +252,14 @@ public class ParameterNegotiationModel {
         return ManagedObject.adaptParameter(paramMeta, newParamValuePojo);
     }
 
+    /**
+     * Returns whether the pending parameter changed during reassessment.
+     * @see ObjectActionParameter#reassessDefault(ParameterNegotiationModel)
+     */
+    public boolean reassessDefaults(final int paramIndexForReassessment) {
+        return 
getParamMetamodel(paramIndexForReassessment).reassessDefault(this);
+    }
+
     /**
      * exposed for testing
      */
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmDebugUtils.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmDebugUtils.java
index 65760362f9..cbac3df20b 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmDebugUtils.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmDebugUtils.java
@@ -23,6 +23,7 @@ import java.util.stream.Collectors;
 import org.apache.causeway.commons.collections.Can;
 import 
org.apache.causeway.core.metamodel.interactions.managed.ManagedParameter;
 import 
org.apache.causeway.core.metamodel.interactions.managed.ParameterNegotiationModel;
+import 
org.apache.causeway.core.metamodel.interactions.managed.PropertyNegotiationModel;
 
 import lombok.Builder;
 import lombok.Value;
@@ -32,30 +33,25 @@ import lombok.experimental.UtilityClass;
 @UtilityClass
 public final class MmDebugUtils {
 
+    // -- PARAM
+
     @Value @Builder
     public static class ParamUpdateData {
-        final String action;
+        final String action; // feature-id
         final int index;
         final String name;
-        final ManagedObject pendingValue;
         final Can<? extends ManagedParameter> allParams;
         public String formatted() {
-            return String.format("%s[%d](%s->%s)\n%s",
-                    action, index, name, formatted(pendingValue),
+            return 
String.format("[actionId=%s,paramIndex=%d,paramName=%s]\n%s",
+                    action, index, name,
                     allParams.stream().map(this::formatted)
                     .collect(Collectors.joining("\n")));
         }
         String formatted(final ManagedParameter managedParam) {
-            return String.format("- param[%d] %s->%s",
+            return String.format("- param[index=%d,name=%s]: %s",
                     managedParam.getParamNr(),
                     managedParam.getFriendlyName(),
-                    formatted(managedParam.getValue().getValue()));
-        }
-        String formatted(final ManagedObject managedObject) {
-            return String.format("(%s, cls=%s, pojo=%s)",
-                    managedObject.getSpecialization().name(),
-                    managedObject.getCorrespondingClass().getName(),
-                    ""+managedObject.getPojo());
+                    formatPendingValue(managedParam.getValue().getValue()));
         }
     }
 
@@ -64,12 +60,41 @@ public final class MmDebugUtils {
             final ParameterNegotiationModel parameterNegotiationModel) {
         val param = 
parameterNegotiationModel.getParamModels().getElseFail(parameterIndex);
         return ParamUpdateData.builder()
+                .index(parameterIndex)
                 
.action(parameterNegotiationModel.getHead().getMetaModel().getId())
                 .name(param.getFriendlyName())
-                .pendingValue(param.getValue().getValue())
                 .allParams(parameterNegotiationModel.getParamModels())
                 .build();
     }
 
+    // -- PROP
+
+    @Value @Builder
+    public static class PropUpdateData {
+        final String property;  // feature-id
+        final String name;
+        final ManagedObject pendingValue;
+        public String formatted() {
+            return String.format("[propertyId=%s,propertyName=%s] -> %s)",
+                    property, name, formatPendingValue(pendingValue));
+        }
+    }
+
+    public static PropUpdateData propUpdateDataFor(final 
PropertyNegotiationModel propertyNegotiationModel) {
+        var prop = propertyNegotiationModel.getManagedProperty();
+        return PropUpdateData.builder()
+                .property(prop.getIdentifier().toString())
+                .name(prop.getFriendlyName())
+                .build();
+    }
+
+    // -- HELPER
+
+    private String formatPendingValue(final ManagedObject managedObject) {
+        return String.format("(%s,cls=%s) pojo=%s",
+                managedObject.getSpecialization().name(),
+                managedObject.getCorrespondingClass().getName(),
+                ""+managedObject.getPojo());
+    }
 
 }
diff --git 
a/examples/demo/wicket/jpa/src/main/java/demoapp/webapp/wicket/jpa/DemoAppWicketJpa.java
 
b/examples/demo/wicket/jpa/src/main/java/demoapp/webapp/wicket/jpa/DemoAppWicketJpa.java
index 39edc50d27..925ad89316 100644
--- 
a/examples/demo/wicket/jpa/src/main/java/demoapp/webapp/wicket/jpa/DemoAppWicketJpa.java
+++ 
b/examples/demo/wicket/jpa/src/main/java/demoapp/webapp/wicket/jpa/DemoAppWicketJpa.java
@@ -23,6 +23,7 @@ import 
org.springframework.boot.autoconfigure.SpringBootApplication;
 import 
org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
 import org.springframework.context.annotation.Import;
 
+import org.apache.causeway.commons.internal.debug.xray.XrayEnable;
 import org.apache.causeway.commons.internal.os._OsUtil;
 import org.apache.causeway.core.config.presets.CausewayPresets;
 import org.apache.causeway.core.config.util.SpringProfileUtil;
@@ -75,7 +76,7 @@ import demoapp.webapp.wicket.common.ui.DemoAppWicketCommon;
     CausewayModuleValMarkdownPersistenceJpa.class,
     CausewayModuleValVegaPersistenceJpa.class,
 
-    //XrayEnable.class // for debugging only
+    XrayEnable.class // for debugging only
     // WicketViewerXrayEnable.class // for debugging only
 })
 //@Log4j2
diff --git 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/_Xray.java
 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/_Xray.java
index fc7da3c2c1..3d4fd24cee 100644
--- 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/_Xray.java
+++ 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/_Xray.java
@@ -42,16 +42,17 @@ final class _Xray {
         final String updatingWhat = scalarModel.getSpecialization()
                 .fold(
                     param->
-                        String.format("param[index=%d,name=%s]", 
param.getParameterIndex(), param.getFriendlyName())
+                        String.format("param[index=%d,name=%s,changed=%b]",
+                                param.getParameterIndex(), 
param.getFriendlyName(), changed)
                     ,
                     prop->
-                        String.format("prop[name=%s]", prop.getFriendlyName())
+                        String.format("prop[name=%s,changed=%b]",
+                                prop.getFriendlyName(), changed)
                     );
 
-        _XrayEvent.event("%s Model - updating %s (changed=%b): %s -> %s",
+        _XrayEvent.user("%s Model - updating %s: %s -> %s",
                 scalarModel.isParameter() ? "Parameter" : "Property",
                 updatingWhat,
-                changed,
                 oldPojo, newPojo);
     }
 
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/actions/ActionParametersForm.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/actions/ActionParametersForm.java
index 817269225a..0afc025ea4 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/actions/ActionParametersForm.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/actions/ActionParametersForm.java
@@ -19,6 +19,7 @@
 package org.apache.causeway.viewer.wicket.ui.components.actions;
 
 import java.util.function.Consumer;
+import java.util.stream.IntStream;
 
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -26,6 +27,7 @@ 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.causeway.commons.collections.Can;
 import org.apache.causeway.commons.functional.Either;
 import org.apache.causeway.commons.internal.base._Casts;
 import org.apache.causeway.viewer.commons.model.components.UiComponentType;
@@ -130,25 +132,21 @@ extends PromptFormAbstract<ActionModel> {
         val actionModel = actionModel();
         val updatedParamModel = (UiParameter)scalarPanelUpdated.getModel();
         val paramNegotiationModel = 
updatedParamModel.getParameterNegotiationModel();
+        val pendingParamModels = 
actionModel.streamPendingParamUiModels().collect(Can.toCan());
 
-        final int paramNumberUpdated = updatedParamModel.getParameterIndex();
-        _Xray.beforeParamFormUpdate(paramNumberUpdated, paramNegotiationModel);
-
-        // only updates subsequent parameter panels starting from 
(paramNumberUpdated + 1)
-        final int skipCount = paramNumberUpdated + 1; // eg. if 
paramNumberUpdated=0 then skipCount=1
-
-        actionModel.streamPendingParamUiModels()
-        .skip(skipCount)
-        .forEach(paramModel->{
-            val paramIndexForReassessment = paramModel.getParameterIndex();
-            val paramPanel = paramPanels.get(paramIndexForReassessment);
+        final int paramIndexOfUpdated = updatedParamModel.getParameterIndex();
+        _Xray.beforeParamFormUpdate(paramIndexOfUpdated, 
paramNegotiationModel);
 
+        // only updates subsequent parameter panels starting from 
(paramIndexOfUpdated + 1)
+        IntStream.range(paramIndexOfUpdated + 1, 
paramNegotiationModel.getParamCount())
+        .forEach(paramIndexForReassessment->{
             var paramRepaint =
                     // potentially updates the paramNegotiationModel
-                    
Repaint.required(paramModel.getMetaModel().reassessDefault(paramNegotiationModel));
-
+                    
Repaint.required(paramNegotiationModel.reassessDefaults(paramIndexForReassessment));
             _Xray.reassessedDefault(paramIndexForReassessment, 
paramNegotiationModel);
 
+            val paramPanel = paramPanels.get(paramIndexForReassessment);
+            val paramModel = 
pendingParamModels.getElseFail(paramIndexForReassessment);
             /* repaint is required, either because of a changed value during 
reassessment above
              * or because visibility or usability have changed */
             paramRepaint = paramRepaint.max(
@@ -159,7 +157,7 @@ extends PromptFormAbstract<ActionModel> {
             }
         });
 
-        _Xray.afterParamFormUpdate(paramNumberUpdated, paramNegotiationModel);
+        _Xray.afterParamFormUpdate(paramIndexOfUpdated, paramNegotiationModel);
 
         // previously this method was also doing:
         // target.add(this);
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/actions/_Xray.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/actions/_Xray.java
index 44ede9ef76..a8334c08a4 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/actions/_Xray.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/actions/_Xray.java
@@ -47,7 +47,7 @@ final class _Xray {
 
         val data = MmDebugUtils
                 .paramUpdateDataFor(paramIndex, paramNegotiationModel);
-        _XrayEvent.event("Param Form - param default[%d] reassessed: %s", 
paramIndex, data.formatted());
+        _XrayEvent.event("Param Form - param[index=%s] defaults reassessed: 
%s", paramIndex, data.formatted());
     }
 
     void afterParamFormUpdate(
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index ecfb644bdd..1d72054c9f 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -477,7 +477,7 @@ implements ScalarModelChangeListener {
             _Probe.entryPoint(EntryPoint.USER_INTERACTION, "Wicket Ajax 
Request, "
                     + "originating from User either having changed a Property 
value during inline editing "
                     + "or having changed a Parameter value within an open 
ActionPrompt.");
-            _Xray.onUserParamOrPropertyEdit(scalarPanel);
+            _Xray.onParamOrPropertyEdited(scalarPanel);
             ScalarModelChangeDispatcher.super.notifyUpdate(target);
         }
 
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/scalars/_Xray.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/scalars/_Xray.java
index 7e27a466f1..667b5ea095 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/scalars/_Xray.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/scalars/_Xray.java
@@ -29,27 +29,25 @@ import lombok.val;
 
 class _Xray {
 
-    static void onUserParamOrPropertyEdit(final ScalarPanelAbstract 
scalarPanel) {
-        if(!XrayUi.isXrayEnabled()) {
-            return;
-        }
+    static void onParamOrPropertyEdited(final ScalarPanelAbstract scalarPanel) 
{
+        if(!XrayUi.isXrayEnabled()) return;
 
         scalarPanel.scalarModel().getSpecialization()
         .accept(
             param->{
                 val data = MmDebugUtils
                         .paramUpdateDataFor(param.getParameterIndex(), 
param.getParameterNegotiationModel());
-                _XrayEvent.user("User action param update %s", 
data.formatted());
+                _XrayEvent.event("Form Component (Parameter) update %s", 
data.formatted());
             },
             prop->{
-                _XrayEvent.user("User property update: %s", prop.getObject());
+                val data = MmDebugUtils
+                        .propUpdateDataFor(prop.getPendingPropertyModel());
+                _XrayEvent.event("Form Component (Property) update: %s", 
data.formatted());
             });
     }
 
     public static void debugRequestParams() {
-        if(!XrayUi.isXrayEnabled()) {
-            return;
-        }
+        if(!XrayUi.isXrayEnabled()) return;
 
         val requestArgs = PageParameterUtils.streamCurrentRequestParameters()
                 .map(pair->String.format("%s->%s", pair.getKey(), 
pair.getValue()))

Reply via email to