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 2021/02/22 18:54:40 UTC

[isis] branch master updated: ISIS-2540: supposedly fixes previous attempt to no longer require mixins to hold their mixees

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 76051cd  ISIS-2540: supposedly fixes previous attempt to no longer require mixins to hold their mixees
76051cd is described below

commit 76051cd8148aa737886f65da0acf71017bf4ae13
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Feb 22 19:52:35 2021 +0100

    ISIS-2540: supposedly fixes previous attempt to no longer require mixins
    to hold their mixees
---
 .../param/choices/ActionParameterChoicesFacet.java |  3 +-
 .../choices/ActionParameterChoicesFacetNone.java   |  3 +-
 ...rameterChoicesFacetDerivedFromChoicesFacet.java |  5 +--
 .../ActionParameterChoicesFacetViaMethod.java      |  7 ++--
 ...arameterChoicesFacetFromParentedCollection.java | 20 ++----------
 .../specloader/specimpl/ObjectActionDefault.java   | 37 ++++------------------
 .../specimpl/ObjectActionParameterAbstract.java    |  7 ++--
 7 files changed, 25 insertions(+), 57 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacet.java
index 873e87f..c03f19e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacet.java
@@ -22,6 +22,7 @@ package org.apache.isis.core.metamodel.facets.param.choices;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.interactions.managed.ActionInteractionHead;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
@@ -37,7 +38,7 @@ public interface ActionParameterChoicesFacet extends Facet {
 
     public Can<ManagedObject> getChoices(
             ObjectSpecification requiredSpec,
-            ManagedObject target,
+            ActionInteractionHead head,
             Can<ManagedObject> pendingArgs,
             InteractionInitiatedBy interactionInitiatedBy);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetNone.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetNone.java
index 27d5617..0bc98bb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetNone.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetNone.java
@@ -22,6 +22,7 @@ package org.apache.isis.core.metamodel.facets.param.choices;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.interactions.managed.ActionInteractionHead;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
@@ -34,7 +35,7 @@ public class ActionParameterChoicesFacetNone extends ActionParameterChoicesFacet
     @Override
     public Can<ManagedObject> getChoices(
             final ObjectSpecification requiredSpec,
-            final ManagedObject adapter,
+            final ActionInteractionHead head,
             final Can<ManagedObject> pendingArgs,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java
index b620434..67341d2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java
@@ -25,6 +25,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.TypedHolder;
 import org.apache.isis.core.metamodel.facets.objectvalue.choices.ChoicesFacet;
 import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacetAbstract;
+import org.apache.isis.core.metamodel.interactions.managed.ActionInteractionHead;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
@@ -37,7 +38,7 @@ public class ActionParameterChoicesFacetDerivedFromChoicesFacet extends ActionPa
     @Override
     public Can<ManagedObject> getChoices(
             final ObjectSpecification requiredSpec,
-            final ManagedObject adapter,
+            final ActionInteractionHead head,
             final Can<ManagedObject> pendingArgs,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
@@ -48,7 +49,7 @@ public class ActionParameterChoicesFacetDerivedFromChoicesFacet extends ActionPa
         if (choicesFacet == null) {
             return Can.empty();
         }
-        return choicesFacet.getChoices(adapter, interactionInitiatedBy);
+        return choicesFacet.getChoices(head.getTarget(), interactionInitiatedBy);
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
index 230070d..18831e7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
@@ -31,6 +31,7 @@ import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
 import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacetAbstract;
+import org.apache.isis.core.metamodel.interactions.managed.ActionInteractionHead;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ManagedObjects;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -74,13 +75,13 @@ implements ImperativeFacet {
     @Override
     public Can<ManagedObject> getChoices(
             final ObjectSpecification requiredSpec,
-            final ManagedObject owningAdapter,
+            final ActionInteractionHead head,
             final Can<ManagedObject> pendingArgs,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
         final Object collectionOrArray = ppmFactory.isPresent()
-                ? ManagedObjects.InvokeUtil.invokeWithPPM(ppmFactory.get(), method, owningAdapter, pendingArgs) 
-                : ManagedObjects.InvokeUtil.invokeAutofit(method, owningAdapter, pendingArgs);
+                ? ManagedObjects.InvokeUtil.invokeWithPPM(ppmFactory.get(), method, head.getTarget(), pendingArgs) 
+                : ManagedObjects.InvokeUtil.invokeAutofit(method, head.getTarget(), pendingArgs);
         if (collectionOrArray == null) {
             return Can.empty();
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionParameterChoicesFacetFromParentedCollection.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionParameterChoicesFacetFromParentedCollection.java
index 2738fad..5f886cb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionParameterChoicesFacetFromParentedCollection.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionParameterChoicesFacetFromParentedCollection.java
@@ -22,12 +22,11 @@ package org.apache.isis.core.metamodel.postprocessors.param;
 import java.util.Map;
 
 import org.apache.isis.commons.collections.Can;
-import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.collections.CollectionFacet;
-import org.apache.isis.core.metamodel.facets.object.mixin.MixinFacet;
 import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacetAbstract;
+import org.apache.isis.core.metamodel.interactions.managed.ActionInteractionHead;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
@@ -49,27 +48,14 @@ extends ActionParameterChoicesFacetAbstract {
     @Override
     public Can<ManagedObject> getChoices(
             final ObjectSpecification requiredSpec,
-            final ManagedObject target,
+            final ActionInteractionHead head,
             final Can<ManagedObject> pendingArgs,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
-        guardAgainstMixin(target);
-        val collectionAdapter = otma.get(target, interactionInitiatedBy);
+        val collectionAdapter = otma.get(head.getOwner(), interactionInitiatedBy);
         return CollectionFacet.streamAdapters(collectionAdapter).collect(Can.toCan());
     }
 
-    /**
-     * in the case of a mixin action, the target passed to the facet is actually the mixin itself, 
-     * not the mixee
-     */
-    private void guardAgainstMixin(final ManagedObject target) {
-        val mixinFacet = target.getSpecification().getFacet(MixinFacet.class);
-        if(mixinFacet != null) {
-            _Exceptions.unrecoverable("internal error: choices facet invoked on mixin target, "
-                    + "but should be a mixee target instead");
-        }
-    }
-
     @Override 
     public void appendAttributesTo(final Map<String, Object> attributeMap) {
         super.appendAttributesTo(attributeMap);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
index 27aa46a..898d5cb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
@@ -523,7 +523,12 @@ implements ObjectAction {
                 val paramFacet = param.getFacet(ActionParameterChoicesFacet.class);
                 
                 if (paramFacet != null && !paramFacet.isFallback()) {
-                    val visibleChoices = paramFacet.getChoices(paramSpec, target, emptyPendingArgs, interactionInitiatedBy);
+                    
+                    val visibleChoices = paramFacet.getChoices(
+                            paramSpec, 
+                            interactionHead(target), 
+                            emptyPendingArgs, 
+                            interactionInitiatedBy);
                     ObjectActionParameterAbstract.checkChoicesOrAutoCompleteType(
                             getSpecificationLoader(), visibleChoices, paramSpec);
                     paramChoicesVector.set(i, visibleChoices);
@@ -533,36 +538,6 @@ implements ObjectAction {
             }
         }
         return paramChoicesVector;
-
-//        final List<Can<ManagedObject>> parameterChoicesAdapters = new ArrayList<>(parameterCount);
-//        for (int i = 0; i < parameterCount; i++) {
-//            
-//            ManagedObject[] choices;
-//            
-//            final ObjectSpecification paramSpec = parameters.getElseFail(i).getSpecification();
-//
-//            if (paramChoicesVector[i] != null && paramChoicesVector[i].length > 0) {
-//                ObjectActionParameterAbstract.checkChoicesOrAutoCompleteType(
-//                        getSpecificationLoader(), paramChoicesVector[i], paramSpec);
-//                choices = new ManagedObject[paramChoicesVector[i].length];
-//                for (int j = 0; j < paramChoicesVector[i].length; j++) {
-//                    choices[j] = ManagedObject.of(paramSpec, paramChoicesVector[i][j]);
-//                }
-//            } else if (paramSpec.isNotCollection()) {
-//                choices = new ManagedObject[0];
-//            } else {
-//                throw new UnknownTypeException(paramSpec);
-//            }
-//
-//            if (choices.length == 0) {
-//                choices = null;
-//            }
-//            
-//            parameterChoicesAdapters.add(Can.ofArray(choices));
-//            
-//        }
-//
-//        return Can.ofCollection(parameterChoicesAdapters);
     }
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index 3e14d1a..06b1356 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -222,8 +222,11 @@ implements ObjectActionParameter, HasFacetHolder {
         if (choicesFacet == null) {
             return Can.empty();
         }
-
-        val visibleChoices = choicesFacet.getChoices(paramSpec, pendingArgs.getActionTarget(), pendingArgs.getParamValues(), interactionInitiatedBy);
+        
+        val visibleChoices = choicesFacet.getChoices(paramSpec, 
+                pendingArgs.getHead(), 
+                pendingArgs.getParamValues(), 
+                interactionInitiatedBy);
         checkChoicesOrAutoCompleteType(getSpecificationLoader(), visibleChoices, getSpecification());
         
         return visibleChoices;