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 2020/05/07 15:05:27 UTC
[isis] branch master updated: ISIS-2340: refactor reusable logic
into common UI model
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 073179b ISIS-2340: refactor reusable logic into common UI model
073179b is described below
commit 073179ba4d8c03bad4be8a2005ea1bc6c85caae5
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu May 7 17:05:11 2020 +0200
ISIS-2340: refactor reusable logic into common UI model
---
.../common/model/feature/FeatureUiModel.java | 14 ---
.../common/model/feature/ParameterUiModel.java | 50 +++++++--
.../common/model/feature/PropertyUiModel.java | 37 ++++++-
.../viewer/common/model/feature/ScalarUiModel.java | 72 +++++++++++++
.../viewer/wicket/model/models/ActionModel.java | 2 +-
.../viewer/wicket/model/models/ScalarModel.java | 61 ++---------
.../wicket/model/models/ScalarParameterModel.java | 112 ++-------------------
.../wicket/model/models/ScalarPropertyModel.java | 91 +----------------
.../components/scalars/ScalarPanelAbstract2.java | 7 ++
.../scalars/ScalarPanelSelect2Abstract.java | 26 ++---
.../scalars/reference/ReferencePanel.java | 19 ++--
.../valuechoices/ValueChoicesSelect2Panel.java | 10 +-
...derForReferenceParamOrPropertyAutoComplete.java | 46 +++++----
13 files changed, 231 insertions(+), 316 deletions(-)
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/feature/FeatureUiModel.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/feature/FeatureUiModel.java
deleted file mode 100644
index 3fefd2c..0000000
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/feature/FeatureUiModel.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.apache.isis.viewer.common.model.feature;
-
-import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
-
-public interface FeatureUiModel {
-
- ObjectFeature getMetaModel();
-
- /** property name */
- default String getName() {
- return getMetaModel().getName();
- }
-
-}
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/feature/ParameterUiModel.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/feature/ParameterUiModel.java
index 3e85c6d..a46d6fe 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/feature/ParameterUiModel.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/feature/ParameterUiModel.java
@@ -18,11 +18,14 @@
*/
package org.apache.isis.viewer.common.model.feature;
+import org.apache.isis.core.commons.collections.Can;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
import org.apache.isis.core.metamodel.specloader.specimpl.PendingParameterModel;
+import org.apache.isis.core.metamodel.specloader.specimpl.PendingParameterModelHead;
-public interface ParameterUiModel extends FeatureUiModel {
+public interface ParameterUiModel extends ScalarUiModel {
/** param meta model */
@Override
@@ -34,7 +37,15 @@ public interface ParameterUiModel extends FeatureUiModel {
/** param value */
void setValue(ManagedObject paramValue);
+ /** actions's owner */
+ ManagedObject getOwner();
+
String getCssClass();
+
+ // -- PENDING PARAMETER MODEL
+
+ PendingParameterModel getPendingParameterModel();
+ void setPendingParameterModel(PendingParameterModel pendingArgs);
// -- SHORTCUTS
@@ -43,15 +54,40 @@ public interface ParameterUiModel extends FeatureUiModel {
return getMetaModel().getNumber();
}
- /** param name */
- default String getName() {
- return getMetaModel().getName();
+ @Override
+ default int getAutoCompleteMinLength() {
+ return hasAutoComplete() ? getMetaModel().getAutoCompleteMinLength() : 0;
+ }
+
+ @Override
+ default boolean hasChoices() {
+ return getMetaModel().hasChoices();
+ }
+
+ @Override
+ default boolean hasAutoComplete() {
+ return getMetaModel().hasAutoComplete();
+ }
+
+ @Override
+ default ManagedObject getDefault() {
+ return getMetaModel().getDefault(getPendingParameterModel());
+ }
+
+ @Override
+ default Can<ManagedObject> getChoices() {
+ return getMetaModel().getChoices(getPendingParameterModel(), InteractionInitiatedBy.USER);
}
- // -- DEPRECATIONS
+ @Override
+ default Can<ManagedObject> getAutoComplete(final String searchArg) {
+ return getMetaModel().getAutoComplete(getPendingParameterModel(), searchArg, InteractionInitiatedBy.USER);
+ }
+
+ default PendingParameterModelHead getPendingParamHead() {
+ return getMetaModel().getAction().newPendingParameterModelHead(getOwner());
+ }
- // transient storage
- void setActionArgsHint(PendingParameterModel pendingArgs);
}
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/feature/PropertyUiModel.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/feature/PropertyUiModel.java
index e3311a6..1c1554d 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/feature/PropertyUiModel.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/feature/PropertyUiModel.java
@@ -18,12 +18,47 @@
*/
package org.apache.isis.viewer.common.model.feature;
+import org.apache.isis.core.commons.collections.Can;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-public interface PropertyUiModel extends FeatureUiModel {
+public interface PropertyUiModel extends ScalarUiModel {
/** prop meta model */
@Override
OneToOneAssociation getMetaModel();
+
+ // -- SHORTCUTS
+
+ @Override
+ default int getAutoCompleteMinLength() {
+ return hasAutoComplete() ? getMetaModel().getAutoCompleteMinLength() : 0;
+ }
+
+ @Override
+ default boolean hasChoices() {
+ return getMetaModel().hasChoices();
+ }
+
+ @Override
+ default boolean hasAutoComplete() {
+ return getMetaModel().hasAutoComplete();
+ }
+
+ @Override
+ default ManagedObject getDefault() {
+ return getMetaModel().getDefault(getOwner());
+ }
+
+ @Override
+ default Can<ManagedObject> getChoices() {
+ return getMetaModel().getChoices(getOwner(), InteractionInitiatedBy.USER);
+ }
+ @Override
+ default Can<ManagedObject> getAutoComplete(final String searchArg) {
+ return getMetaModel().getAutoComplete(getOwner(), searchArg, InteractionInitiatedBy.USER);
+ }
+
}
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/feature/ScalarUiModel.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/feature/ScalarUiModel.java
new file mode 100644
index 0000000..3ab8608
--- /dev/null
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/feature/ScalarUiModel.java
@@ -0,0 +1,72 @@
+package org.apache.isis.viewer.common.model.feature;
+
+import java.math.BigDecimal;
+
+import org.apache.isis.core.commons.collections.Can;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.objectvalue.fileaccept.FileAcceptFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
+import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFacet;
+import org.apache.isis.core.metamodel.facets.value.string.StringValueSemanticsProvider;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
+
+public interface ScalarUiModel {
+
+ ObjectFeature getMetaModel();
+
+ /** action's or property's owner */
+ ManagedObject getOwner();
+
+ /** feature name */
+ default String getName() {
+ return getMetaModel().getName();
+ }
+
+ default boolean isCollection() {
+ return getMetaModel().getFeatureType() == FeatureType.ACTION_PARAMETER_COLLECTION
+ || getMetaModel().getFeatureType() == FeatureType.COLLECTION;
+ }
+
+ default String getDescribedAs() {
+ return getMetaModel().getDescription();
+ }
+
+ /**
+ * for {@link BigDecimal}s only.
+ *
+ * @see #getLength()
+ */
+ default Integer getLength() {
+ final BigDecimalValueFacet facet = getMetaModel().getFacet(BigDecimalValueFacet.class);
+ return facet != null? facet.getPrecision(): null;
+ }
+
+ /**
+ * for {@link BigDecimal}s only.
+ *
+ * @see #getScale()
+ */
+ default Integer getScale() {
+ final BigDecimalValueFacet facet = getMetaModel().getFacet(BigDecimalValueFacet.class);
+ return facet != null? facet.getScale(): null;
+ }
+
+ default int getTypicalLength() {
+ final TypicalLengthFacet facet = getMetaModel().getFacet(TypicalLengthFacet.class);
+ return facet != null? facet.value() : StringValueSemanticsProvider.TYPICAL_LENGTH;
+ }
+
+ default String getFileAccept() {
+ final FileAcceptFacet facet = getMetaModel().getFacet(FileAcceptFacet.class);
+ return facet != null? facet.value(): null;
+ }
+
+ int getAutoCompleteMinLength();
+ boolean hasChoices();
+ boolean hasAutoComplete();
+ ManagedObject getDefault();
+ Can<ManagedObject> getChoices();
+ Can<ManagedObject> getAutoComplete(final String searchArg);
+
+}
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index 7a61149..44f79ce 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -476,7 +476,7 @@ implements FormExecutorContext {
.streamActionArgumentModels()
.map(actionArgumentModel->{
- actionArgumentModel.setActionArgsHint(pendingArgs);
+ actionArgumentModel.setPendingParameterModel(pendingArgs);
val objectActionParamter = actionArgumentModel.getMetaModel();
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index d6fd8b9..be9298a 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -18,14 +18,12 @@
*/
package org.apache.isis.viewer.wicket.model.models;
-import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.isis.applib.annotation.PromptStyle;
import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.core.commons.collections.Can;
import org.apache.isis.core.commons.internal.base._Casts;
import org.apache.isis.core.commons.internal.base._NullSafe;
import org.apache.isis.core.commons.internal.collections._Lists;
@@ -41,9 +39,8 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecId;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.isis.core.metamodel.specloader.specimpl.PendingParameterModel;
import org.apache.isis.core.webapp.context.memento.ObjectMemento;
-import org.apache.isis.viewer.common.model.feature.FeatureUiModel;
+import org.apache.isis.viewer.common.model.feature.ScalarUiModel;
import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
import org.apache.isis.viewer.wicket.model.links.LinksProvider;
import org.apache.isis.viewer.wicket.model.mementos.ActionParameterMemento;
@@ -52,7 +49,6 @@ import org.apache.isis.viewer.wicket.model.mementos.PropertyMemento;
import lombok.NonNull;
import lombok.val;
-
/**
* Represents a scalar of an entity, either a {@link Kind#PROPERTY property} or
* a {@link Kind#PARAMETER parameter}.
@@ -72,7 +68,7 @@ import lombok.val;
* </p>
*/
public abstract class ScalarModel extends EntityModel
-implements FeatureUiModel, LinksProvider, FormExecutorContext {
+implements ScalarUiModel, LinksProvider, FormExecutorContext {
private static final long serialVersionUID = 1L;
@@ -135,7 +131,15 @@ implements FeatureUiModel, LinksProvider, FormExecutorContext {
return parentEntityModel;
}
-
+ private transient ManagedObject owner;
+ @Override
+ public ManagedObject getOwner() {
+ if(owner==null) {
+ owner = getParentUiModel().load();
+ }
+ return owner;
+ }
+
protected static void setObjectFromPropertyIfVisible(
final ScalarModel scalarModel,
@@ -157,8 +161,6 @@ implements FeatureUiModel, LinksProvider, FormExecutorContext {
scalarModel.setObject(associatedAdapter);
}
- public abstract boolean isCollection();
-
/**
* Whether the scalar represents a {@link Kind#PROPERTY property} or a
* {@link Kind#PARAMETER}.
@@ -271,30 +273,6 @@ implements FeatureUiModel, LinksProvider, FormExecutorContext {
public abstract <T extends Facet> T getFacet(Class<T> facetType);
- public abstract String getDescribedAs();
-
- public abstract String getFileAccept();
-
- public abstract boolean hasChoices();
- public abstract Can<ManagedObject> getChoices(PendingParameterModel pendingArgs);
-
- public abstract boolean hasAutoComplete();
- public abstract Can<ManagedObject> getAutoComplete(PendingParameterModel pendingArgs, String searchTerm);
-
- /**
- * for {@link BigDecimal}s only.
- *
- * @see #getScale()
- */
- public abstract Integer getLength();
-
- /**
- * for {@link BigDecimal}s only.
- *
- * @see #getLength()
- */
- public abstract Integer getScale();
-
/**
* Additional links to render (if any)
*/
@@ -359,8 +337,6 @@ implements FeatureUiModel, LinksProvider, FormExecutorContext {
};
}
-
-
@Override
public PromptStyle getPromptStyle() {
final PromptStyleFacet facet = getFacet(PromptStyleFacet.class);
@@ -388,17 +364,12 @@ implements FeatureUiModel, LinksProvider, FormExecutorContext {
}
-
-
-
@Override
protected void onDetach() {
clearPending();
super.onDetach();
}
-
-
// //////////////////////////////////////
// @Override
@@ -502,16 +473,6 @@ implements FeatureUiModel, LinksProvider, FormExecutorContext {
protected abstract String parseAndValidate(String proposedPojoAsStr);
- protected abstract int getTypicalLength();
-
- public abstract int getAutoCompleteOrChoicesMinLength();
-
- public abstract ManagedObject getDefault(PendingParameterModel pendingArgs);
-
- public int getAutoCompleteMinLength() {
- return getAutoCompleteOrChoicesMinLength();
- }
-
public AssociatedActions getAssociatedActions() {
if (associatedActions == null) {
associatedActions = new AssociatedActions(calcAssociatedActions());
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java
index 5155117..818e132 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java
@@ -22,51 +22,40 @@ import java.util.Collections;
import java.util.List;
import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.core.commons.collections.Can;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.objectvalue.fileaccept.FileAcceptFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
-import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFacet;
-import org.apache.isis.core.metamodel.facets.value.string.StringValueSemanticsProvider;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
import org.apache.isis.core.metamodel.specloader.specimpl.PendingParameterModel;
-import org.apache.isis.core.metamodel.specloader.specimpl.PendingParameterModelHead;
import org.apache.isis.core.webapp.context.memento.ObjectMemento;
import org.apache.isis.viewer.common.model.feature.ParameterUiModel;
import org.apache.isis.viewer.wicket.model.mementos.ActionParameterMemento;
import lombok.Getter;
-import lombok.NonNull;
import lombok.Setter;
-import lombok.val;
public class ScalarParameterModel extends ScalarModel
implements ParameterUiModel {
private static final long serialVersionUID = 1L;
- private final ActionParameterMemento parameterMemento;
- /**
- * The initial call of choicesXxx() for any given scalar argument needs the current values
- * of all args (possibly as initialized through a defaultNXxx().
- * @implNote transient because only temporary hint.
- */
- @Getter @Setter
- private transient PendingParameterModel actionArgsHint;
+ private final ActionParameterMemento paramMemento;
+
+ @Getter(onMethod = @__(@Override))
+ @Setter(onMethod = @__(@Override))
+ private transient PendingParameterModel pendingParameterModel;
/**
* Creates a model representing an action parameter of an action of a parent
* object, with the {@link #getObject() value of this model} to be default
* value (if any) of that action parameter.
*/
- public ScalarParameterModel(EntityModel parentEntityModel, ActionParameterMemento apm) {
- super(parentEntityModel, apm);
- this.parameterMemento = apm;
+ public ScalarParameterModel(EntityModel parentEntityModel, ActionParameterMemento paramMemento) {
+ super(parentEntityModel, paramMemento);
+ this.paramMemento = paramMemento;
}
private transient ObjectActionParameter actionParameter;
@@ -74,14 +63,14 @@ implements ParameterUiModel {
@Override
public ObjectActionParameter getMetaModel() {
if(actionParameter==null) {
- actionParameter = parameterMemento.getActionParameter(getSpecificationLoader());
+ actionParameter = paramMemento.getActionParameter(getSpecificationLoader());
}
return actionParameter;
}
@Override
public ObjectSpecification getScalarTypeSpec() {
- return parameterMemento.getSpecification(getSpecificationLoader());
+ return paramMemento.getSpecification(getSpecificationLoader());
}
@Override
@@ -153,76 +142,8 @@ implements ParameterUiModel {
public <T extends Facet> T getFacet(final Class<T> facetType) {
return getMetaModel().getFacet(facetType);
}
-
- @Override
- public ManagedObject getDefault(
- @NonNull final PendingParameterModel pendingArgs) {
-
- return getMetaModel().getDefault(pendingArgs);
- }
-
- @Override
- public boolean hasChoices() {
- return getMetaModel().hasChoices();
- }
- @Override
- public Can<ManagedObject> getChoices(
- @NonNull final PendingParameterModel pendingArgs) {
- return getMetaModel().getChoices(pendingArgs, InteractionInitiatedBy.USER);
- }
-
- @Override
- public boolean hasAutoComplete() {
- return getMetaModel().hasAutoComplete();
- }
- @Override
- public Can<ManagedObject> getAutoComplete(
- @NonNull final PendingParameterModel pendingArgs,
- final String searchArg) {
-
- return getMetaModel().getAutoComplete(pendingArgs, searchArg, InteractionInitiatedBy.USER);
- }
@Override
- public int getAutoCompleteOrChoicesMinLength() {
- if (hasAutoComplete()) {
- return getMetaModel().getAutoCompleteMinLength();
- } else {
- return 0;
- }
- }
-
- @Override
- public String getDescribedAs() {
- return getMetaModel().getDescription();
- }
-
- @Override
- public Integer getLength() {
- final BigDecimalValueFacet facet = getMetaModel().getFacet(BigDecimalValueFacet.class);
- return facet != null? facet.getPrecision(): null;
- }
-
- @Override
- public Integer getScale() {
- final BigDecimalValueFacet facet = getMetaModel().getFacet(BigDecimalValueFacet.class);
- return facet != null? facet.getScale(): null;
- }
-
- @Override
- public int getTypicalLength() {
- final TypicalLengthFacet facet = getMetaModel().getFacet(TypicalLengthFacet.class);
- return facet != null? facet.value() : StringValueSemanticsProvider.TYPICAL_LENGTH;
- }
-
-
- @Override
- public String getFileAccept() {
- final FileAcceptFacet facet = getMetaModel().getFacet(FileAcceptFacet.class);
- return facet != null? facet.value(): null;
- }
-
- @Override
public ManagedObject load() {
final ManagedObject objectAdapter = loadFromSuper();
@@ -250,25 +171,14 @@ implements ParameterUiModel {
}
@Override
- public boolean isCollection() {
- return getMetaModel().getFeatureType() == FeatureType.ACTION_PARAMETER_COLLECTION;
- }
-
- @Override
public String toStringOf() {
- return getName() + ": " + parameterMemento.toString();
+ return getName() + ": " + paramMemento.toString();
}
@Override
protected List<ObjectAction> calcAssociatedActions() {
return Collections.emptyList();
}
-
- public PendingParameterModelHead getPendingParamHead() {
- val actionParameter = getMetaModel();
- val actionOwner = getParentUiModel().load();
- return actionParameter.getAction().newPendingParameterModelHead(actionOwner);
- }
@Override
public ManagedObject getValue() {
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java
index 976257c..60b1676 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java
@@ -21,23 +21,17 @@ package org.apache.isis.viewer.wicket.model.models;
import java.util.List;
import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.core.commons.collections.Can;
import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.fileaccept.FileAcceptFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
-import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFacet;
-import org.apache.isis.core.metamodel.facets.value.string.StringValueSemanticsProvider;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ManagedObjects;
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.isis.core.metamodel.specloader.specimpl.PendingParameterModel;
import org.apache.isis.core.webapp.context.memento.ObjectMemento;
import org.apache.isis.viewer.common.model.feature.PropertyUiModel;
import org.apache.isis.viewer.wicket.model.mementos.PropertyMemento;
@@ -96,10 +90,7 @@ implements PropertyUiModel {
return property;
}
- @Override
- public String getName() {
- return getMetaModel().getName();
- }
+
@Override
public ObjectSpecification getScalarTypeSpec() {
@@ -188,84 +179,6 @@ implements PropertyUiModel {
return getMetaModel().getFacet(facetType);
}
- @Override
- public ManagedObject getDefault(
- final PendingParameterModel pendingArgs /*not used*/) {
- val parentAdapter = getParentUiModel().load();
- return getMetaModel().getDefault(parentAdapter);
- }
-
- @Override
- public boolean hasChoices() {
- return getMetaModel().hasChoices();
- }
-
- @Override
- public Can<ManagedObject> getChoices(
- final PendingParameterModel pendingArgs /*not used on properties*/) {
-
- val parentAdapter = getParentUiModel().load();
- return getMetaModel().getChoices(
- parentAdapter,
- InteractionInitiatedBy.USER);
- }
-
- @Override
- public boolean hasAutoComplete() {
- return getMetaModel().hasAutoComplete();
- }
-
- @Override
- public Can<ManagedObject> getAutoComplete(
- final PendingParameterModel pendingArgs, /*not used on properties*/
- final String searchArg) {
-
- val parentAdapter = getParentUiModel().load();
- return getMetaModel().getAutoComplete(
- parentAdapter,
- searchArg,
- InteractionInitiatedBy.USER);
- }
-
- @Override
- public int getAutoCompleteOrChoicesMinLength() {
-
- if (hasAutoComplete()) {
- return getMetaModel().getAutoCompleteMinLength();
- } else {
- return 0;
- }
- }
-
- @Override
- public String getDescribedAs() {
- return getMetaModel().getDescription();
- }
-
- @Override
- public Integer getLength() {
- final BigDecimalValueFacet facet = getMetaModel().getFacet(BigDecimalValueFacet.class);
- return facet != null? facet.getPrecision(): null;
- }
-
- @Override
- public Integer getScale() {
- final BigDecimalValueFacet facet = getMetaModel().getFacet(BigDecimalValueFacet.class);
- return facet != null? facet.getScale(): null;
- }
-
- @Override
- public int getTypicalLength() {
- final TypicalLengthFacet facet = getMetaModel().getFacet(TypicalLengthFacet.class);
- return facet != null? facet.value() : StringValueSemanticsProvider.TYPICAL_LENGTH;
- }
-
- @Override
- public String getFileAccept() {
- final FileAcceptFacet facet = getMetaModel().getFacet(FileAcceptFacet.class);
- return facet != null? facet.value(): null;
- }
-
public void reset() {
val parentAdapter = getParentUiModel().load();
setObjectFromPropertyIfVisible(this, getMetaModel(), parentAdapter);
@@ -340,5 +253,7 @@ implements PropertyUiModel {
val parentAdapter = getParentUiModel().load();
return ObjectAction.Util.findForAssociation(parentAdapter, getMetaModel());
}
+
+
}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
index 085d47a..78c75d8 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
@@ -37,6 +37,7 @@ import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.LabeledWebMarkupContainer;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
+import org.wicketstuff.select2.ChoiceProvider;
import org.apache.isis.applib.annotation.ActionLayout;
import org.apache.isis.applib.annotation.PromptStyle;
@@ -50,6 +51,7 @@ import org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.webapp.context.memento.ObjectMemento;
import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
import org.apache.isis.viewer.wicket.model.models.ActionModel.ActionArgumentModelAndConsents;
import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
@@ -919,6 +921,11 @@ implements ScalarModelSubscriber2 {
target.add(this);
}
+ protected ChoiceProvider<ObjectMemento> buildChoiceProvider() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
index 72ce315..93f41ab 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
@@ -33,11 +33,9 @@ import org.apache.wicket.validation.IValidator;
import org.apache.wicket.validation.ValidationError;
import org.wicketstuff.select2.ChoiceProvider;
-import org.apache.isis.core.metamodel.specloader.specimpl.PendingParameterModel;
import org.apache.isis.core.webapp.context.memento.ObjectMemento;
import org.apache.isis.viewer.wicket.model.models.ActionModel.ActionArgumentModelAndConsents;
import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.model.models.ScalarParameterModel;
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.ObjectAdapterMementoProviderAbstract;
@@ -60,10 +58,7 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract2 {
protected Select2 createSelect2(final String id) {
final Select2 select2 = Select2.createSelect2(id, scalarModel);
- setProviderAndCurrAndPending(select2,
- (scalarModel instanceof ScalarParameterModel)
- ? ((ScalarParameterModel)scalarModel).getActionArgsHint()
- : null);
+ setProviderAndCurrAndPending(select2);
select2.setRequired(scalarModel.isRequired());
return select2;
}
@@ -119,10 +114,9 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract2 {
* sets up the choices, also ensuring that any currently held value is compatible.
*/
private void setProviderAndCurrAndPending(
- final Select2 select2,
- final PendingParameterModel pendingArgs) {
+ final Select2 select2) {
- final ChoiceProvider<ObjectMemento> choiceProvider = buildChoiceProvider(pendingArgs);
+ final ChoiceProvider<ObjectMemento> choiceProvider = buildChoiceProvider();
select2.setProvider(choiceProvider);
getModel().clearPending();
@@ -137,12 +131,12 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract2 {
}
/**
- * Mandatory hook (is called by {@link #setProviderAndCurrAndPending(Select2, List<ManagedObject>)})
+ * Mandatory hook (is called by {@link #setProviderAndCurrAndPending(Select2)})
*/
- protected abstract ChoiceProvider<ObjectMemento> buildChoiceProvider(PendingParameterModel pendingArgs);
+ protected abstract ChoiceProvider<ObjectMemento> buildChoiceProvider();
/**
- * Mandatory hook (is called by {@link #setProviderAndCurrAndPending(Select2, List<ManagedObject>)})
+ * Mandatory hook (is called by {@link #setProviderAndCurrAndPending(Select2)})
*/
protected abstract void syncIfNull(Select2 select2);
@@ -187,8 +181,7 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract2 {
@NonNull final Optional<AjaxRequestTarget> target) {
val repaint = super.updateIfNecessary(argsAndConsents, target);
-
- final boolean choicesUpdated = updateChoices(argsAndConsents.getPendingArgs());
+ final boolean choicesUpdated = updateChoices();
if (repaint == Repaint.NOTHING) {
if (choicesUpdated) {
@@ -201,12 +194,11 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract2 {
}
}
- private boolean updateChoices(final PendingParameterModel pendingArgs) {
+ private boolean updateChoices() {
if (select2 == null) {
return false;
}
- setProviderAndCurrAndPending(select2, pendingArgs);
-
+ setProviderAndCurrAndPending(select2);
return true;
}
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 3104547..eadec6a 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
@@ -35,7 +35,6 @@ import org.wicketstuff.select2.Settings;
import org.apache.isis.core.metamodel.facets.object.autocomplete.AutoCompleteFacet;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.specloader.specimpl.PendingParameterModel;
import org.apache.isis.core.webapp.context.memento.ObjectMemento;
import org.apache.isis.viewer.wicket.model.models.EntityModel;
import org.apache.isis.viewer.wicket.model.models.EntityModelForReference;
@@ -337,22 +336,20 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract {
// //////////////////////////////////////
@Override
- protected ChoiceProvider<ObjectMemento> buildChoiceProvider(
- final PendingParameterModel pendingArgs) {
+ protected ChoiceProvider<ObjectMemento> buildChoiceProvider() {
val commonContext = super.getCommonContext();
- if (getModel().hasChoices()) {
- val choices = getModel().getChoices(pendingArgs);
+ val scalarModel = getModel();
+
+ if (scalarModel.hasChoices()) {
+ val choices = scalarModel.getChoices();
val choiceMementos = choices.map(commonContext::mementoForParameter);
- return new ObjectAdapterMementoProviderForReferenceChoices(getModel(), choiceMementos);
+ return new ObjectAdapterMementoProviderForReferenceChoices(scalarModel, choiceMementos);
}
- if(getModel().hasAutoComplete()) {
- val autoCompleteMementos = pendingArgs.getParamValues()
- .map(commonContext::mementoForParameter);
- return new ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete(
- getModel(), autoCompleteMementos);
+ if(scalarModel.hasAutoComplete()) {
+ return new ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete(scalarModel);
}
return new ObjectAdapterMementoProviderForReferenceObjectAutoComplete(getModel());
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 0307ae0..2d3c63f 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
@@ -31,7 +31,6 @@ import org.wicketstuff.select2.ChoiceProvider;
import org.apache.isis.core.commons.collections.Can;
import org.apache.isis.core.commons.internal.base._Strings;
-import org.apache.isis.core.metamodel.specloader.specimpl.PendingParameterModel;
import org.apache.isis.core.webapp.context.memento.ObjectMemento;
import org.apache.isis.viewer.wicket.model.models.ScalarModel;
import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelSelect2Abstract;
@@ -73,11 +72,11 @@ public class ValueChoicesSelect2Panel extends ScalarPanelSelect2Abstract {
}
- private Can<ObjectMemento> getChoiceMementos(final PendingParameterModel pendingArgs) {
+ private Can<ObjectMemento> getChoiceMementos() {
val commonContext = super.getCommonContext();
- val choices = scalarModel.getChoices(pendingArgs);
+ val choices = scalarModel.getChoices();
return choices.map(commonContext::mementoFor);
}
@@ -163,9 +162,8 @@ public class ValueChoicesSelect2Panel extends ScalarPanelSelect2Abstract {
// in corresponding code in ReferencePanelFactory, these is a branch for different types of providers
// (choice vs autoComplete). Here though - because values don't currently support autoComplete - no branch is required
@Override
- protected ChoiceProvider<ObjectMemento> buildChoiceProvider(
- final PendingParameterModel pendingArgs) {
- final Can<ObjectMemento> choicesMementos = getChoiceMementos(pendingArgs);
+ protected ChoiceProvider<ObjectMemento> buildChoiceProvider() {
+ final Can<ObjectMemento> choicesMementos = getChoiceMementos();
return new ObjectAdapterMementoProviderForValueChoices(scalarModel, choicesMementos);
}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete.java
index f816748..982e7b5 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete.java
@@ -23,10 +23,9 @@ import org.apache.isis.core.commons.internal.base._NullSafe;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.specloader.specimpl.PendingParameterModel;
import org.apache.isis.core.webapp.context.memento.ObjectMemento;
+import org.apache.isis.viewer.common.model.feature.ParameterUiModel;
import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.model.models.ScalarParameterModel;
-import lombok.NonNull;
import lombok.val;
public class ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete
@@ -34,43 +33,50 @@ extends ObjectAdapterMementoProviderAbstract {
private static final long serialVersionUID = 1L;
- private final Can<ObjectMemento> dependentArgMementos;
+ private final Can<ObjectMemento> pendingArgMementos;
- public ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete(
- @NonNull ScalarModel model,
- @NonNull Can<ObjectMemento> dependentArgMementos) {
+ public ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete(ScalarModel scalarModel) {
+ super(scalarModel);
+ val commonContext = scalarModel.getCommonContext();
+ val pendingArgs = scalarModel.isParameter()
+ ? ((ParameterUiModel)scalarModel).getPendingParameterModel().getParamValues()
+ : Can.<ManagedObject>empty();
+ val pendingArgMementos = pendingArgs
+ .map(commonContext::mementoForParameter);
- super(model);
- this.dependentArgMementos = dependentArgMementos;
+ this.pendingArgMementos = pendingArgMementos;
}
@Override
protected Can<ObjectMemento> obtainMementos(String term) {
- val parameterModel = (ScalarParameterModel)getScalarModel();
+ val scalarModel = getScalarModel();
- if (parameterModel.hasAutoComplete()) {
+ if (scalarModel.hasAutoComplete()) {
- val commonContext = super.getCommonContext();
+ if(scalarModel.isParameter()) {
+ // recover any pendingArgs
+ val paramModel = (ParameterUiModel)scalarModel;
+ val pendingArgs = reconstructPendingArgs(paramModel, pendingArgMementos);
+ paramModel.setPendingParameterModel(pendingArgs);
+ }
- // recover any pendingArgs
- val pendingArgs = reconstructDependentArgs(parameterModel, dependentArgMementos);
- return parameterModel
- .getAutoComplete(pendingArgs, term)
+ val commonContext = super.getCommonContext();
+ return scalarModel
+ .getAutoComplete(term)
.map(commonContext::mementoFor);
-
}
return Can.empty();
}
- private PendingParameterModel reconstructDependentArgs(
- final ScalarParameterModel parameterModel,
- final Can<ObjectMemento> dependentArgMementos) {
+ private PendingParameterModel reconstructPendingArgs(
+ final ParameterUiModel parameterModel,
+ final Can<ObjectMemento> pendingArgMementos) {
val commonContext = super.getCommonContext();
- val pendingArgsList = _NullSafe.stream(dependentArgMementos)
+ val pendingArgsList = _NullSafe.stream(pendingArgMementos)
.map(commonContext::reconstructObject)
.map(ManagedObject.class::cast)
.collect(Can.toCan());