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 2019/12/17 22:39:06 UTC
[isis] branch master updated: ISIS-2226: fixes dependend args not
cleared when using autoComplete
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 5fcec11 ISIS-2226: fixes dependend args not cleared when using autoComplete
5fcec11 is described below
commit 5fcec112198b3e7d1be12f5b47db5caf6a85d8aa
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Dec 17 23:38:56 2019 +0100
ISIS-2226: fixes dependend args not cleared when using autoComplete
Task-Url: https://issues.apache.org/jira/browse/ISIS-2226
---
.../apache/isis/metamodel/spec/ManagedObject.java | 10 ++++
.../components/actions/ActionParametersForm.java | 4 +-
.../components/scalars/ScalarPanelAbstract2.java | 70 +++++++++++-----------
.../scalars/ScalarPanelSelect2Abstract.java | 15 ++---
.../scalars/reference/ReferencePanel.java | 4 +-
.../valuechoices/ValueChoicesSelect2Panel.java | 9 +--
.../java/demoapp/dom/actions/depargs/DemoItem.java | 2 +
7 files changed, 59 insertions(+), 55 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
index ddac7c5..bb85691 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
@@ -24,6 +24,7 @@ import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
+import java.util.Set;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@@ -284,6 +285,15 @@ public interface ManagedObject {
.map(ManagedObject::unwrapPojo)
.collect(Collectors.toList());
}
+
+ public static Set<Object> unwrapPojoSetElseEmpty(Collection<? extends ManagedObject> adapters) {
+ if (adapters == null) {
+ return Collections.emptySet();
+ }
+ return adapters.stream()
+ .map(ManagedObject::unwrapPojo)
+ .collect(Collectors.toSet());
+ }
// -- SHORTCUTS
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java
index 3abb51e..7bb807e 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java
@@ -171,8 +171,8 @@ class ActionParametersForm extends PromptFormAbstract<ActionModel> {
val paramPanel = paramPanels.get(paramNumToUpdate);
val repaint = paramPanel
.updateIfNecessary(actionModel, paramNumberUpdated, paramNumToUpdate, target);
-
- final boolean multiPart = isMultiPart(); //TODO keep side-effects(?) or remove
+
+ //final boolean multiPart = isMultiPart(); // side-effects(?) or remove
switch (repaint) {
case ENTIRE_FORM:
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
index 3c4a139..53a536b 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
@@ -54,7 +54,6 @@ import org.apache.isis.metamodel.spec.feature.ObjectAction;
import org.apache.isis.metamodel.spec.feature.ObjectActionParameter;
import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
import org.apache.isis.viewer.wicket.model.mementos.ActionParameterMemento;
-import org.apache.isis.viewer.wicket.model.models.ActionArgumentModel;
import org.apache.isis.viewer.wicket.model.models.ActionModel;
import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
@@ -174,47 +173,41 @@ implements ScalarModelSubscriber2 {
.getDefault(scalarModel, pendingArguments, paramNumUpdated,
commonContext.getAuthenticationSession());
- final ActionParameterMemento apm = new ActionParameterMemento(actionParameter);
- final ActionArgumentModel actionArgumentModel = actionModel.getArgumentModel(apm);
+ val actionParameterMemento = new ActionParameterMemento(actionParameter);
+ val actionArgumentModel = actionModel.getArgumentModel(actionParameterMemento);
val pendingArg = pendingArgumentArray[paramNumToPossiblyUpdate];
-
+
if (defaultIfAny != null) {
scalarModel.setObject(defaultIfAny);
-
scalarModel.setPendingAdapter(defaultIfAny);
actionArgumentModel.setObject(defaultIfAny);
} else {
- if(pendingArg != null & scalarModel.hasChoices()) {
- // make sure the object is one of the choices, else blank it out.
- val choices = scalarModel
- .getChoices(pendingArguments, commonContext.getAuthenticationSession());
-
- if(ManagedObject.isValue(pendingArg)) {
- // we have to do this if the ObjectAdapters are value type (eg a string)
- // because we can end up with a different ObjectAdapter for the same underlying value
- // (values have no intrinsic identity)
-
- // it might not be necessary to have this special casing; we could probably use this code
- // even for reference types
- final Object pendingValue = pendingArg.getPojo();
- final List<Object> choiceValues = ManagedObject.unwrapPojoListElseEmpty(choices);
- if(!choiceValues.contains(pendingValue)) {
- scalarModel.setObject(null);
- scalarModel.setPending(null);
- actionArgumentModel.setObject(null);
- }
- } else {
- if(!choices.contains(pendingArg)) {
- scalarModel.setObject(null);
- scalarModel.setPending(null);
- actionArgumentModel.setObject(null);
- }
-
+ boolean shouldBlankout = false;
+
+ if(pendingArg != null) {
+ if(scalarModel.hasChoices()) {
+ // make sure the object is one of the choices, else blank it out.
+ val choices = scalarModel
+ .getChoices(pendingArguments, commonContext.getAuthenticationSession());
+
+ shouldBlankout =
+ ! isPartOfChoicesConsideringDependentArgs(scalarModel, pendingArg, choices);
+
+ } else if(scalarModel.hasAutoComplete()) {
+
+ // poor man's implementation: blank-out in any case
+ shouldBlankout = true;
}
-
}
+
+ if(shouldBlankout) {
+ scalarModel.setObject(null);
+ scalarModel.setPending(null);
+ actionArgumentModel.setObject(null);
+ }
+
}
// repaint the entire form if visibility has changed
@@ -233,7 +226,16 @@ implements ScalarModelSubscriber2 {
: Repaint.NOTHING;
}
-
+ // blank out the parameter n based on dependent params 0 .. n-1
+ private boolean isPartOfChoicesConsideringDependentArgs(
+ ScalarModel scalarModel,
+ ManagedObject pendingArg,
+ List<ManagedObject> choices) {
+
+ val choiceValues = ManagedObject.unwrapPojoSetElseEmpty(choices);
+ val pendingValue = pendingArg.getPojo();
+ return choiceValues.contains(pendingValue);
+ }
public static class InlinePromptConfig {
private final boolean supported;
@@ -303,8 +305,6 @@ implements ScalarModelSubscriber2 {
private void buildGuiAndCallHooks() {
- val commonContext = super.getCommonContext();
-
buildGui();
final ScalarModel scalarModel = getModel();
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
index e9a609d..1ddd7c4 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
@@ -38,7 +38,6 @@ import org.apache.isis.viewer.wicket.model.models.ActionModel;
import org.apache.isis.viewer.wicket.model.models.ScalarModel;
import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
import org.apache.isis.viewer.wicket.ui.components.widgets.select2.Select2;
-import org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.ObjectAdapterMementoProviderForChoices;
import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
import org.apache.isis.viewer.wicket.ui.util.Tooltips;
import org.apache.isis.webapp.context.memento.ObjectMemento;
@@ -120,10 +119,13 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract2 {
select2.setProvider(choiceProvider);
getModel().clearPending();
- if(choiceProvider instanceof ObjectAdapterMementoProviderForChoices) {
- val providerForChoices = (ObjectAdapterMementoProviderForChoices) choiceProvider;
- syncIfNull(select2, providerForChoices.getChoiceMementos());
- }
+ syncIfNull(select2);
+
+//legacy of
+// if(choiceProvider instanceof ObjectAdapterMementoProviderForChoices) {
+// val providerForChoices = (ObjectAdapterMementoProviderForChoices) choiceProvider;
+// syncIfNull(select2, providerForChoices.getChoiceMementos());
+// }
}
/**
@@ -134,8 +136,7 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract2 {
/**
* Mandatory hook (is called by {@link #setProviderAndCurrAndPending(Select2, Can<ManagedObject>)})
*/
- protected abstract void syncIfNull(Select2 select2, List<ObjectMemento> choicesMementos);
-
+ protected abstract void syncIfNull(Select2 select2);
// //////////////////////////////////////
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index 2182da8..f00260a 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -20,7 +20,6 @@
package org.apache.isis.viewer.wicket.ui.components.scalars.reference;
import java.util.ArrayList;
-import java.util.List;
import java.util.stream.Collectors;
import org.apache.wicket.AttributeModifier;
@@ -36,7 +35,6 @@ import org.wicketstuff.select2.ChoiceProvider;
import org.wicketstuff.select2.Settings;
import org.apache.isis.commons.collections.Can;
-import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.metamodel.facets.object.autocomplete.AutoCompleteFacet;
import org.apache.isis.metamodel.spec.ManagedObject;
@@ -365,7 +363,7 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract {
// called by setProviderAndCurrAndPending
@Override
- protected void syncIfNull(final Select2 select2, final List<ObjectMemento> choiceMementos) {
+ protected void syncIfNull(final Select2 select2) {
final ObjectMemento curr = select2.getModelObject();
if(!getModel().isCollection()) {
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
index 15f09de..4443c32 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
@@ -20,8 +20,6 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.valuechoices;
import java.util.List;
-import javax.inject.Inject;
-
import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -35,7 +33,6 @@ import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.metamodel.spec.ManagedObject;
-import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
import org.apache.isis.viewer.wicket.model.models.ScalarModel;
import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelSelect2Abstract;
import org.apache.isis.viewer.wicket.ui.components.widgets.select2.Select2;
@@ -174,7 +171,7 @@ public class ValueChoicesSelect2Panel extends ScalarPanelSelect2Abstract {
}
@Override
- protected void syncIfNull(final Select2 select2, final List<ObjectMemento> choicesMementos) {
+ protected void syncIfNull(final Select2 select2) {
final ObjectMemento curr = getModel().getObjectAdapterMemento();
if(curr == null) {
@@ -182,14 +179,10 @@ public class ValueChoicesSelect2Panel extends ScalarPanelSelect2Abstract {
}
}
-
public ScalarModel getScalarModel() {
return scalarModel;
}
- @Inject
- WicketViewerSettings wicketViewerSettings;
-
@Override
protected String getScalarPanelType() {
return "valueChoicesSelect2Panel";
diff --git a/examples/demo/src/main/java/demoapp/dom/actions/depargs/DemoItem.java b/examples/demo/src/main/java/demoapp/dom/actions/depargs/DemoItem.java
index 386fc48..836a5ae 100644
--- a/examples/demo/src/main/java/demoapp/dom/actions/depargs/DemoItem.java
+++ b/examples/demo/src/main/java/demoapp/dom/actions/depargs/DemoItem.java
@@ -27,6 +27,7 @@ import org.apache.isis.applib.annotation.Property;
import org.apache.isis.applib.annotation.PropertyLayout;
import lombok.AllArgsConstructor;
+import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@@ -35,6 +36,7 @@ import lombok.Setter;
@Named("depargs.DemoItem")
@NoArgsConstructor
@AllArgsConstructor(staticName="of")
+@EqualsAndHashCode
public class DemoItem {
public String title() {