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());
-    }
-
 }

Reply via email to