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()))
