You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/08/25 11:26:45 UTC

[isis] branch master updated: ISIS-3172: refactoring choice-providers

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 842cb8c13f ISIS-3172: refactoring choice-providers
842cb8c13f is described below

commit 842cb8c13f5928fc67f0dbc3b96dd788972e4b01
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Aug 25 13:26:38 2022 +0200

    ISIS-3172: refactoring choice-providers
---
 .../ui/components/scalars/ScalarPanelAbstract.java |   2 +-
 .../scalars/ScalarPanelFormFieldAbstract.java      |   9 +-
 .../select2/providers/ChoiceProviderAbstract.java  | 142 +++++++++++++++++++++
 ...ices.java => ChoiceProviderForScalarModel.java} |  50 ++++----
 .../ObjectAdapterMementoProviderAbstract.java      | 115 +----------------
 .../ObjectAdapterMementoProviderForChoices.java    |  30 -----
 ...tAdapterMementoProviderForReferenceChoices.java |  18 +--
 ...entoProviderForReferenceObjectAutoComplete.java |   4 +-
 ...derForReferenceParamOrPropertyAutoComplete.java |   4 +-
 ...bjectAdapterMementoProviderForValueChoices.java |  23 ++--
 ...tAdapterMementoProviderForValueChoicesTest.java |   2 +-
 11 files changed, 202 insertions(+), 197 deletions(-)

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 1158c6bdb3..dd10f2d16b 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
@@ -128,7 +128,7 @@ implements ScalarModelSubscriber {
         public boolean isEditingAny() {
             return this==EDITING
                     || this==CAN_EDIT_INLINE_VIA_ACTION;}
-        public boolean isCanEditAny() {
+        public boolean isViewingAndCanEditAny() {
             return this==CAN_EDIT
                 || this==CAN_EDIT_INLINE
                 || this==CAN_EDIT_INLINE_VIA_ACTION; }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelFormFieldAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelFormFieldAbstract.java
index d567781b66..a9876d96cc 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelFormFieldAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelFormFieldAbstract.java
@@ -151,13 +151,20 @@ extends ScalarPanelAbstract2 {
             xrayDetails.put("scalarModel.disableReasonIfAny", ""+scalarModel().disableReasonIfAny());
             xrayDetails.put("scalarModel.whetherHidden", ""+scalarModel().whetherHidden());
             xrayDetails.put("scalarModel.identifier", ""+scalarModel().getIdentifier());
+            xrayDetails.put("scalarModel.choices (count)", ""+scalarModel().getChoices().size());
+            xrayDetails.put("scalarModel.metaModel.featureIdentifier", ""+scalarModel().getMetaModel().getFeatureIdentifier());
+            xrayDetails.put("scalarModel.scalarTypeSpec", ""+scalarModel().getScalarTypeSpec().toString());
+            xrayDetails.put("scalarModel.pendingValue", ""+scalarModel().getSpecialization()
+                    .fold(
+                            param->""+param.getValue(),
+                            prop->""+prop.getPendingPropertyModel().getValueAsTitle().getValue()));
             Wkt.markupAdd(fieldFrame, ID_XRAY_DETAILS, XrayWkt.formatAsListGroup(xrayDetails));
         });
 
         if(renderScenario.isReadonly()) {
             fieldFrame.add(FieldFrame.SCALAR_VALUE_CONTAINER
                     .createComponent(this::createComponentForOutput));
-        } else if(renderScenario.isCanEditAny()) {
+        } else if(renderScenario.isViewingAndCanEditAny()) {
 
             // this results in a link created;
             // link stuff is handled later in ScalarPanelAbstract2.setupInlinePrompt
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
new file mode 100644
index 0000000000..cf9da8dd01
--- /dev/null
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderAbstract.java
@@ -0,0 +1,142 @@
+package org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers;
+
+import java.util.Collection;
+import java.util.stream.Collectors;
+
+import org.apache.wicket.util.string.Strings;
+import org.springframework.lang.Nullable;
+import org.wicketstuff.select2.ChoiceProvider;
+
+import org.apache.isis.applib.services.i18n.TranslationContext;
+import org.apache.isis.applib.services.placeholder.PlaceholderRenderService;
+import org.apache.isis.applib.services.placeholder.PlaceholderRenderService.PlaceholderLiteral;
+import org.apache.isis.commons.collections.Can;
+import org.apache.isis.commons.internal.base._NullSafe;
+import org.apache.isis.core.config.IsisConfiguration.Viewer.Wicket;
+import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento;
+import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMementoForEmpty;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.runtime.context.IsisAppCommonContext.HasCommonContext;
+
+import lombok.val;
+
+public abstract class ChoiceProviderAbstract
+extends ChoiceProvider<ObjectMemento>
+implements HasCommonContext {
+    private static final long serialVersionUID = 1L;
+
+    /** arbitrary string */
+    private static final String NULL_ID = "VGN6r6zKTiLhUsA0WkdQ17LvMU1IYdb0";
+
+    /**
+     * Whether to not prepend <code>null</code> as choice candidate.
+     */
+    protected abstract boolean isRequired();
+
+    /**
+     * Get choice candidates with filtering (don't include <code>null</code>).
+     */
+    protected abstract Can<ObjectMemento> query(@Nullable String term);
+
+    protected abstract @Nullable ObjectMemento mementoFromId(final String id);
+
+    @Override
+    public final String getDisplayValue(final ObjectMemento choiceMemento) {
+        if (choiceMemento == null
+                || choiceMemento instanceof ObjectMementoForEmpty) {
+            return getPlaceholderRenderService().asText(PlaceholderLiteral.NULL_REPRESENTATION);
+        }
+        return translate(choiceMemento.getTitle());
+    }
+
+    @Override
+    public final String getIdValue(final ObjectMemento choiceMemento) {
+        if (choiceMemento == null) {
+            return NULL_ID;
+        }
+        return choiceMemento.bookmark().stringify();
+    }
+
+    @Override
+    public final void query(
+            final String term,
+            final int page,
+            final org.wicketstuff.select2.Response<ObjectMemento> response) {
+
+        val mementosFiltered = query(term);
+
+        if(isRequired()) {
+            response.addAll(mementosFiltered.toList());
+            return;
+        }
+
+        // else, if not mandatory, prepend null
+        val mementosIncludingNull = mementosFiltered.toArrayList();
+        mementosIncludingNull.add(0, null);
+
+        response.addAll(mementosIncludingNull);
+    }
+
+    @Override // not final, as Value Choices override this, because they don't use idToMemento(..)
+    public /*final*/ Collection<ObjectMemento> toChoices(final Collection<String> ids) {
+        return _NullSafe.stream(ids)
+                .map(this::mementoFromIdWithNullHandling)
+                .collect(Collectors.toList());
+    }
+
+    // -- UTILITY
+
+    /**
+     * Filters all choices against a term by using their
+     * {@link ManagedObject#titleString() title string}
+     *
+     * @param term The term entered by the user
+     * @param choiceMementos The collections of choices to filter
+     * @return A list of all matching choices
+     */
+    protected final Can<ObjectMemento> filter(
+            final String term,
+            final Can<ObjectMemento> choiceMementos) {
+
+        if (Strings.isEmpty(term)) {
+            return choiceMementos;
+        }
+
+        val translationContext = TranslationContext.empty();
+        val translator = getCommonContext().getTranslationService();
+        val termLower = term.toLowerCase();
+
+        return choiceMementos.filter((final ObjectMemento candidateMemento)->{
+            val title = translator.translate(translationContext, candidateMemento.getTitle());
+            return title.toLowerCase().contains(termLower);
+        });
+
+    }
+
+    // -- HELPER
+
+    private @Nullable ObjectMemento mementoFromIdWithNullHandling(final String id) {
+        if(NULL_ID.equals(id)) {
+            return null;
+        }
+        return mementoFromId(id);
+    }
+
+    // -- DEPENDENCIES
+
+    protected final Wicket getSettings() {
+        return getCommonContext().getConfiguration().getViewer().getWicket();
+    }
+
+    /**
+     * Translate without context: Tooltips, Button-Labels, etc.
+     */
+    protected String translate(final String input) {
+        return getCommonContext().getTranslationService().translate(TranslationContext.empty(), input);
+    }
+
+    protected PlaceholderRenderService getPlaceholderRenderService() {
+        return getCommonContext().getPlaceholderRenderService();
+    }
+
+}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForValueChoices.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForScalarModel.java
similarity index 53%
copy from viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForValueChoices.java
copy to viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForScalarModel.java
index f3ad3aa40c..8fce0d765c 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForValueChoices.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderForScalarModel.java
@@ -18,48 +18,48 @@
  */
 package org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers;
 
-import java.util.Collection;
-
-import org.apache.isis.commons.collections.Can;
+import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento;
+import org.apache.isis.core.runtime.context.IsisAppCommonContext;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
 import lombok.val;
+import lombok.experimental.Accessors;
 
-public class ObjectAdapterMementoProviderForValueChoices
-extends ObjectAdapterMementoProviderAbstract
-implements ObjectAdapterMementoProviderForChoices {
+@RequiredArgsConstructor
+public abstract class ChoiceProviderForScalarModel
+extends ChoiceProviderAbstract {
 
     private static final long serialVersionUID = 1L;
 
-    public ObjectAdapterMementoProviderForValueChoices(
-            final ScalarModel scalarModel) {
-        super(scalarModel);
-    }
+    @Getter @Accessors(fluent = true)
+    private final ScalarModel scalarModel;
 
     @Override
-    public Can<ObjectMemento> getChoiceMementos() {
-        val commonContext = super.getCommonContext();
-        val choices = getScalarModel().getChoices();
-        return choices.map(commonContext::mementoFor);
+    protected final boolean isRequired() {
+        return scalarModel().isRequired();
     }
 
-    @Override
-    protected Can<ObjectMemento> obtainMementos(final String term) {
-        return obtainMementos(term, getChoiceMementos());
+    /** whether this adapter is dependent on previous (pending) arguments */
+    public boolean dependsOnPreviousArgs() {
+        return true;
     }
 
     @Override
-    public Collection<ObjectMemento> toChoices(final Collection<String> ids) {
-
-        return obtainMementos(null)
-        .filter((final ObjectMemento input) -> {
-            val id = getIdValue(input);
-            return ids.contains(id);
-        })
-        .toList();
+    protected ObjectMemento mementoFromId(final String id) {
+        val memento = Bookmark.parse(id)
+                .map(getCommonContext()::mementoForBookmark)
+                .orElse(null); // FIXME if can't recreated from bookmark, there might be a bug
+        return memento;
     }
 
+    // -- DEPS
 
+    @Override
+    public IsisAppCommonContext getCommonContext() {
+        return scalarModel().getCommonContext();
+    }
 
 }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderAbstract.java
index 7efdc1940b..6bced0896c 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderAbstract.java
@@ -18,79 +18,26 @@
  */
 package org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers;
 
-import java.util.Collection;
-import java.util.List;
-import java.util.stream.Collectors;
-
 import org.apache.wicket.util.string.Strings;
 import org.springframework.lang.Nullable;
-import org.wicketstuff.select2.ChoiceProvider;
 
 import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.applib.services.i18n.TranslationContext;
-import org.apache.isis.applib.services.placeholder.PlaceholderRenderService;
-import org.apache.isis.applib.services.placeholder.PlaceholderRenderService.PlaceholderLiteral;
 import org.apache.isis.commons.collections.Can;
-import org.apache.isis.commons.internal.base._NullSafe;
-import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.config.IsisConfiguration.Viewer.Wicket;
 import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento;
-import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMementoForEmpty;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.runtime.context.IsisAppCommonContext;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 
-import lombok.Getter;
 import lombok.val;
 
 public abstract class ObjectAdapterMementoProviderAbstract
-extends ChoiceProvider<ObjectMemento> {
+extends ChoiceProviderForScalarModel {
 
     private static final long serialVersionUID = 1L;
 
-    protected static final String NULL_PLACEHOLDER = "VGN6r6zKTiLhUsA0WkdQ17LvMU1IYdb0";
-
-    @Getter private final ScalarModel scalarModel;
-    private transient IsisAppCommonContext commonContext;
-
-    public ObjectAdapterMementoProviderAbstract(final ScalarModel scalarModel) {
-        this.scalarModel = scalarModel;
-    }
-
-    @Override
-    public String getDisplayValue(final ObjectMemento choiceMemento) {
-        if (choiceMemento == null
-                || choiceMemento instanceof ObjectMementoForEmpty) {
-            return getPlaceholderRenderService().asText(PlaceholderLiteral.NULL_REPRESENTATION);
-        }
-        return translate(choiceMemento.getTitle());
+    protected ObjectAdapterMementoProviderAbstract(final ScalarModel scalarModel) {
+        super(scalarModel);
     }
 
-    @Override
-    public String getIdValue(final ObjectMemento choiceMemento) {
-        if (choiceMemento == null) {
-            return NULL_PLACEHOLDER;
-        }
-        return choiceMemento.bookmark().stringify();
-    }
-
-    @Override
-    public void query(
-            final String term,
-            final int page,
-            final org.wicketstuff.select2.Response<ObjectMemento> response) {
-
-        final List<ObjectMemento> mementos = _Lists.newArrayList(obtainMementos(term));
-        // if not mandatory, and the list doesn't contain null already, then add it in.
-        if(!scalarModel.isRequired()
-                && !mementos.contains(null)) {
-            mementos.add(0, null);
-        }
-        response.addAll(mementos);
-    }
-
-    protected abstract Can<ObjectMemento> obtainMementos(String term);
-
     /**
      * Filters all choices against a term by using their
      * {@link ManagedObject#titleString() title string}
@@ -106,64 +53,14 @@ extends ChoiceProvider<ObjectMemento> {
         if (Strings.isEmpty(term)) {
             return choicesMementos;
         }
-
-        val commonContext = getCommonContext();
-
-        return choicesMementos.filter((final ObjectMemento candidate)->{
-            val objectAdapter = commonContext.reconstructObject(candidate);
-            val title = objectAdapter.titleString();
-            return title.toLowerCase().contains(term.toLowerCase());
-        });
-
+        return super.filter(term, choicesMementos);
     }
 
-    @Override
-    public Collection<ObjectMemento> toChoices(final Collection<String> ids) {
-
-        return _NullSafe.stream(ids)
-                .map(this::idToMemento)
-                .collect(Collectors.toList());
-    }
-
-    /** whether this adapter is dependent on previous (pending) arguments */
-    public boolean dependsOnPreviousArgs() {
-        return true;
-    }
-
-    // -- DEPENDENCIES
-
-    protected IsisAppCommonContext getCommonContext() {
-        if(commonContext==null) {
-            commonContext = scalarModel.getCommonContext();
-        }
-        return commonContext;
-    }
-
-    protected final Wicket getSettings() {
-        return getCommonContext().getConfiguration().getViewer().getWicket();
-    }
-
-    // -- HELPER
-
-    private @Nullable ObjectMemento idToMemento(final String id) {
-        if(NULL_PLACEHOLDER.equals(id)) {
-            return null;
-        }
+    protected @Nullable ObjectMemento idToMemento(final String id) {
         val memento = Bookmark.parse(id)
                 .map(getCommonContext()::mementoForBookmark)
-                .orElse(null);
+                .orElse(null); //FIXME did something go wrong?
         return memento;
     }
 
-    /**
-     * Translate without context: Tooltips, Button-Labels, etc.
-     */
-    private String translate(final String input) {
-        return getCommonContext().getTranslationService().translate(TranslationContext.empty(), input);
-    }
-
-    private PlaceholderRenderService getPlaceholderRenderService() {
-        return getCommonContext().getPlaceholderRenderService();
-    }
-
 }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForChoices.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForChoices.java
deleted file mode 100644
index d0a700ce02..0000000000
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForChoices.java
+++ /dev/null
@@ -1,30 +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.providers;
-
-import org.apache.isis.commons.collections.Can;
-import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento;
-
-public interface ObjectAdapterMementoProviderForChoices {
-
-    Can<ObjectMemento> getChoiceMementos();
-
-
-}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceChoices.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceChoices.java
index 07b53eb3b1..c3fa1d0a45 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceChoices.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceChoices.java
@@ -22,11 +22,8 @@ import org.apache.isis.commons.collections.Can;
 import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 
-import lombok.val;
-
 public class ObjectAdapterMementoProviderForReferenceChoices
-extends ObjectAdapterMementoProviderAbstract
-implements ObjectAdapterMementoProviderForChoices {
+extends ObjectAdapterMementoProviderAbstract {
 
     private static final long serialVersionUID = 1L;
 
@@ -36,16 +33,13 @@ implements ObjectAdapterMementoProviderForChoices {
     }
 
     @Override
-    public Can<ObjectMemento> getChoiceMementos() {
-        val commonContext = super.getCommonContext();
-        val choices = getScalarModel().getChoices(); // must not return detached entities
-        val choiceMementos = choices.map(commonContext::mementoForParameter);
-        return choiceMementos;
+    protected Can<ObjectMemento> query(final String term) {
+        return super.obtainMementos(term, queryAll());
     }
 
-    @Override
-    protected Can<ObjectMemento> obtainMementos(final String term) {
-        return super.obtainMementos(term, getChoiceMementos());
+    private Can<ObjectMemento> queryAll() {
+        return scalarModel().getChoices() // must not return detached entities
+                .map(getCommonContext()::mementoForParameter);
     }
 
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceObjectAutoComplete.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceObjectAutoComplete.java
index 992093b210..5b1900f5d5 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceObjectAutoComplete.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceObjectAutoComplete.java
@@ -35,8 +35,8 @@ extends ObjectAdapterMementoProviderAbstract {
     }
 
     @Override
-    protected Can<ObjectMemento> obtainMementos(final String term) {
-        val scalarTypeSpec = getScalarModel().getScalarTypeSpec();
+    protected Can<ObjectMemento> query(final String term) {
+        val scalarTypeSpec = scalarModel().getScalarTypeSpec();
         val autoCompleteAdapters = Facets.autoCompleteExecute(scalarTypeSpec, term);
         return autoCompleteAdapters.map(getCommonContext()::mementoFor);
     }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete.java
index c9309a3656..efd976bc32 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete.java
@@ -42,10 +42,10 @@ extends ObjectAdapterMementoProviderAbstract {
     }
 
     @Override
-    protected Can<ObjectMemento> obtainMementos(final String term) {
+    protected Can<ObjectMemento> query(final String term) {
 
         val commonContext = getCommonContext();
-        val scalarModel = getScalarModel();
+        val scalarModel = scalarModel();
         val pendingArgs = scalarModel.isParameter()
                 ? ((ParameterUiModel)scalarModel).getParameterNegotiationModel().getParamValues()
                 : Can.<ManagedObject>empty();
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForValueChoices.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForValueChoices.java
index f3ad3aa40c..b6592e1120 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForValueChoices.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForValueChoices.java
@@ -27,8 +27,7 @@ import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import lombok.val;
 
 public class ObjectAdapterMementoProviderForValueChoices
-extends ObjectAdapterMementoProviderAbstract
-implements ObjectAdapterMementoProviderForChoices {
+extends ObjectAdapterMementoProviderAbstract {
 
     private static final long serialVersionUID = 1L;
 
@@ -38,21 +37,13 @@ implements ObjectAdapterMementoProviderForChoices {
     }
 
     @Override
-    public Can<ObjectMemento> getChoiceMementos() {
-        val commonContext = super.getCommonContext();
-        val choices = getScalarModel().getChoices();
-        return choices.map(commonContext::mementoFor);
-    }
-
-    @Override
-    protected Can<ObjectMemento> obtainMementos(final String term) {
-        return obtainMementos(term, getChoiceMementos());
+    protected Can<ObjectMemento> query(final String term) {
+        return obtainMementos(term, queryAll());
     }
 
     @Override
     public Collection<ObjectMemento> toChoices(final Collection<String> ids) {
-
-        return obtainMementos(null)
+        return queryAll()//query(null)
         .filter((final ObjectMemento input) -> {
             val id = getIdValue(input);
             return ids.contains(id);
@@ -60,6 +51,10 @@ implements ObjectAdapterMementoProviderForChoices {
         .toList();
     }
 
-
+    // protected in support of JUnit testing
+    protected Can<ObjectMemento> queryAll() {
+        return scalarModel().getChoices()
+            .map(getCommonContext()::mementoFor);
+    }
 
 }
diff --git a/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ObjectAdapterMementoProviderForValueChoicesTest.java b/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ObjectAdapterMementoProviderForValueChoicesTest.java
index 30bc2f7efd..0fd9e71535 100644
--- a/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ObjectAdapterMementoProviderForValueChoicesTest.java
+++ b/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ObjectAdapterMementoProviderForValueChoicesTest.java
@@ -88,7 +88,7 @@ public class ObjectAdapterMementoProviderForValueChoicesTest {
 
         provider = new ObjectAdapterMementoProviderForValueChoices(mockScalarModel) {
             private static final long serialVersionUID = 1L;
-            @Override public org.apache.isis.commons.collections.Can<ObjectMemento> getChoiceMementos() {
+            @Override public org.apache.isis.commons.collections.Can<ObjectMemento> queryAll() {
                 return mementos; };
         };