You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by ah...@apache.org on 2023/04/30 07:14:01 UTC
[causeway] 01/01: CAUSEWAY-3008: some minor Xray refactoring
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 <ah...@apache.org>
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()))