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 2022/09/21 08:55:48 UTC
[isis] branch master updated: ISIS-3215: refactoring, separate concerns: behavior vs on change dispatching
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 9505070d51 ISIS-3215: refactoring, separate concerns: behavior vs on change dispatching
9505070d51 is described below
commit 9505070d5183c88459e8182a988e7c03bac7bdb1
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Sep 21 10:55:42 2022 +0200
ISIS-3215: refactoring, separate concerns: behavior vs on change
dispatching
---
.../scalars/ScalarModelChangeDispatcher.java | 6 +-
....java => ScalarModelDefaultChangeBehavior.java} | 30 +++++-----
.../ui/components/scalars/ScalarPanelAbstract.java | 69 ++++++++--------------
.../scalars/ScalarPanelSelectAbstract.java | 5 +-
.../viewer/wicket/ui/components/scalars/_Xray.java | 15 +++++
.../scalars/reference/ReferencePanel.java | 28 +--------
.../valuechoices/ValueChoicesSelect2Panel.java | 2 +-
7 files changed, 63 insertions(+), 92 deletions(-)
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarModelChangeDispatcher.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarModelChangeDispatcher.java
index e3d2b39dac..b23d9f7f90 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarModelChangeDispatcher.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarModelChangeDispatcher.java
@@ -25,17 +25,17 @@ import lombok.val;
public interface ScalarModelChangeDispatcher {
- @NonNull Iterable<ScalarModelChangeListener> getOnChangeListeners();
+ @NonNull Iterable<ScalarModelChangeListener> getChangeListeners();
@NonNull ScalarPanelAbstract getScalarPanel();
default void notifyUpdate(final AjaxRequestTarget target) {
- for (val listener : getOnChangeListeners()) {
+ for (val listener : getChangeListeners()) {
listener.onUpdate(target, getScalarPanel());
}
}
default void notifyError(final AjaxRequestTarget target) {
- for (val listener : getOnChangeListeners()) {
+ for (val listener : getChangeListeners()) {
listener.onError(target, getScalarPanel());
}
}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarModelChangeDispatcher.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarModelDefaultChangeBehavior.java
similarity index 55%
copy from viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarModelChangeDispatcher.java
copy to viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarModelDefaultChangeBehavior.java
index e3d2b39dac..3f8b4f6d0a 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarModelChangeDispatcher.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarModelDefaultChangeBehavior.java
@@ -19,25 +19,27 @@
package org.apache.isis.viewer.wicket.ui.components.scalars;
import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
-import lombok.NonNull;
-import lombok.val;
+class ScalarModelDefaultChangeBehavior extends AjaxFormComponentUpdatingBehavior {
+ private static final long serialVersionUID = 1L;
-public interface ScalarModelChangeDispatcher {
+ private final ScalarPanelAbstract scalarPanel;
- @NonNull Iterable<ScalarModelChangeListener> getOnChangeListeners();
- @NonNull ScalarPanelAbstract getScalarPanel();
+ ScalarModelDefaultChangeBehavior(final ScalarPanelAbstract scalarPanel) {
+ super("change");
+ this.scalarPanel = scalarPanel;
+ }
- default void notifyUpdate(final AjaxRequestTarget target) {
- for (val listener : getOnChangeListeners()) {
- listener.onUpdate(target, getScalarPanel());
- }
+ @Override
+ protected void onUpdate(final AjaxRequestTarget target) {
+ scalarPanel.getScalarModelChangeDispatcher().notifyUpdate(target);
}
- default void notifyError(final AjaxRequestTarget target) {
- for (val listener : getOnChangeListeners()) {
- listener.onError(target, getScalarPanel());
- }
+ @Override
+ protected void onError(final AjaxRequestTarget target, final RuntimeException e) {
+ super.onError(target, e);
+ scalarPanel.getScalarModelChangeDispatcher().notifyError(target);
}
-}
+}
\ No newline at end of file
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 566f5c8293..50dfe36d8e 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -18,22 +18,21 @@
*/
package org.apache.isis.viewer.wicket.ui.components.scalars;
+import java.io.Serializable;
+import java.util.Collections;
import java.util.EnumSet;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Supplier;
-import java.util.stream.Collectors;
import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.feedback.ComponentFeedbackMessageFilter;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.model.IModel;
import org.springframework.lang.Nullable;
@@ -44,7 +43,6 @@ import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.debug._Probe;
import org.apache.isis.commons.internal.debug._Probe.EntryPoint;
-import org.apache.isis.commons.internal.debug._XrayEvent;
import org.apache.isis.core.metamodel.commons.ScalarRepresentation;
import org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet;
import org.apache.isis.core.metamodel.object.ManagedObject;
@@ -55,7 +53,6 @@ import org.apache.isis.viewer.commons.model.decorators.FormLabelDecorator.FormLa
import org.apache.isis.viewer.commons.model.scalar.UiParameter;
import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.model.util.PageParameterUtils;
import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.AdditionalLinksPanel;
import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarFragmentFactory.FrameFragment;
import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarFragmentFactory.RegularFrame;
@@ -73,6 +70,7 @@ import org.apache.isis.viewer.wicket.ui.util.WktTooltips;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
import lombok.val;
import de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
@@ -309,7 +307,7 @@ implements ScalarModelChangeListener {
addCssFromMetaModel();
addChangeListener(this);
- installScalarModelUpdateDispatcher();
+ installScalarModelChangeBehavior();
}
protected abstract void setupInlinePrompt();
@@ -449,69 +447,46 @@ implements ScalarModelChangeListener {
super.onConfigure();
}
-
// //////////////////////////////////////
- protected void installScalarModelUpdateDispatcher() {
- addOrReplaceBehavoir(ScalarUpdatingBehavior.class, ()->new ScalarUpdatingBehavior(this));
+ protected void installScalarModelChangeBehavior() {
+ addOrReplaceBehavoir(ScalarModelDefaultChangeBehavior.class, ()->new ScalarModelDefaultChangeBehavior(this));
}
- static class ScalarUpdatingBehavior extends AjaxFormComponentUpdatingBehavior
- implements ScalarModelChangeDispatcher {
+ @RequiredArgsConstructor
+ static class ScalarModelChangeDispatcherImpl
+ implements ScalarModelChangeDispatcher, Serializable {
private static final long serialVersionUID = 1L;
+ private final List<ScalarModelChangeListener> changeListeners = _Lists.newArrayList();
@Getter(onMethod_={@Override})
private final ScalarPanelAbstract scalarPanel;
@Override
- public @NonNull Iterable<ScalarModelChangeListener> getOnChangeListeners() {
- return scalarPanel.onChangeListeners;
- }
-
- private ScalarUpdatingBehavior(final ScalarPanelAbstract scalarPanel) {
- super("change");
- this.scalarPanel = scalarPanel;
- }
-
- @Override
- protected Form.MethodMismatchResponse onMethodMismatch() {
- onBeforeRequest(); // onRequest method in super is final, hooking into onMethodMismatch is trick
- return super.onMethodMismatch();
- }
-
- private void onBeforeRequest() {
- val requestArgs = PageParameterUtils.streamCurrentRequestParameters()
- .map(pair->String.format("%s->%s", pair.getKey(), pair.getValue()))
- .collect(Collectors.joining(", "));
-
- _XrayEvent.event("onRequest %s%n", requestArgs);
- }
-
- @Override
- protected void onUpdate(final AjaxRequestTarget target) {
-
+ public void notifyUpdate(final AjaxRequestTarget target) {
_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);
-
- notifyUpdate(target);
+ ScalarModelChangeDispatcher.super.notifyUpdate(target);
}
@Override
- protected void onError(final AjaxRequestTarget target, final RuntimeException e) {
- super.onError(target, e);
- notifyError(target);
+ public @NonNull Iterable<ScalarModelChangeListener> getChangeListeners() {
+ return Collections.unmodifiableCollection(changeListeners);
}
+ public void addChangeListener(final ScalarModelChangeListener listener) {
+ changeListeners.add(listener);
+ }
}
@Getter
- private final List<ScalarModelChangeListener> onChangeListeners = _Lists.newArrayList();
+ private final ScalarModelChangeDispatcher scalarModelChangeDispatcher =
+ new ScalarModelChangeDispatcherImpl(this);
- public void addChangeListener(final ScalarModelChangeListener subscriber) {
- onChangeListeners.add(subscriber);
+ public void addChangeListener(final ScalarModelChangeListener listener) {
+ ((ScalarModelChangeDispatcherImpl)getScalarModelChangeDispatcher()).addChangeListener(listener);
}
protected final <T extends Behavior> void addOrReplaceBehavoir(
@@ -688,4 +663,6 @@ implements ScalarModelChangeListener {
: Repaint.NOTHING;
}
+
+
}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelectAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelectAbstract.java
index e25bfc2f95..398bbe88d6 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelectAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelectAbstract.java
@@ -61,12 +61,11 @@ extends ScalarPanelFormFieldAbstract<ManagedObject> {
protected final Select2 createSelect2(
final String id,
- final Function<ScalarModel, ChoiceProviderAbstract> choiceProviderFactory,
- final ScalarModelChangeDispatcher select2ChangeDispatcher) {
+ final Function<ScalarModel, ChoiceProviderAbstract> choiceProviderFactory) {
val scalarModel = scalarModel();
val select2 = Select2.createSelect2(id, scalarModel,
choiceProviderFactory.apply(scalarModel),
- select2ChangeDispatcher);
+ getScalarModelChangeDispatcher());
val settings = select2.getSettings();
switch(scalarModel.getChoiceProviderSort()) {
case CHOICES:
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/_Xray.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/_Xray.java
index 5f4625e506..c7961f5b38 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/_Xray.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/_Xray.java
@@ -18,9 +18,12 @@
*/
package org.apache.isis.viewer.wicket.ui.components.scalars;
+import java.util.stream.Collectors;
+
import org.apache.isis.commons.internal.debug._XrayEvent;
import org.apache.isis.commons.internal.debug.xray.XrayUi;
import org.apache.isis.core.metamodel.object.MmDebugUtil;
+import org.apache.isis.viewer.wicket.model.util.PageParameterUtils;
import lombok.val;
@@ -43,4 +46,16 @@ class _Xray {
});
}
+ public static void debugRequestParams() {
+ if(!XrayUi.isXrayEnabled()) {
+ return;
+ }
+
+ val requestArgs = PageParameterUtils.streamCurrentRequestParameters()
+ .map(pair->String.format("%s->%s", pair.getKey(), pair.getValue()))
+ .collect(Collectors.joining(",\n"));
+
+ _XrayEvent.event("Form Component Change Event %s%n", requestArgs);
+ }
+
}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index 5ee2fbc9e5..8879ee0c70 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -18,7 +18,6 @@
*/
package org.apache.isis.viewer.wicket.ui.components.scalars.reference;
-import java.io.Serializable;
import java.util.Optional;
import org.apache.wicket.Application;
@@ -37,8 +36,6 @@ import org.apache.isis.viewer.commons.model.components.UiComponentType;
import org.apache.isis.viewer.wicket.model.models.ScalarModel;
import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarFragmentFactory.CompactFragment;
import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarFragmentFactory.FieldFrame;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarModelChangeDispatcher;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarModelChangeListener;
import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelSelectAbstract;
import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelSelectAbstract.ChoiceTitleHandler;
import org.apache.isis.viewer.wicket.ui.components.widgets.entitysimplelink.EntityLinkSimplePanel;
@@ -46,8 +43,6 @@ import org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.Cho
import org.apache.isis.viewer.wicket.ui.util.Wkt;
import org.apache.isis.viewer.wicket.ui.util.WktComponents;
-import lombok.Getter;
-import lombok.NonNull;
import lombok.val;
/**
@@ -94,7 +89,7 @@ implements ChoiceTitleHandler {
entityLink.setRequired(scalarModel.isRequired());
this.select2 = createSelect2(ID_AUTO_COMPLETE,
- ChoiceProviderForReferences::new, new Select2ChangeDispatcher(this));
+ ChoiceProviderForReferences::new);
entityLink.addOrReplace(select2.asComponent());
entityLink.setOutputMarkupId(true);
@@ -105,25 +100,8 @@ implements ChoiceTitleHandler {
// -- CUSTOM UPDATING BEHAVIOR
@Override
- protected void installScalarModelUpdateDispatcher() {
- // no-op
- }
-
- static class Select2ChangeDispatcher
- implements ScalarModelChangeDispatcher, Serializable {
- private static final long serialVersionUID = 1L;
-
- @Getter(onMethod_={@Override})
- private final ReferencePanel scalarPanel;
-
- private Select2ChangeDispatcher(final ReferencePanel scalarPanel) {
- this.scalarPanel = scalarPanel;
- }
-
- @Override
- public @NonNull Iterable<ScalarModelChangeListener> getOnChangeListeners() {
- return scalarPanel.getOnChangeListeners();
- }
+ protected void installScalarModelChangeBehavior() {
+ // no-op, as we already have the Select2OnSelect behavior (directly) installed with the Select2 form component
}
// -- ON BEFORE RENDER
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
index 80837d320f..9a83fbe88e 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
@@ -57,7 +57,7 @@ implements ChoiceTitleHandler {
protected FormComponent<ManagedObject> createFormComponent(
final String id, final ScalarModel scalarModel) {
if(select2 == null) {
- this.select2 = createSelect2(id, ChoiceProviderForValues::new, null);
+ this.select2 = createSelect2(id, ChoiceProviderForValues::new);
} else {
select2.clearInput();
}