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 d39a70fb11 ISIS-3215: proof of concept, that we can listen on
select2:select
d39a70fb11 is described below
commit d39a70fb11bebcb652d0c2688a081746c9e5bab9
Author: Andi Huber <[email protected]>
AuthorDate: Mon Sep 19 17:05:48 2022 +0200
ISIS-3215: proof of concept, that we can listen on select2:select
- yet only logging to console (client-side)
---
.../isis/commons/internal/base/_NullSafe.java | 5 +--
.../core/metamodel/facets/ParameterSupport.java | 30 ++++++++--------
.../ActionParameterAutoCompleteFacet.java | 2 ++
.../ActionParameterAutoCompleteFacetViaMethod.java | 15 +++++---
...ParameterAutoCompleteFacetViaMethodFactory.java | 4 +--
.../ActionParameterChoicesFacetViaMethod.java | 12 ++++---
...ctionParameterChoicesFacetViaMethodFactory.java | 4 +--
.../specimpl/ObjectActionParameterAbstract.java | 10 ++++--
.../ui/components/scalars/ScalarPanelAbstract.java | 3 +-
.../scalars/ScalarPanelSelectAbstract.java | 10 +++++-
.../scalars/reference/ReferencePanel.java | 41 ++++++++++++++++------
.../valuechoices/ValueChoicesSelect2Panel.java | 38 +++++++++++---------
.../ui/components/widgets/select2/Select2.java | 33 +++++++++++++++++
.../common/viewer/js/jquery.isis.wicket.viewer.js | 16 ++++-----
.../org/apache/isis/viewer/wicket/ui/util/Wkt.java | 2 +-
15 files changed, 156 insertions(+), 69 deletions(-)
diff --git
a/commons/src/main/java/org/apache/isis/commons/internal/base/_NullSafe.java
b/commons/src/main/java/org/apache/isis/commons/internal/base/_NullSafe.java
index 37550f6a83..65b3d90c16 100644
--- a/commons/src/main/java/org/apache/isis/commons/internal/base/_NullSafe.java
+++ b/commons/src/main/java/org/apache/isis/commons/internal/base/_NullSafe.java
@@ -36,6 +36,7 @@ import java.util.stream.StreamSupport;
import org.springframework.lang.Nullable;
import org.apache.isis.commons.collections.Can;
+import org.apache.isis.commons.collections.ImmutableCollection;
import org.apache.isis.commons.collections.ImmutableEnumSet;
/**
@@ -190,8 +191,8 @@ public final class _NullSafe {
if(pojo instanceof Collection) {
return ((Collection<?>)pojo).stream();
}
- if(pojo instanceof Can) {
- return ((Can<?>)pojo).stream();
+ if(pojo instanceof ImmutableCollection) {
+ return ((ImmutableCollection<?>)pojo).stream();
}
if(pojo.getClass().isArray()) {
if(Array.getLength(pojo)==0) return Stream.empty();
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ParameterSupport.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ParameterSupport.java
index c53629e8f1..451349d0e6 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ParameterSupport.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ParameterSupport.java
@@ -33,6 +33,7 @@ import
org.apache.isis.core.config.progmodel.ProgrammingModelConstants.ReturnTyp
import org.apache.isis.core.metamodel.methods.MethodFinder;
import org.apache.isis.core.metamodel.methods.MethodFinderPAT;
import
org.apache.isis.core.metamodel.methods.MethodFinderPAT.MethodAndPatConstructor;
+import org.apache.isis.core.metamodel.spec.TypeOfAnyCardinality;
import lombok.Builder;
import lombok.Getter;
@@ -74,8 +75,8 @@ public final class ParameterSupport {
int paramIndex;
Class<?> paramType;
Method supportingMethod;
- Class<?> returnType;
Optional<Constructor<?>> patConstructor;
+ TypeOfAnyCardinality paramSupportReturnType;
}
@FunctionalInterface
@@ -141,19 +142,21 @@ public final class ParameterSupport {
.withReturnTypeAnyOf(searchRequest.getReturnTypePattern().matchingTypes(paramType)),
paramTypes,
searchRequest.getAdditionalParamTypes())
- .map(methodAndPatConstructor->toSearchResult(paramIndex, paramType,
methodAndPatConstructor))
+ .map(methodAndPatConstructor->toSearchResult(type, paramIndex,
paramType, methodAndPatConstructor))
.forEach(onMethodFound);
}
private static ParamSupportingMethodSearchResult toSearchResult(
+ final Class<?> declaringClass,
final int paramIndex,
final Class<?> paramType,
final MethodAndPatConstructor supportingMethodAndPatConstructor) {
return ParamSupportingMethodSearchResult
.of(paramIndex, paramType,
-
supportingMethodAndPatConstructor.getSupportingMethod(),
-
supportingMethodAndPatConstructor.getSupportingMethod().getReturnType(),
-
Optional.of(supportingMethodAndPatConstructor.getPatConstructor()));
+ supportingMethodAndPatConstructor.getSupportingMethod(),
+
Optional.of(supportingMethodAndPatConstructor.getPatConstructor()),
+ TypeOfAnyCardinality.forMethodReturn(
+ declaringClass,
supportingMethodAndPatConstructor.getSupportingMethod()));
}
private static void singleArgBeingParamType(
@@ -172,7 +175,7 @@ public final class ParameterSupport {
.memberSupport(type, methodNames,
processMethodContext.getIntrospectionPolicy())
.withReturnTypeAnyOf(searchRequest.getReturnTypePattern().matchingTypes(paramType))
.streamMethodsMatchingSignature(signature)
- .map(supportingMethod->toSearchResult(paramIndex, paramType,
supportingMethod))
+ .map(supportingMethod->toSearchResult(type, paramIndex, paramType,
supportingMethod))
.forEach(onMethodFound);
}
@@ -193,9 +196,7 @@ public final class ParameterSupport {
//limit: [0 .. paramIndex + 1]
for(int limit = paramIndex + 1; limit>=0; --limit) {
-
val signature = concat(paramTypes, limit, additionalParamTypes);
-
val supportingMethod =
MethodFinder
.memberSupport(type, methodNames,
processMethodContext.getIntrospectionPolicy())
@@ -203,25 +204,24 @@ public final class ParameterSupport {
.streamMethodsMatchingSignature(signature)
.findFirst()
.orElse(null);
-
if(supportingMethod != null) {
- onMethodFound.accept(toSearchResult(paramIndex, paramType,
supportingMethod));
+ onMethodFound.accept(toSearchResult(type, paramIndex,
paramType, supportingMethod));
return;
}
-
}
-
}
private static ParamSupportingMethodSearchResult toSearchResult(
+ final Class<?> declaringClass,
final int paramIndex,
final Class<?> paramType,
final Method supportingMethod) {
return ParamSupportingMethodSearchResult
.of(paramIndex, paramType,
- supportingMethod,
- supportingMethod.getReturnType(),
- Optional.empty());
+ supportingMethod,
+ Optional.empty(),
+ TypeOfAnyCardinality.forMethodReturn(
+ declaringClass, supportingMethod));
}
/**
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/ActionParameterAutoCompleteFacet.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/ActionParameterAutoCompleteFacet.java
index c60f8bee3e..70aae52852 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/ActionParameterAutoCompleteFacet.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/ActionParameterAutoCompleteFacet.java
@@ -22,6 +22,7 @@ import org.apache.isis.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.object.ManagedObject;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
/**
* Obtain auto-completion for each of the parameters of the action.
@@ -34,6 +35,7 @@ import org.apache.isis.core.metamodel.object.ManagedObject;
public interface ActionParameterAutoCompleteFacet extends Facet {
public Can<ManagedObject> autoComplete(
+ ObjectSpecification requiredSpec,
ManagedObject inObject,
Can<ManagedObject> pendingArgs,
String searchArg,
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
index 09fc8d62ad..fa3b09aef1 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
@@ -25,6 +25,7 @@ import java.util.Optional;
import java.util.function.BiConsumer;
import org.apache.isis.commons.collections.Can;
+import
org.apache.isis.core.config.progmodel.ProgrammingModelConstants.CollectionSemantics;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
@@ -33,6 +34,8 @@ import
org.apache.isis.core.metamodel.facets.param.autocomplete.MinLengthUtil;
import org.apache.isis.core.metamodel.object.ManagedObject;
import org.apache.isis.core.metamodel.object.ManagedObjects;
import org.apache.isis.core.metamodel.object.MmInvokeUtil;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.TypeOfAnyCardinality;
import lombok.Getter;
import lombok.NonNull;
@@ -43,19 +46,19 @@ extends ActionParameterAutoCompleteFacetAbstract
implements ImperativeFacet {
@Getter(onMethod_ = {@Override}) private final @NonNull Can<Method>
methods;
- private final Class<?> choicesType;
+ private final TypeOfAnyCardinality paramSupportReturnType;
private final int minLength;
private final Optional<Constructor<?>> patConstructor;
public ActionParameterAutoCompleteFacetViaMethod(
final Method method,
- final Class<?> choicesType,
+ final TypeOfAnyCardinality paramSupportReturnType,
final Optional<Constructor<?>> patConstructor,
final FacetHolder holder) {
super(holder);
this.methods = ImperativeFacet.singleMethod(method);
- this.choicesType = choicesType;
+ this.paramSupportReturnType = paramSupportReturnType;
this.minLength = MinLengthUtil.determineMinLength(method);
this.patConstructor = patConstructor;
}
@@ -72,6 +75,7 @@ implements ImperativeFacet {
@Override
public Can<ManagedObject> autoComplete(
+ final ObjectSpecification elementSpec,
final ManagedObject owningAdapter,
final Can<ManagedObject> pendingArgs,
final String searchArg,
@@ -87,7 +91,6 @@ implements ImperativeFacet {
if (collectionOrArray == null) {
return Can.empty();
}
- val elementSpec = specForTypeElseFail(choicesType);
val visibleChoices = ManagedObjects
.adaptMultipleOfTypeThenFilterByVisibility(
elementSpec, collectionOrArray,
interactionInitiatedBy);
@@ -99,7 +102,9 @@ implements ImperativeFacet {
public void visitAttributes(final BiConsumer<String, Object> visitor) {
super.visitAttributes(visitor);
ImperativeFacet.visitAttributes(this, visitor);
- visitor.accept("choicesType", choicesType);
+ visitor.accept("choicesType",
paramSupportReturnType.getCollectionSemantics()
+ .map(CollectionSemantics::name)
+ .orElse("NONE"));
visitor.accept("minLength", minLength);
}
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethodFactory.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethodFactory.java
index 8e0f782475..e9f2e894a6 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethodFactory.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethodFactory.java
@@ -44,11 +44,11 @@ extends ActionParameterSupportFacetFactoryAbstract {
final FacetedMethodParameter paramAsHolder,
final ParamSupportingMethodSearchResult searchResult) {
val autoCompleteMethod = searchResult.getSupportingMethod();
- val paramType = searchResult.getParamType();
val patConstructor = searchResult.getPatConstructor();
+ val paramSupportReturnType = searchResult.getParamSupportReturnType();
addFacet(
new ActionParameterAutoCompleteFacetViaMethod(
- autoCompleteMethod, paramType, patConstructor,
paramAsHolder));
+ autoCompleteMethod, paramSupportReturnType,
patConstructor, paramAsHolder));
}
}
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
index 5da09ccd5e..d46a070bd0 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
@@ -24,6 +24,7 @@ import java.util.Optional;
import java.util.function.BiConsumer;
import org.apache.isis.commons.collections.Can;
+import
org.apache.isis.core.config.progmodel.ProgrammingModelConstants.CollectionSemantics;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
@@ -33,6 +34,7 @@ import org.apache.isis.core.metamodel.object.ManagedObject;
import org.apache.isis.core.metamodel.object.ManagedObjects;
import org.apache.isis.core.metamodel.object.MmInvokeUtil;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.TypeOfAnyCardinality;
import lombok.Getter;
import lombok.NonNull;
@@ -43,18 +45,18 @@ extends ActionParameterChoicesFacetAbstract
implements ImperativeFacet {
@Getter(onMethod_ = {@Override}) private final @NonNull Can<Method>
methods;
- private final Class<?> choicesType;
+ private final TypeOfAnyCardinality paramSupportReturnType;
private final Optional<Constructor<?>> patConstructor;
public ActionParameterChoicesFacetViaMethod(
final Method method,
- final Class<?> choicesType,
+ final TypeOfAnyCardinality paramSupportReturnType,
final Optional<Constructor<?>> patConstructor,
final FacetHolder holder) {
super(holder);
this.methods = ImperativeFacet.singleMethod(method);
- this.choicesType = choicesType;
+ this.paramSupportReturnType = paramSupportReturnType;
this.patConstructor = patConstructor;
}
@@ -89,7 +91,9 @@ implements ImperativeFacet {
public void visitAttributes(final BiConsumer<String, Object> visitor) {
super.visitAttributes(visitor);
ImperativeFacet.visitAttributes(this, visitor);
- visitor.accept("choicesType", choicesType);
+ visitor.accept("choicesType",
paramSupportReturnType.getCollectionSemantics()
+ .map(CollectionSemantics::name)
+ .orElse("NONE"));
}
}
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethodFactory.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethodFactory.java
index 480f190f5b..ad35c37cef 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethodFactory.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethodFactory.java
@@ -41,11 +41,11 @@ extends ActionParameterSupportFacetFactoryAbstract {
final FacetedMethodParameter paramAsHolder,
final ParamSupportingMethodSearchResult searchResult) {
val choicesMethod = searchResult.getSupportingMethod();
- val returnType = searchResult.getReturnType();
val patConstructor = searchResult.getPatConstructor();
+ val paramSupportReturnType = searchResult.getParamSupportReturnType();
addFacet(
new ActionParameterChoicesFacetViaMethod(
- choicesMethod, returnType, patConstructor,
paramAsHolder));
+ choicesMethod, paramSupportReturnType, patConstructor,
paramAsHolder));
}
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index ad45cb72a9..6d33abbb53 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -186,9 +186,15 @@ implements
return Can.empty();
}
+ val paramSpec = getElementType();
+
val visibleChoices = autoCompleteFacet
- .autoComplete(pendingArgs.getActionTarget(),
pendingArgs.getParamValues(), searchArg, interactionInitiatedBy);
- checkChoicesOrAutoCompleteType(getSpecificationLoader(),
visibleChoices, getElementType());
+ .autoComplete(paramSpec,
+ pendingArgs.getActionTarget(),
+ pendingArgs.getParamValues(),
+ searchArg,
+ interactionInitiatedBy);
+ checkChoicesOrAutoCompleteType(getSpecificationLoader(),
visibleChoices, paramSpec);
return visibleChoices;
}
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 9963592a18..720254b970 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
@@ -65,12 +65,13 @@ import org.apache.isis.viewer.wicket.ui.util.WktComponents;
import org.apache.isis.viewer.wicket.ui.util.WktDecorators;
import org.apache.isis.viewer.wicket.ui.util.WktTooltips;
-import
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NonNull;
import lombok.val;
+import
de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
+
public abstract class ScalarPanelAbstract
extends PanelAbstract<ManagedObject, ScalarModel>
implements ScalarModelSubscriber {
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 79aa55330d..f4d721da62 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
@@ -18,6 +18,7 @@
*/
package org.apache.isis.viewer.wicket.ui.components.scalars;
+import java.io.Serializable;
import java.util.Optional;
import java.util.function.Function;
@@ -44,9 +45,16 @@ extends ScalarPanelFormFieldAbstract<ManagedObject> {
private static final long serialVersionUID = 1L;
+ public static interface ChoiceTitleHandler extends Serializable {
+ void clearTitleAttribute();
+ void setTitleAttribute(@Nullable String titleAttribute);
+ }
+
protected Select2 select2;
- public ScalarPanelSelectAbstract(final String id, final ScalarModel
scalarModel) {
+ public ScalarPanelSelectAbstract(
+ final String id,
+ final ScalarModel scalarModel) {
super(id, scalarModel, ManagedObject.class);
setOutputMarkupId(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 3e96ccb307..2b98c4fc46 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
@@ -30,17 +30,17 @@ import org.apache.wicket.util.convert.ConversionException;
import org.apache.wicket.util.convert.IConverter;
import
org.apache.isis.applib.services.placeholder.PlaceholderRenderService.PlaceholderLiteral;
+import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.core.metamodel.object.ManagedObject;
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.ScalarPanelAbstract;
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;
import
org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.ChoiceProviderForReferences;
import org.apache.isis.viewer.wicket.ui.util.Wkt;
-import org.apache.isis.viewer.wicket.ui.util.Wkt.EventTopic;
import org.apache.isis.viewer.wicket.ui.util.WktComponents;
import lombok.val;
@@ -49,7 +49,9 @@ import lombok.val;
* Panel for rendering scalars which of are of reference type (as opposed to
* value types).
*/
-public class ReferencePanel extends ScalarPanelSelectAbstract {
+public class ReferencePanel
+extends ScalarPanelSelectAbstract
+implements ChoiceTitleHandler {
private static final long serialVersionUID = 1L;
@@ -118,16 +120,14 @@ public class ReferencePanel extends
ScalarPanelSelectAbstract {
protected void onNotEditable(final String disableReason, final
Optional<AjaxRequestTarget> target) {
super.onNotEditable(disableReason, target);
if(isCompactFormat) return;
- entityLink.setEnabled(false);
- Wkt.attributeReplace(entityLink, "title", disableReason);
+ setTitleAttribute(disableReason);
}
@Override
protected void onEditable(final Optional<AjaxRequestTarget> target) {
super.onEditable(target);
if(isCompactFormat) return;
- entityLink.setEnabled(true);
- Wkt.attributeReplace(entityLink, "title", "");
+ clearTitleAttribute();
}
private Optional<MarkupContainer> lookupScalarValueContainer() {
@@ -137,6 +137,9 @@ public class ReferencePanel extends
ScalarPanelSelectAbstract {
}
private void syncWithInput() {
+
+ System.err.printf("syncWithInput %s%n", scalarModel().getObject());
+
if(isCompactFormat) return;
val scalarModel = scalarModel();
@@ -246,10 +249,28 @@ public class ReferencePanel extends
ScalarPanelSelectAbstract {
// --
+// @Override
+// public void onUpdate(final AjaxRequestTarget target, final
ScalarPanelAbstract scalarPanel) {
+// super.onUpdate(target, scalarPanel);
+// Wkt.javaScriptAdd(target, EventTopic.CLOSE_SELECT2, getMarkupId());
+// }
+
+ // -- CHOICE TITLE HANDLER
+
@Override
- public void onUpdate(final AjaxRequestTarget target, final
ScalarPanelAbstract scalarPanel) {
- super.onUpdate(target, scalarPanel);
- Wkt.javaScriptAdd(target, EventTopic.CLOSE_SELECT2, getMarkupId());
+ public void clearTitleAttribute() {
+ entityLink.setEnabled(true);
+ Wkt.attributeReplace(entityLink, "title", "");
+ }
+
+ @Override
+ public void setTitleAttribute(final String titleAttribute) {
+ if(_Strings.isNullOrEmpty(titleAttribute)) {
+ clearTitleAttribute();
+ return;
+ }
+ entityLink.setEnabled(false);
+ Wkt.attributeReplace(entityLink, "title", titleAttribute);
}
}
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 02948a09f5..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
@@ -28,6 +28,7 @@ import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.core.metamodel.object.ManagedObject;
import org.apache.isis.viewer.wicket.model.models.ScalarModel;
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.select2.providers.ChoiceProviderForValues;
import org.apache.isis.viewer.wicket.ui.util.Wkt;
import org.apache.isis.viewer.wicket.ui.util.WktTooltips;
@@ -35,7 +36,8 @@ import org.apache.isis.viewer.wicket.ui.util.WktTooltips;
import lombok.val;
public class ValueChoicesSelect2Panel
-extends ScalarPanelSelectAbstract {
+extends ScalarPanelSelectAbstract
+implements ChoiceTitleHandler {
private static final long serialVersionUID = 1L;
@@ -91,20 +93,6 @@ extends ScalarPanelSelectAbstract {
select2.setEnabled(false);
}
- private void clearTitleAttribute() {
- val target = getRegularFrame();
- WktTooltips.clearTooltip(target);
- }
-
- private void setTitleAttribute(final String titleAttribute) {
- if(_Strings.isNullOrEmpty(titleAttribute)) {
- clearTitleAttribute();
- return;
- }
- val target = getRegularFrame();
- WktTooltips.addTooltip(target, titleAttribute);
- }
-
@Override
protected void onNotEditable(final String disableReason, final
Optional<AjaxRequestTarget> target) {
super.onNotEditable(disableReason, target);
@@ -117,8 +105,26 @@ extends ScalarPanelSelectAbstract {
protected void onEditable(final Optional<AjaxRequestTarget> target) {
super.onEditable(target);
if(isCompactFormat) return;
- setTitleAttribute("");
+ clearTitleAttribute();
select2.setEnabled(true);
}
+ // -- CHOICE TITLE HANDLER
+
+ @Override
+ public void clearTitleAttribute() {
+ val target = getRegularFrame();
+ WktTooltips.clearTooltip(target);
+ }
+
+ @Override
+ public void setTitleAttribute(final String titleAttribute) {
+ if(_Strings.isNullOrEmpty(titleAttribute)) {
+ clearTitleAttribute();
+ return;
+ }
+ val target = getRegularFrame();
+ WktTooltips.addTooltip(target, titleAttribute);
+ }
+
}
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java
index 258089212d..b440c4ee95 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2.java
@@ -21,12 +21,16 @@ package
org.apache.isis.viewer.wicket.ui.components.widgets.select2;
import java.io.Serializable;
import java.util.List;
+import org.apache.wicket.Component;
import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LambdaModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.validation.IValidator;
import org.wicketstuff.select2.AbstractSelect2Choice;
+import org.wicketstuff.select2.JQuery;
import org.wicketstuff.select2.Select2Choice;
import org.wicketstuff.select2.Select2MultiChoice;
@@ -77,6 +81,9 @@ implements
select2.setLabel(Model.of(scalarModel.getFriendlyName()));
select2.getSettings().setWidth("100%");
+ // listen on select2:select events (client-side)
+ select2.add(new Select2OnSelect());
+
return select2;
}
@@ -180,6 +187,32 @@ implements
});
}
+ /**
+ * Listen on select2:select events so that we then can send an AJAX
request with the selected object(.id),
+ * while still doing parameter negotiation; that is, not submitting the
form yet.
+ * @see
"https://select2.org/programmatic-control/events#listening-for-events"
+ * @since 2.0
+ */
+ static class Select2OnSelect extends Behavior {
+ private static final long serialVersionUID = 1L;
+ @Override public void renderHead(final Component component, final
IHeaderResponse response) {
+
+ /* DEBUG
+ $('#sel-sample2').on('select2:select', function (e) {
+ var data = e.params.data;
+ console.log(data);
+ alert("selection-event: " + data.id);
+ });*/
+
+
response.render(OnDomReadyHeaderItem.forScript(JQuery.execute("$('#%s')"
+ + ".on('select2:select', function (e) {"
+ + "var data = e.params.data;"
+ + "console.log(data);"
+ + "});",
+ component.getMarkupId())));
+ }
+ }
+
// -- HELPER
private ObjectMemento memento() {
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/viewer/js/jquery.isis.wicket.viewer.js
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/viewer/js/jquery.isis.wicket.viewer.js
index ae3bdefe2d..73147e0d3b 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/viewer/js/jquery.isis.wicket.viewer.js
+++
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/viewer/js/jquery.isis.wicket.viewer.js
@@ -94,14 +94,14 @@ $(function() {
}, 0);
});
- Wicket.Event.subscribe(Isis.Topic.CLOSE_SELECT2, function(jqEvent,
panelId) {
- setTimeout(function() {
- var $panel = $('#'+panelId);
- //console.log('Isis.Topic.CLOSE_SELECT2: panelId=' + panelId);
- //$($panel).find('select').select2('close');
- //$($panel).find('select').filter(':visible:first').focus();
- }, 0);
- });
+// Wicket.Event.subscribe(Isis.Topic.CLOSE_SELECT2, function(jqEvent,
panelId) {
+// setTimeout(function() {
+// var $panel = $('#'+panelId);
+// //console.log('Isis.Topic.CLOSE_SELECT2: panelId=' + panelId);
+// //$($panel).find('select').select2('close');
+// //$($panel).find('select').filter(':visible:first').focus();
+// }, 0);
+// });
Wicket.Event.subscribe(Isis.Topic.FOCUS_FIRST_PARAMETER, function(jqEvent,
elementId) {
setTimeout(function() {
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Wkt.java
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Wkt.java
index 37f240f9a0..5bcd4cf87b 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Wkt.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Wkt.java
@@ -1008,7 +1008,7 @@ public class Wkt {
FOCUS_FIRST_PROPERTY,
FOCUS_FIRST_PARAMETER,
OPEN_SELECT2,
- CLOSE_SELECT2,
+ //CLOSE_SELECT2,
}
public void javaScriptAdd(final AjaxRequestTarget target, final EventTopic
topic, final String containerId) {