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 2019/12/17 14:53:38 UTC

[isis] branch master updated: ISIS-2226: implements autoComplete with dependent args

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 dc668f3  ISIS-2226: implements autoComplete with dependent args
dc668f3 is described below

commit dc668f3c93c87be34ae95adab6c05d455541579e
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Dec 17 15:53:30 2019 +0100

    ISIS-2226: implements autoComplete with dependent args
    
    - still requires n+1, n+2, ... arguments to be cleared when argument n
    is updated (choices already does this)
---
 .../spec/feature/ObjectActionParameter.java        |  3 +-
 .../specimpl/ObjectActionParameterAbstract.java    |  3 +-
 .../ObjectActionParameterContributeeAbstract.java  |  4 +-
 .../ObjectActionParameterMixedInAbstract.java      |  5 ++-
 .../viewer/wicket/model/models/ScalarModel.java    | 13 +++---
 .../isis/viewer/wicket/ui/IsisModuleWicketUi.java  | 18 +++++++++
 .../scalars/ScalarPanelSelect2Abstract.java        |  2 +-
 .../scalars/reference/ReferencePanel.java          | 35 ++++++----------
 ...tAdapterMementoProviderForReferenceChoices.java | 18 ---------
 ...entoProviderForReferenceObjectAutoComplete.java | 18 ---------
 ...derForReferenceParamOrPropertyAutoComplete.java | 42 +++++++++----------
 ...bjectAdapterMementoProviderForValueChoices.java | 47 +++++++---------------
 12 files changed, 82 insertions(+), 126 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectActionParameter.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectActionParameter.java
index b1c560f..b440c20 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectActionParameter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectActionParameter.java
@@ -25,6 +25,7 @@ import java.util.function.Predicate;
 import javax.annotation.Nullable;
 import javax.enterprise.inject.Vetoed;
 
+import org.apache.isis.commons.collections.Can;
 import org.apache.isis.metamodel.consent.Consent;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facets.all.named.NamedFacet;
@@ -92,7 +93,7 @@ public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
      */
     ManagedObject[] getAutoComplete(
             final ManagedObject adapter,
-            final ManagedObject[] argumentsIfAvailable,
+            final Can<ManagedObject> dependentArgs,
             final String searchArg,
             final InteractionInitiatedBy interactionInitiatedBy);
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index 6b8ab42..41a3a44 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -231,7 +231,7 @@ implements ObjectActionParameter, FacetHolder.Delegating {
     @Override
     public ManagedObject[] getAutoComplete(
             final ManagedObject adapter,
-            final ManagedObject[] argumentsIfAvailable,
+            final Can<ManagedObject> dependentArgs,
             final String searchArg,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
@@ -239,7 +239,6 @@ implements ObjectActionParameter, FacetHolder.Delegating {
         final ActionParameterAutoCompleteFacet facet = getFacet(ActionParameterAutoCompleteFacet.class);
 
         if (facet != null) {
-            val dependentArgs = Can.ofArray(argumentsIfAvailable);
             final Object[] choices = facet
                     .autoComplete(adapter, dependentArgs, searchArg, interactionInitiatedBy);
             checkChoicesOrAutoCompleteType(getSpecificationLoader(), choices, getSpecification());
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterContributeeAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterContributeeAbstract.java
index a77d47d..bfd9492 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterContributeeAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterContributeeAbstract.java
@@ -59,13 +59,13 @@ implements ObjectActionParameterContributee {
     @Override
     public ManagedObject[] getAutoComplete(
             final ManagedObject adapter,
-            final ManagedObject[] argumentsIfAvailable,
+            final Can<ManagedObject> dependentArgs,
             final String searchArg,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
         return serviceActionParameter.getAutoComplete(
                 getServiceAdapter(),
-                argumentsIfAvailable,
+                dependentArgs,
                 searchArg,
                 interactionInitiatedBy);
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterMixedInAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterMixedInAbstract.java
index 85f5f76..955e013 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterMixedInAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterMixedInAbstract.java
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.metamodel.specloader.specimpl;
 
+import org.apache.isis.commons.collections.Can;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FeatureType;
 import org.apache.isis.metamodel.interactions.ActionArgValidityContext;
@@ -44,13 +45,13 @@ implements ObjectActionParameterMixedIn {
     @Override
     public ManagedObject[] getAutoComplete(
             final ManagedObject mixedInAdapter,
-            final ManagedObject[] argumentsIfAvailable,
+            final Can<ManagedObject> dependentArgs,
             final String searchArg,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
         return mixinParameter.getAutoComplete(
                 mixinAdapterFor(mixedInAdapter),
-                argumentsIfAvailable,
+                dependentArgs,
                 searchArg,
                 interactionInitiatedBy);
     }
diff --git a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index 6358505..49c1184 100644
--- a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -28,6 +28,7 @@ import java.util.stream.Stream;
 
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.collections._Lists;
@@ -229,7 +230,7 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
             @Override
             public List<ManagedObject> getAutoComplete(
                     final ScalarModel scalarModel,
-                    final ManagedObject[] argumentsIfAvailable, // ignored for properties
+                    final Can<ManagedObject> dependentArgs, // ignored for properties
                     final String searchArg,
                     final AuthenticationSession authenticationSession) {
 
@@ -467,7 +468,7 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
             @Override
             public List<ManagedObject> getAutoComplete(
                     final ScalarModel scalarModel,
-                    final ManagedObject[] argumentsIfAvailable,
+                    final Can<ManagedObject> dependentArgs,
                     final String searchArg,
                     final AuthenticationSession authenticationSession) {
                 
@@ -477,7 +478,7 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
                 ManagedObject parentAdapter = scalarModel.getParentEntityModel().load();
                 final ManagedObject[] choices = actionParameter.getAutoComplete(
                         parentAdapter,
-                        argumentsIfAvailable,
+                        dependentArgs,
                         searchArg,
                         InteractionInitiatedBy.USER);
                 return choicesAsList(choices);
@@ -643,7 +644,7 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
         public abstract boolean hasAutoComplete(ScalarModel scalarModel);
         public abstract List<ManagedObject> getAutoComplete(
                 ScalarModel scalarModel,
-                ManagedObject[] argumentsIfAvailable,
+                Can<ManagedObject> dependentArgs,
                 String searchArg,
                 AuthenticationSession authenticationSession);
 
@@ -932,10 +933,10 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
     }
 
     public List<ManagedObject> getAutoComplete(
-            final ManagedObject[] argumentsIfAvailable,
+            final Can<ManagedObject> dependentArgs,
             final String searchTerm,
             final AuthenticationSession authenticationSession) {
-        return kind.getAutoComplete(this, argumentsIfAvailable, searchTerm, authenticationSession);
+        return kind.getAutoComplete(this, dependentArgs, searchTerm, authenticationSession);
     }
 
     /**
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/IsisModuleWicketUi.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/IsisModuleWicketUi.java
index 7d68e7c..9ac09a1 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/IsisModuleWicketUi.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/IsisModuleWicketUi.java
@@ -1,3 +1,21 @@
+/*
+ *  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;
 
 import org.springframework.context.annotation.Configuration;
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
index 8ef8945..ac721fc 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
@@ -120,7 +120,7 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract2 {
         getModel().clearPending();
 
         if(choiceProvider instanceof ObjectAdapterMementoProviderForChoices) {
-            final ObjectAdapterMementoProviderForChoices providerForChoices = (ObjectAdapterMementoProviderForChoices) choiceProvider;
+            val providerForChoices = (ObjectAdapterMementoProviderForChoices) choiceProvider;
             syncIfNull(select2, providerForChoices.getChoiceMementos());
         }
     }
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index efb0921..e8fee23 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -19,7 +19,9 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.reference;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
@@ -33,6 +35,7 @@ import org.apache.wicket.model.Model;
 import org.wicketstuff.select2.ChoiceProvider;
 import org.wicketstuff.select2.Settings;
 
+import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.metamodel.facets.object.autocomplete.AutoCompleteFacet;
 import org.apache.isis.metamodel.spec.ManagedObject;
@@ -339,32 +342,27 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract {
 
     @Override
     protected ChoiceProvider<ObjectMemento> buildChoiceProvider(ManagedObject[] argsIfAvailable) {
-
+        
+        val commonContext = super.getCommonContext();
+        
         if (getModel().hasChoices()) {
-            List<ObjectMemento> choiceMementos = obtainChoiceMementos(argsIfAvailable);
+            val choices = getModel().getChoices(argsIfAvailable, commonContext.getAuthenticationSession());
+            val choiceMementos = _Lists.map(choices, commonContext::mementoFor);
             return new ObjectAdapterMementoProviderForReferenceChoices(getModel(), choiceMementos);
         }
 
         if(getModel().hasAutoComplete()) {
-            return new ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete(getModel());
+            val dependentArgMementos = _NullSafe.stream(argsIfAvailable)
+                    .map(commonContext::mementoFor)
+                    .collect(Collectors.toCollection(ArrayList::new)); // serializable
+            return new ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete(
+                    getModel(), dependentArgMementos);
         }
 
         return new ObjectAdapterMementoProviderForReferenceObjectAutoComplete(getModel());
     }
 
     // called by setProviderAndCurrAndPending
-    private List<ObjectMemento> obtainChoiceMementos(ManagedObject[] argsIfAvailable) {
-        
-        val commonContext = super.getCommonContext();
-        
-        val choices = _Lists.<ManagedObject>newArrayList();
-        if(getModel().hasChoices()) {
-            choices.addAll(getModel().getChoices(argsIfAvailable, commonContext.getAuthenticationSession()));
-        }
-        return _Lists.map(choices, commonContext::mementoFor);
-    }
-
-    // called by setProviderAndCurrAndPending
     @Override
     protected void syncIfNull(final Select2 select2, final List<ObjectMemento> choiceMementos) {
         final ObjectMemento curr = select2.getModelObject();
@@ -379,13 +377,6 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract {
         }
     }
 
-    //TODO [ahuber ]not used, remove?
-    //    private boolean autoSelect() {
-    //        final boolean disableAutoSelect = getConfiguration().getBoolean(KEY_DISABLE_DEPENDENT_CHOICE_AUTO_SELECTION, false);
-    //        final boolean autoSelect = !disableAutoSelect;
-    //        return autoSelect;
-    //    }
-
     // //////////////////////////////////////
     // getInput, convertInput
     // //////////////////////////////////////
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceChoices.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceChoices.java
index bfa64b3..d88269b 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceChoices.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceChoices.java
@@ -16,24 +16,6 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-/*
- *  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 java.util.List;
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceObjectAutoComplete.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceObjectAutoComplete.java
index 8b7fae6..67da2df 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceObjectAutoComplete.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceObjectAutoComplete.java
@@ -16,24 +16,6 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-/*
- *  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 java.util.List;
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete.java
index f5fc184..c32bd91 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete.java
@@ -16,28 +16,13 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-/*
- *  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 java.util.ArrayList;
 import java.util.List;
 
+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.metamodel.spec.ManagedObject;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
@@ -49,9 +34,15 @@ public class ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete
 extends ObjectAdapterMementoProviderAbstract {
 
     private static final long serialVersionUID = 1L;
+    
+    private final ArrayList<ObjectMemento> dependentArgMementos;
 
-    public ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete(ScalarModel model) {
+    public ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete(
+            ScalarModel model,
+            ArrayList<ObjectMemento> dependentArgMementos) { 
+        
         super(model);
+        this.dependentArgMementos = dependentArgMementos;
     }
 
     @Override
@@ -61,8 +52,8 @@ extends ObjectAdapterMementoProviderAbstract {
         
         val autoCompleteChoices = _Lists.<ManagedObject>newArrayList();
         if (getScalarModel().hasAutoComplete()) {
-            // this implementation will not recover any dependentArgs
-            val dependentArgs = (ManagedObject[])null; 
+            // recover any dependentArgs
+            val dependentArgs = reconstructDependentArgs(dependentArgMementos); 
             val autoCompleteAdapters = getScalarModel()
                     .getAutoComplete(dependentArgs, term, commonContext.getAuthenticationSession());
             autoCompleteChoices.addAll(autoCompleteAdapters);
@@ -71,5 +62,14 @@ extends ObjectAdapterMementoProviderAbstract {
         return _Lists.map(autoCompleteChoices, commonContext::mementoFor);
         
     }
+    
+    private Can<ManagedObject> reconstructDependentArgs(List<ObjectMemento> dependentArgMementos) {
+        val commonContext = super.getCommonContext();
+        val dependentArgsStream = _NullSafe.stream(dependentArgMementos)
+            .map(commonContext::reconstructObject)
+            .map(ManagedObject.class::cast);
+        
+        return Can.ofStream(dependentArgsStream);
+    }
 
 }
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForValueChoices.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForValueChoices.java
index ee298d5..b9e0f56 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForValueChoices.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForValueChoices.java
@@ -16,24 +16,6 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-/*
- *  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 java.util.Collection;
@@ -44,41 +26,40 @@ import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.webapp.context.memento.ObjectMemento;
 
+import lombok.Getter;
+import lombok.val;
+
 public class ObjectAdapterMementoProviderForValueChoices
-extends ObjectAdapterMementoProviderAbstract implements ObjectAdapterMementoProviderForChoices {
+extends ObjectAdapterMementoProviderAbstract 
+implements ObjectAdapterMementoProviderForChoices {
 
     private static final long serialVersionUID = 1L;
-    private final List<ObjectMemento> choicesMementos;
+    
+    @Getter(onMethod = @__(@Override))
+    private final List<ObjectMemento> choiceMementos;
 
     public ObjectAdapterMementoProviderForValueChoices(
             ScalarModel scalarModel,
             List<ObjectMemento> choicesMementos) {
         
         super(scalarModel);
-        this.choicesMementos = choicesMementos;
+        this.choiceMementos = choicesMementos;
     }
 
     @Override
     protected List<ObjectMemento> obtainMementos(String term) {
-        return obtainMementos(term, choicesMementos);
-    }
-
-    @Override
-    public List<ObjectMemento> getChoiceMementos() {
-        return choicesMementos;
+        return obtainMementos(term, choiceMementos);
     }
 
     @Override
     public Collection<ObjectMemento> toChoices(final Collection<String> ids) {
         final List<ObjectMemento> mementos = obtainMementos(null);
 
-        final Predicate<ObjectMemento> lookupOam = new Predicate<ObjectMemento>() {
-            @Override
-            public boolean test(ObjectMemento input) {
-                final String id = getIdValue(input);
-                return ids.contains(id);
-            }
+        final Predicate<ObjectMemento> lookupOam = (ObjectMemento input) -> {
+            val id = getIdValue(input);
+            return ids.contains(id);
         };
+        
         return _Lists.filter(mementos, lookupOam);
     }