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 352b08ba87 ISIS-3215: minor select2 panel refactoring
352b08ba87 is described below
commit 352b08ba87e3244a7de1e49b74c06ebe77660370
Author: Andi Huber <[email protected]>
AuthorDate: Mon Sep 19 06:59:12 2022 +0200
ISIS-3215: minor select2 panel refactoring
---
viewers/wicket/ui/src/main/java/module-info.java | 2 +-
.../scalars/ScalarPanelSelectAbstract.java | 58 ++++++++++++++--------
.../scalars/reference/ReferencePanel.java | 39 +--------------
.../valuechoices/ValueChoicesSelect2Panel.java | 29 ++---------
4 files changed, 42 insertions(+), 86 deletions(-)
diff --git a/viewers/wicket/ui/src/main/java/module-info.java
b/viewers/wicket/ui/src/main/java/module-info.java
index 9f2e9d39b1..19b89b81db 100644
--- a/viewers/wicket/ui/src/main/java/module-info.java
+++ b/viewers/wicket/ui/src/main/java/module-info.java
@@ -141,7 +141,7 @@ module org.apache.isis.viewer.wicket.ui {
requires org.apache.isis.viewer.commons.model;
requires org.apache.isis.viewer.commons.prism;
requires org.apache.isis.viewer.commons.services;
- requires org.apache.isis.viewer.wicket.model;
+ requires transitive org.apache.isis.viewer.wicket.model;
requires org.apache.logging.log4j;
requires org.apache.wicket.auth.roles;
requires org.apache.wicket.core;
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 f9d6cfca3e..79aa55330d 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
@@ -19,16 +19,18 @@
package org.apache.isis.viewer.wicket.ui.components.scalars;
import java.util.Optional;
+import java.util.function.Function;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.springframework.lang.Nullable;
-import org.wicketstuff.select2.Settings;
import org.apache.isis.core.metamodel.object.ManagedObject;
import org.apache.isis.core.metamodel.util.Facets;
+import org.apache.isis.viewer.commons.model.components.UiString;
import org.apache.isis.viewer.commons.model.scalar.UiParameter;
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.widgets.select2.Select2;
import
org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers.ChoiceProviderAbstract;
import org.apache.isis.viewer.wicket.ui.util.Wkt;
@@ -49,41 +51,56 @@ extends ScalarPanelFormFieldAbstract<ManagedObject> {
setOutputMarkupId(true);
}
- protected final Select2 createSelect2(final String id) {
- val select2 = Select2.createSelect2(id, scalarModel(),
buildChoiceProvider());
- addSelect2Semantics(select2.getSettings());
- return select2;
- }
-
- private void addSelect2Semantics(final Settings settings) {
+ protected final Select2 createSelect2(
+ final String id,
+ final Function<ScalarModel, ChoiceProviderAbstract>
choiceProviderFactory) {
val scalarModel = scalarModel();
-
+ val select2 = Select2.createSelect2(id, scalarModel,
+ choiceProviderFactory.apply(scalarModel));
+ val settings = select2.getSettings();
switch(scalarModel.getChoiceProviderSort()) {
case CHOICES:
settings.setPlaceholder(scalarModel.getFriendlyName());
- return;
+ break;
case AUTO_COMPLETE:
settings.setPlaceholder(scalarModel.getFriendlyName());
settings.setMinimumInputLength(scalarModel.getAutoCompleteMinLength());
- return;
+ break;
case OBJECT_AUTO_COMPLETE:
//TODO render object place holder?
Facets.autoCompleteMinLength(scalarModel.getScalarTypeSpec())
.ifPresent(settings::setMinimumInputLength);
- return;
+ break;
default:
// ignore if no choices
}
+ return select2;
+ }
+
+ protected final boolean isEditableWithEitherAutoCompleteOrChoices() {
+ if(scalarModel().getRenderingHint().isInTable()) {
+ return false;
+ }
+ // doesn't apply if not editable, either
+ if(scalarModel().isViewMode()) {
+ return false;
+ }
+ return scalarModel().getChoiceProviderSort().isChoicesAny();
}
public final boolean checkSelect2Required() {
return select2.checkRequired();
}
- /**
- * Mandatory hook (is called by {@link #createSelect2(String)})
- */
- protected abstract ChoiceProviderAbstract buildChoiceProvider();
+ @Override
+ protected final UiString obtainOutputFormat() {
+ return UiString.text(select2.obtainOutputFormatModel().getObject());
+ }
+
+ @Override
+ protected final Optional<InputFragment> getInputFragmentType() {
+ return Optional.of(InputFragment.SELECT2);
+ }
// //////////////////////////////////////
@@ -91,7 +108,7 @@ extends ScalarPanelFormFieldAbstract<ManagedObject> {
* Automatically "opens" the select2.
*/
@Override
- protected void onSwitchFormForInlinePrompt(
+ protected final void onSwitchFormForInlinePrompt(
final WebMarkupContainer inlinePromptForm,
final AjaxRequestTarget target) {
Wkt.javaScriptAdd(target, EventTopic.OPEN_SELECT2,
inlinePromptForm.getMarkupId());
@@ -100,13 +117,12 @@ extends ScalarPanelFormFieldAbstract<ManagedObject> {
// //////////////////////////////////////
/**
- * Hook method to refresh choices when changing.
- *
+ * Refresh choices when changing.
* <p>
* called from onUpdate callback
*/
@Override
- public Repaint updateIfNecessary(
+ public final Repaint updateIfNecessary(
final @NonNull UiParameter paramModel,
final @NonNull Optional<AjaxRequestTarget> target) {
@@ -138,7 +154,7 @@ extends ScalarPanelFormFieldAbstract<ManagedObject> {
* @param target The Ajax request handler
*/
@Override
- public void repaint(final AjaxRequestTarget target) {
+ public final void repaint(final AjaxRequestTarget target) {
target.add(this);
}
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 74432c34f3..3e96ccb307 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
@@ -32,15 +32,12 @@ import org.apache.wicket.util.convert.IConverter;
import
org.apache.isis.applib.services.placeholder.PlaceholderRenderService.PlaceholderLiteral;
import org.apache.isis.core.metamodel.object.ManagedObject;
import org.apache.isis.viewer.commons.model.components.UiComponentType;
-import org.apache.isis.viewer.commons.model.components.UiString;
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.ScalarFragmentFactory.InputFragment;
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.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;
@@ -68,11 +65,6 @@ public class ReferencePanel extends
ScalarPanelSelectAbstract {
this.isCompactFormat = !scalarModel.getRenderingHint().isRegular();
}
- @Override
- protected UiString obtainOutputFormat() {
- return UiString.text(select2.obtainOutputFormatModel().getObject());
- }
-
@Override
protected Component createComponentForOutput(final String id) {
@@ -89,20 +81,12 @@ public class ReferencePanel extends
ScalarPanelSelectAbstract {
.createFragment(id, this,
scalarValueId->entityLinkOutputFormat);
}
- @Override
- protected Optional<InputFragment> getInputFragmentType() {
- return Optional.of(InputFragment.SELECT2);
- }
-
@Override
protected FormComponent<ManagedObject> createFormComponent(final String
id, final ScalarModel scalarModel) {
this.entityLink = new
EntityLinkSelect2Panel(UiComponentType.ENTITY_LINK.getId(), this);
entityLink.setRequired(scalarModel.isRequired());
-//
_Assert.assertTrue(scalarModel.getChoiceProviderSort().isChoicesAny(),
-// ()->String.format("inconsistent metamodel: rendering a
select2 while it has no choices; feature %s",
-// scalarModel.getMetaModel().getFeatureIdentifier()));
- this.select2 = createSelect2(ID_AUTO_COMPLETE);
+ this.select2 = createSelect2(ID_AUTO_COMPLETE,
ChoiceProviderForReferences::new);
entityLink.addOrReplace(select2.asComponent());
entityLink.setOutputMarkupId(true);
@@ -168,9 +152,6 @@ public class ReferencePanel extends
ScalarPanelSelectAbstract {
val isInlinePrompt = scalarModel.isInlinePrompt();
if(isInlinePrompt) {
iconAndTitle.setVisible(false);
-
- // bit of a hack... allows us to suppress the title using CSS
- //Wkt.cssAppend(iconAndTitle, "inlinePrompt");
}
val adapter = scalarModel.getObject();
@@ -228,11 +209,6 @@ public class ReferencePanel extends
ScalarPanelSelectAbstract {
}
- @Override
- protected ChoiceProviderAbstract buildChoiceProvider() {
- return new ChoiceProviderForReferences(scalarModel());
- }
-
// -- GET INPUT AS TITLE
String getTitleForFormComponentInput() {
@@ -276,19 +252,6 @@ public class ReferencePanel extends
ScalarPanelSelectAbstract {
Wkt.javaScriptAdd(target, EventTopic.CLOSE_SELECT2, getMarkupId());
}
- // -- HELPERS
-
- private boolean isEditableWithEitherAutoCompleteOrChoices() {
- if(scalarModel().getRenderingHint().isInTable()) {
- return false;
- }
- // doesn't apply if not editable, either
- if(scalarModel().isViewMode()) {
- return false;
- }
- return scalarModel().getChoiceProviderSort().isChoicesAny();
- }
-
}
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 3234104296..02948a09f5 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
@@ -26,11 +26,8 @@ import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.core.metamodel.object.ManagedObject;
-import org.apache.isis.viewer.commons.model.components.UiString;
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;
@@ -49,22 +46,16 @@ extends ScalarPanelSelectAbstract {
this.isCompactFormat = !scalarModel.getRenderingHint().isRegular();
}
- // --
-
@Override
protected Component createComponentForOutput(final String id) {
return Wkt.label(id, "placeholder");
}
@Override
- protected Optional<InputFragment> getInputFragmentType() {
- return Optional.of(InputFragment.SELECT);
- }
-
- @Override
- protected FormComponent<ManagedObject> createFormComponent(final String
id, final ScalarModel scalarModel) {
+ protected FormComponent<ManagedObject> createFormComponent(
+ final String id, final ScalarModel scalarModel) {
if(select2 == null) {
- this.select2 = createSelect2(id);
+ this.select2 = createSelect2(id, ChoiceProviderForValues::new);
} else {
select2.clearInput();
}
@@ -75,13 +66,6 @@ extends ScalarPanelSelectAbstract {
// --
- @Override
- protected UiString obtainOutputFormat() {
- return UiString.text(select2.obtainOutputFormatModel().getObject());
- }
-
- // --
-
@Override
protected void onInitializeNotEditable() {
super.onInitializeNotEditable();
@@ -137,11 +121,4 @@ extends ScalarPanelSelectAbstract {
select2.setEnabled(true);
}
- // --
-
- @Override
- protected ChoiceProviderAbstract buildChoiceProvider() {
- return new ChoiceProviderForValues(scalarModel());
- }
-
}