This is an automated email from the ASF dual-hosted git repository. ahuber pushed a commit to branch 3172-select2 in repository https://gitbox.apache.org/repos/asf/isis.git
commit b76709ea43c5753aa16d7fad6bd5f1576efae4c7 Author: Andi Huber <[email protected]> AuthorDate: Thu Aug 25 17:00:23 2022 +0200 ISIS-3172: purge EmptyChoiceProvider --- .../scalars/ScalarPanelSelectAbstract.java | 20 +++------ .../scalars/reference/ReferencePanel.java | 5 +-- .../valuechoices/ValueChoicesSelect2Panel.java | 9 +--- .../ui/components/widgets/select2/ChoiceExt.java | 40 ----------------- .../ui/components/widgets/select2/Select2.java | 52 +++++++++++++++------- .../widgets/select2/Select2ChoiceExt.java | 15 ++++--- .../widgets/select2/Select2MultiChoiceExt.java | 16 ++++--- .../select2/providers/ChoiceProviderAbstract.java | 33 +++++++------- .../select2/providers/ChoiceProviderForValues.java | 1 + 9 files changed, 80 insertions(+), 111 deletions(-) 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 dd4b55b5c1..8d299e394e 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 @@ -22,15 +22,13 @@ import java.util.Optional; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.model.Model; import org.springframework.lang.Nullable; -import org.wicketstuff.select2.ChoiceProvider; -import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento; import org.apache.isis.core.metamodel.spec.ManagedObject; import org.apache.isis.viewer.commons.model.feature.ParameterUiModel; import org.apache.isis.viewer.wicket.model.models.ScalarModel; import org.apache.isis.viewer.wicket.ui.components.widgets.select2.Select2; +import org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.ChoiceProviderAbstract; import org.apache.isis.viewer.wicket.ui.util.Wkt; import org.apache.isis.viewer.wicket.ui.util.Wkt.EventTopic; @@ -43,8 +41,7 @@ extends ScalarPanelFormFieldAbstract<ManagedObject> { private static final long serialVersionUID = 1L; - @Getter - protected Select2 select2; + @Getter protected Select2 select2; public ScalarPanelSelectAbstract(final String id, final ScalarModel scalarModel) { super(id, scalarModel, ManagedObject.class); @@ -52,20 +49,13 @@ extends ScalarPanelFormFieldAbstract<ManagedObject> { } protected final Select2 createSelect2(final String id) { - val scalarModel = scalarModel(); - - val select2 = Select2.createSelect2(id, scalarModel()); - select2.setLabel(Model.of(scalarModel.getFriendlyName())); - select2.getSettings().setWidth("100%"); - - updateChoices(select2); - return select2; + return Select2.createSelect2(id, scalarModel(), buildChoiceProvider()); } /** * Mandatory hook (is called by {@link #createSelect2(String)}) */ - protected abstract ChoiceProvider<ObjectMemento> buildChoiceProvider(); + protected abstract ChoiceProviderAbstract buildChoiceProvider(); // ////////////////////////////////////// @@ -110,7 +100,7 @@ extends ScalarPanelFormFieldAbstract<ManagedObject> { if (select2 == null) { return false; } - select2.setProvider(buildChoiceProvider()); + select2.rebuildChoiceProvider(); 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 0585c1a53c..dfef28f3a5 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 @@ -28,11 +28,9 @@ import org.apache.wicket.markup.html.form.FormComponent; import org.apache.wicket.model.Model; import org.apache.wicket.util.convert.ConversionException; import org.apache.wicket.util.convert.IConverter; -import org.wicketstuff.select2.ChoiceProvider; import org.wicketstuff.select2.Settings; import org.apache.isis.applib.services.placeholder.PlaceholderRenderService.PlaceholderLiteral; -import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento; import org.apache.isis.core.metamodel.spec.ManagedObject; import org.apache.isis.core.metamodel.util.Facets; import org.apache.isis.viewer.commons.model.StringForRendering; @@ -45,6 +43,7 @@ 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.widgets.entitysimplelink.EntityLinkSimplePanel; import org.apache.isis.viewer.wicket.ui.components.widgets.select2.Select2; +import org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.ChoiceProviderAbstract; 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; @@ -255,7 +254,7 @@ public class ReferencePanel extends ScalarPanelSelectAbstract { } @Override - protected ChoiceProvider<ObjectMemento> buildChoiceProvider() { + protected ChoiceProviderAbstract buildChoiceProvider() { return new ChoiceProviderForReferences(scalarModel()); } 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 e643170047..31923826b5 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 @@ -23,15 +23,14 @@ import java.util.Optional; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.markup.html.form.FormComponent; -import org.wicketstuff.select2.ChoiceProvider; import org.apache.isis.commons.internal.base._Strings; -import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento; import org.apache.isis.core.metamodel.spec.ManagedObject; import org.apache.isis.viewer.commons.model.StringForRendering; import org.apache.isis.viewer.wicket.model.models.ScalarModel; import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarFragmentFactory.InputFragment; import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelSelectAbstract; +import org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.ChoiceProviderAbstract; 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; @@ -139,13 +138,9 @@ extends ScalarPanelSelectAbstract { // -- - // 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() { + protected ChoiceProviderAbstract buildChoiceProvider() { return new ChoiceProviderForValues(scalarModel()); } - - } diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/ChoiceExt.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/ChoiceExt.java deleted file mode 100644 index 5a205a4310..0000000000 --- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/ChoiceExt.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.isis.viewer.wicket.ui.components.widgets.select2; - -import org.wicketstuff.select2.ChoiceProvider; -import org.wicketstuff.select2.Select2Choice; -import org.wicketstuff.select2.Select2MultiChoice; -import org.wicketstuff.select2.Settings; - -import org.apache.isis.applib.id.HasLogicalType; -import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento; - -/** - * Represents functionality that is common to both {@link Select2Choice} and {@link Select2MultiChoice}, but for - * which there is no suitable common supertype. - * - */ -public interface ChoiceExt extends HasLogicalType { - - void setProvider(final ChoiceProvider<ObjectMemento> providerForChoices); - Settings getSettings(); - - -} 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 ca3b361961..d3ca92a044 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 @@ -30,7 +30,6 @@ import org.wicketstuff.select2.AbstractSelect2Choice; import org.wicketstuff.select2.ChoiceProvider; import org.wicketstuff.select2.Select2Choice; import org.wicketstuff.select2.Select2MultiChoice; -import org.wicketstuff.select2.Settings; import org.apache.isis.commons.functional.Either; import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento; @@ -41,8 +40,10 @@ import org.apache.isis.viewer.wicket.model.models.ScalarModel; import org.apache.isis.viewer.wicket.model.models.ScalarModelWithMultiChoice; import org.apache.isis.viewer.wicket.model.models.ScalarModelWithSingleChoice; import org.apache.isis.viewer.wicket.model.util.WktContext; +import org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.ChoiceProviderAbstactForScalarModel; import lombok.NonNull; +import lombok.SneakyThrows; import lombok.val; /** @@ -57,14 +58,26 @@ implements final Either<Select2ChoiceExt, Select2MultiChoiceExt> select2Choice; - public static Select2 createSelect2(final String id, final ScalarModel scalarModel) { - return new Select2(!scalarModel.isCollection() + public static Select2 createSelect2( + final String id, + final ScalarModel scalarModel, + final ChoiceProvider<ObjectMemento> choiceProvider) { + val select2 = new Select2(scalarModel.isScalar() ? Either.left( Select2ChoiceExt.create(id, - ScalarModelWithSingleChoice.chain(scalarModel), scalarModel)) + ScalarModelWithSingleChoice.chain(scalarModel), + scalarModel, + choiceProvider)) : Either.right( Select2MultiChoiceExt.create(id, - ScalarModelWithMultiChoice.chain(scalarModel), scalarModel))); + ScalarModelWithMultiChoice.chain(scalarModel), + scalarModel, + choiceProvider))); + + select2.setLabel(Model.of(scalarModel.getFriendlyName())); + select2.getSettings().setWidth("100%"); + + return select2; } private Select2(final @NonNull Either<Select2ChoiceExt, Select2MultiChoiceExt> select2Choice) { @@ -72,17 +85,28 @@ implements asComponent().setOutputMarkupId(true); } - public void setProvider(final ChoiceProvider<ObjectMemento> providerForChoices) { - asChoiceExt().setProvider(providerForChoices); + public org.wicketstuff.select2.Settings getSettings() { + return select2Choice.fold( + Select2ChoiceExt::getSettings, + Select2MultiChoiceExt::getSettings); } - public AbstractSelect2Choice<ObjectMemento, ?> asComponent() { - return select2Choice.fold( - single->single, - multi->multi); + // not sure if required any more + @SneakyThrows + public void rebuildChoiceProvider() { + val oldProvider = (ChoiceProviderAbstactForScalarModel) + select2Choice.fold( + Select2ChoiceExt::getProvider, + Select2MultiChoiceExt::getProvider); + val scalarModel = oldProvider.scalarModel(); + val constr = oldProvider.getClass().getConstructor(ScalarModel.class); + val newProvider = constr.newInstance(scalarModel); + select2Choice.accept( + single->single.setProvider(newProvider), + multi->multi.setProvider(newProvider)); } - public ChoiceExt asChoiceExt() { + public AbstractSelect2Choice<ObjectMemento, ?> asComponent() { return select2Choice.fold( single->single, multi->multi); @@ -105,10 +129,6 @@ implements return asComponent().checkRequired(); } - public Settings getSettings() { - return asChoiceExt().getSettings(); - } - public ManagedObject getConvertedInputValue() { return getCommonContext().reconstructObject(convertedInput()); } diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2ChoiceExt.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2ChoiceExt.java index 937522b358..9e68a73c64 100644 --- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2ChoiceExt.java +++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2ChoiceExt.java @@ -19,26 +19,28 @@ package org.apache.isis.viewer.wicket.ui.components.widgets.select2; import org.apache.wicket.model.IModel; +import org.wicketstuff.select2.ChoiceProvider; import org.wicketstuff.select2.Select2Choice; +import org.apache.isis.applib.id.HasLogicalType; import org.apache.isis.applib.id.LogicalType; import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento; import org.apache.isis.viewer.wicket.model.models.ScalarModel; -import org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.ChoiceProviderAbstract; import lombok.Getter; public class Select2ChoiceExt extends Select2Choice<ObjectMemento> -implements ChoiceExt { +implements HasLogicalType { private static final long serialVersionUID = 1L; public static Select2ChoiceExt create( final String id, final IModel<ObjectMemento> modelObject, - final ScalarModel scalarModel) { - return new Select2ChoiceExt(id, modelObject, scalarModel); + final ScalarModel scalarModel, + final ChoiceProvider<ObjectMemento> choiceProvider) { + return new Select2ChoiceExt(id, modelObject, scalarModel, choiceProvider); } @Getter(onMethod_ = {@Override}) private final LogicalType logicalType; @@ -46,8 +48,9 @@ implements ChoiceExt { private Select2ChoiceExt( final String id, final IModel<ObjectMemento> model, - final ScalarModel scalarModel) { - super(id, model, ChoiceProviderAbstract.empty()); + final ScalarModel scalarModel, + final ChoiceProvider<ObjectMemento> choiceProvider) { + super(id, model, choiceProvider); logicalType = scalarModel.getScalarTypeSpec().getLogicalType(); getSettings().setCloseOnSelect(true); diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2MultiChoiceExt.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2MultiChoiceExt.java index 99de1721ff..0db0214c09 100644 --- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2MultiChoiceExt.java +++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2MultiChoiceExt.java @@ -22,30 +22,31 @@ import java.util.ArrayList; import java.util.Collection; import org.apache.wicket.model.IModel; +import org.wicketstuff.select2.ChoiceProvider; import org.wicketstuff.select2.Select2MultiChoice; +import org.apache.isis.applib.id.HasLogicalType; import org.apache.isis.applib.id.LogicalType; import org.apache.isis.commons.internal.base._Casts; import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento; import org.apache.isis.viewer.wicket.model.models.ScalarModel; -import org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.ChoiceProviderAbstract; import lombok.Getter; import lombok.val; public class Select2MultiChoiceExt extends Select2MultiChoice<ObjectMemento> -implements - ChoiceExt { +implements HasLogicalType { private static final long serialVersionUID = 1L; public static Select2MultiChoiceExt create( final String id, final IModel<ArrayList<ObjectMemento>> modelObject, - final ScalarModel scalarModel) { + final ScalarModel scalarModel, + final ChoiceProvider<ObjectMemento> choiceProvider) { - return new Select2MultiChoiceExt(id, _Casts.uncheckedCast(modelObject), scalarModel); + return new Select2MultiChoiceExt(id, _Casts.uncheckedCast(modelObject), scalarModel, choiceProvider); } @Getter(onMethod_ = {@Override}) private final LogicalType logicalType; @@ -53,9 +54,10 @@ implements Select2MultiChoiceExt( final String id, final IModel<Collection<ObjectMemento>> model, - final ScalarModel scalarModel) { + final ScalarModel scalarModel, + final ChoiceProvider<ObjectMemento> choiceProvider) { - super(id, model, ChoiceProviderAbstract.empty()); + super(id, model, choiceProvider); logicalType = scalarModel.getScalarTypeSpec().getLogicalType(); getSettings().setCloseOnSelect(true); diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderAbstract.java index 1b485d2b3b..9bd65751a7 100644 --- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderAbstract.java +++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderAbstract.java @@ -24,7 +24,6 @@ import java.util.stream.Collectors; import org.apache.wicket.util.string.Strings; import org.springframework.lang.Nullable; import org.wicketstuff.select2.ChoiceProvider; -import org.wicketstuff.select2.Response; import org.apache.isis.applib.services.i18n.TranslationContext; import org.apache.isis.applib.services.placeholder.PlaceholderRenderService; @@ -46,22 +45,22 @@ implements HasCommonContext { // -- EMPTY CHOICE PROVIDER - public static class EmptyChoiceProvider extends ChoiceProvider<ObjectMemento> { - private static final long serialVersionUID = 1L; - @Override public String getDisplayValue(final ObjectMemento object) { - return null; } - @Override public String getIdValue(final ObjectMemento object) { - return null; } - @Override public void query( - final String term, final int page, final Response<ObjectMemento> response) {} - @Override public Collection<ObjectMemento> toChoices(final Collection<String> ids) { - return null;} - } - private static final EmptyChoiceProvider EMPTY = new EmptyChoiceProvider(); - - public static EmptyChoiceProvider empty() { - return EMPTY; - } +// public static class EmptyChoiceProvider extends ChoiceProvider<ObjectMemento> { +// private static final long serialVersionUID = 1L; +// @Override public String getDisplayValue(final ObjectMemento object) { +// return null; } +// @Override public String getIdValue(final ObjectMemento object) { +// return null; } +// @Override public void query( +// final String term, final int page, final Response<ObjectMemento> response) {} +// @Override public Collection<ObjectMemento> toChoices(final Collection<String> ids) { +// return null;} +// } +// private static final EmptyChoiceProvider EMPTY = new EmptyChoiceProvider(); +// +// public static EmptyChoiceProvider empty() { +// return EMPTY; +// } // -- diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForValues.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForValues.java index b0dc468a1b..da950f1360 100644 --- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForValues.java +++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForValues.java @@ -26,6 +26,7 @@ import org.apache.isis.viewer.wicket.model.models.ScalarModel; import lombok.val; +// values don't currently support autoComplete - no branch is required public class ChoiceProviderForValues extends ChoiceProviderAbstactForScalarModel {
