You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by ah...@apache.org on 2023/03/21 09:47:06 UTC

[causeway] branch master updated: CAUSEWAY-3391: de-duplicate ChoiceProviderSort

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/causeway.git


The following commit(s) were added to refs/heads/master by this push:
     new 568a448c07 CAUSEWAY-3391: de-duplicate ChoiceProviderSort
568a448c07 is described below

commit 568a448c07976caf414c65b002eddd537f726671
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Mar 21 10:47:00 2023 +0100

    CAUSEWAY-3391: de-duplicate ChoiceProviderSort
---
 .../viewer/commons/model/scalar/UiScalar.java      |  6 ++--
 ...ponentFactoryScalarTypeConstrainedAbstract.java |  8 ++---
 .../choices/ChoicesSelect2PanelFactory.java        |  2 +-
 .../providers/ChoiceProviderForReferences.java     | 35 +++++++++-------------
 4 files changed, 22 insertions(+), 29 deletions(-)

diff --git a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/scalar/UiScalar.java b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/scalar/UiScalar.java
index 3a48ab8676..65699b0c97 100644
--- a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/scalar/UiScalar.java
+++ b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/scalar/UiScalar.java
@@ -104,17 +104,17 @@ public interface UiScalar extends UiModel, HasMetaModelContext {
         return ChoiceProviderSort.valueOf(this);
     }
 
-    static enum ChoiceProviderSort {
+    public static enum ChoiceProviderSort {
         NO_CHOICES,
         CHOICES,
         AUTO_COMPLETE,
         OBJECT_AUTO_COMPLETE;
-        static ChoiceProviderSort valueOf(final UiScalar scalarModel) {
+        public static ChoiceProviderSort valueOf(final UiScalar scalarModel) {
             if (scalarModel.hasChoices()) {
                 return ChoiceProviderSort.CHOICES;
             } else if(scalarModel.hasAutoComplete()) {
                 return ChoiceProviderSort.AUTO_COMPLETE;
-            } else if(scalarModel.hasObjectAutoComplete()) {
+            } else if(Facets.autoCompleteIsPresent(scalarModel.getScalarTypeSpec())) {
                 return ChoiceProviderSort.OBJECT_AUTO_COMPLETE;
             }
             return NO_CHOICES;
diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/scalars/ComponentFactoryScalarTypeConstrainedAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/scalars/ComponentFactoryScalarTypeConstrainedAbstract.java
index 8610463fb0..4fff995ec0 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/scalars/ComponentFactoryScalarTypeConstrainedAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/scalars/ComponentFactoryScalarTypeConstrainedAbstract.java
@@ -53,15 +53,15 @@ extends ComponentFactoryScalarAbstract {
     @Override
     protected final ApplicationAdvice appliesTo(final ScalarModel scalarModel) {
 
-        // discriminates based on given scalarTypeConstraints, if any
+        // discriminates based on given scalarTypes, if any
         if(scalarTypes.isNotEmpty()
                 && !scalarModel.isScalarTypeAnyOf(scalarTypes)) {
             return ApplicationAdvice.DOES_NOT_APPLY;
         }
 
-        // autoComplete not supported on values, only references
-        return appliesIf( !(scalarModel.hasChoices()
-                /*|| scalarModel.hasAutoComplete()*/) );
+        // if has any choices, use select-2 component instead
+        return appliesIf( !scalarModel.hasChoices()
+                && !scalarModel.hasAutoComplete() );
     }
 
 }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/scalars/choices/ChoicesSelect2PanelFactory.java b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/scalars/choices/ChoicesSelect2PanelFactory.java
index 5ac52b0eda..6ae1688243 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/scalars/choices/ChoicesSelect2PanelFactory.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/scalars/choices/ChoicesSelect2PanelFactory.java
@@ -68,7 +68,7 @@ extends ComponentFactoryScalarAbstract {
 
     @Override
     protected ApplicationAdvice appliesTo(final ScalarModel scalarModel) {
-        return ApplicationAdvice.APPLIES; //FIXME depends on registration order, can we do better?
+        return ApplicationAdvice.APPLIES; //XXX depends on registration order, can we do better?
     }
 
 }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForReferences.java b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForReferences.java
index 685ecdffd0..6791b709d8 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForReferences.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForReferences.java
@@ -24,6 +24,8 @@ import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.objectmanager.memento.ObjectMemento;
 import org.apache.causeway.core.metamodel.util.Facets;
 import org.apache.causeway.viewer.commons.model.scalar.UiParameter;
+import org.apache.causeway.viewer.commons.model.scalar.UiScalar;
+import org.apache.causeway.viewer.commons.model.scalar.UiScalar.ChoiceProviderSort;
 import org.apache.causeway.viewer.wicket.model.models.ScalarModel;
 
 import lombok.val;
@@ -33,23 +35,7 @@ extends ChoiceProviderAbstractForScalarModel {
 
     private static final long serialVersionUID = 1L;
 
-    static enum ChoiceProviderSort {
-        NO_CHOICES,
-        CHOICES,
-        AUTO_COMPLETE,
-        OBJECT_AUTO_COMPLETE;
-        static ChoiceProviderSort valueOf(final ScalarModel scalarModel) {
-            if (scalarModel.hasChoices()) {
-                return ChoiceProviderSort.CHOICES;
-            } else if(scalarModel.hasAutoComplete()) {
-                return ChoiceProviderSort.AUTO_COMPLETE;
-            } else {
-                return ChoiceProviderSort.OBJECT_AUTO_COMPLETE;
-            }
-        }
-    }
-
-    private final ChoiceProviderSort choiceProviderSort;
+    private final UiScalar.ChoiceProviderSort choiceProviderSort;
 
     public ChoiceProviderForReferences(
             final ScalarModel scalarModel) {
@@ -65,12 +51,12 @@ extends ChoiceProviderAbstractForScalarModel {
         case AUTO_COMPLETE:
             return queryWithAutoComplete(term);
         case OBJECT_AUTO_COMPLETE:
+            return queryWithAutoCompleteUsingObjectSpecification(term);
+        case NO_CHOICES:
+        default:
             // fall through
         }
-        val scalarTypeSpec = scalarModel().getScalarTypeSpec();
-        val autoCompleteAdapters = Facets.autoCompleteExecute(scalarTypeSpec, term);
-        return autoCompleteAdapters
-                .map(ManagedObject::getMementoElseFail);
+        return Can.empty();
     }
 
     // -- HELPER
@@ -80,6 +66,13 @@ extends ChoiceProviderAbstractForScalarModel {
                 .map(ManagedObject::getMementoElseFail);
     }
 
+    private Can<ObjectMemento> queryWithAutoCompleteUsingObjectSpecification(final String term) {
+        val autoCompleteAdapters = Facets
+                .autoCompleteExecute(scalarModel().getScalarTypeSpec(), term);
+        return autoCompleteAdapters
+                .map(ManagedObject::getMementoElseFail);
+    }
+
     private Can<ObjectMemento> queryWithAutoComplete(final String term) {
         val scalarModel = scalarModel();
         val pendingArgs = scalarModel.isParameter()