You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2016/05/22 16:04:45 UTC

isis git commit: ISIS-1291: mixed-in interactions were showing the mixin as the target rather than the mixed-in. Also the action was shown as blank.

Repository: isis
Updated Branches:
  refs/heads/master cbb4c4cb1 -> 68968850c


ISIS-1291: mixed-in interactions were showing the mixin as the target rather than the mixed-in.  Also the action was shown as blank.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/68968850
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/68968850
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/68968850

Branch: refs/heads/master
Commit: 68968850cb62ba5513360025bda4bf369c06c4c4
Parents: cbb4c4c
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sun May 22 17:02:52 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Sun May 22 17:02:52 2016 +0100

----------------------------------------------------------------------
 .../isis/applib/services/iactn/Interaction.java |  4 ++
 ...onInvocationFacetForDomainEventAbstract.java | 39 ++++++++++++++++----
 .../actions/action/invocation/CommandUtil.java  |  6 +++
 .../metamodel/spec/feature/ObjectAction.java    |  2 +-
 .../specimpl/ObjectActionDefault.java           |  2 +-
 .../specimpl/ObjectMemberAbstract.java          |  5 ++-
 6 files changed, 46 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/68968850/core/applib/src/main/java/org/apache/isis/applib/services/iactn/Interaction.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/iactn/Interaction.java b/core/applib/src/main/java/org/apache/isis/applib/services/iactn/Interaction.java
index e693996..dbf7083 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/iactn/Interaction.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/iactn/Interaction.java
@@ -360,6 +360,10 @@ public class Interaction implements HasTransactionId {
             return memberIdentifier;
         }
 
+        /**
+         * The target of the action invocation.  If this interaction is for a mixin action, then will be the
+         * mixed-in target (not the transient mixin itself).
+         */
         public Object getTarget() {
             return target;
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/68968850/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
index 8a4198c..10c1069 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
@@ -31,6 +31,9 @@ import java.util.concurrent.Callable;
 import com.google.common.base.Strings;
 import com.google.common.collect.Lists;
 
+import org.apache.isis.core.metamodel.spec.feature.Contributed;
+import org.apache.isis.core.metamodel.specloader.specimpl.MixedInMember2;
+import org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionDefault;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -188,19 +191,21 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
             returnedAdapter = getAdapterManager().adapterFor(command);
 
         } else {
-
             // otherwise, go ahead and execute action in the 'foreground'
-            owningAction.setupActionInvocationContext(targetAdapter);
+            final ObjectAdapter mixinElseRegularAdapter = mixedInAdapter != null ? mixedInAdapter : targetAdapter;
+
+            owningAction.setupBulkActionInvocationContext(mixinElseRegularAdapter);
+
+            final Object mixinElseRegularPojo = ObjectAdapter.Util.unwrap(mixinElseRegularAdapter);
 
-            final Object targetPojo = ObjectAdapter.Util.unwrap(targetAdapter);
             final List<ObjectAdapter> argumentAdapterList = Arrays.asList(argumentAdapters);
             final List<Object> argumentPojos = ObjectAdapter.Util.unwrap(argumentAdapterList);
 
-            final String targetMember = CommandUtil.targetMemberNameFor(owningAction);
-            final String targetClass = CommandUtil.targetClassNameFor(targetAdapter);
+            final String targetMember = targetNameFor(owningAction, mixedInAdapter);
+            final String targetClass = CommandUtil.targetClassNameFor(mixinElseRegularAdapter);
 
             final Interaction.ActionInvocation execution =
-                    new Interaction.ActionInvocation(interaction, actionId, targetPojo, argumentPojos, targetMember,
+                    new Interaction.ActionInvocation(interaction, actionId, mixinElseRegularPojo, argumentPojos, targetMember,
                             targetClass);
             final Interaction.MemberExecutor<Interaction.ActionInvocation> callable =
                     new Interaction.MemberExecutor<Interaction.ActionInvocation>() {
@@ -213,7 +218,7 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
                         // update the current execution with the DTO (memento)
                         final ActionInvocationDto invocationDto =
                                 getInteractionDtoServiceInternal().asActionInvocationDto(
-                                        owningAction, targetAdapter, argumentAdapterList);
+                                        owningAction, mixinElseRegularAdapter, argumentAdapterList);
                         currentExecution.setDto(invocationDto);
 
 
@@ -243,7 +248,7 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
                         // invoke method
                         final Object resultPojo = invokeMethodElseFromCache(targetAdapter, argumentAdapters);
 
-                        final ObjectAdapter resultAdapterPossiblyCloned = cloneIfViewModelCloneable(resultPojo, targetAdapter);
+                        final ObjectAdapter resultAdapterPossiblyCloned = cloneIfViewModelCloneable(resultPojo, mixinElseRegularAdapter);
 
 
                         // ... post the executed event
@@ -335,6 +340,24 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
         return filteredIfRequired(returnedAdapter, interactionInitiatedBy);
     }
 
+    // TODO: could improve this, currently have to go searching for the mixin
+    private static String targetNameFor(ObjectAction owningAction, ObjectAdapter mixedInAdapter) {
+        if(mixedInAdapter != null) {
+            ObjectSpecification onType = owningAction.getOnType();
+            ObjectSpecification mixedInSpec = mixedInAdapter.getSpecification();
+            List<ObjectAction> objectActions1 = mixedInSpec.getObjectActions(Contributed.INCLUDED);
+            for (ObjectAction objectAction : objectActions1) {
+                if(objectAction instanceof MixedInMember2) {
+                    MixedInMember2 action = (MixedInMember2) objectAction;
+                    if(action.getMixinType() == onType) {
+                        return action.getName();
+                    }
+                }
+            }
+        }
+        return CommandUtil.targetMemberNameFor(owningAction);
+    }
+
     private static String trim(String message, final int maxLen) {
         if(!Strings.isNullOrEmpty(message)) {
             message = message.substring(0, Math.min(message.length(), maxLen));

http://git-wip-us.apache.org/repos/asf/isis/blob/68968850/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java
index a9a59e2..2134409 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java
@@ -34,9 +34,15 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
+import org.apache.isis.core.metamodel.facets.all.named.NamedFacetInferred;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
+import org.apache.isis.core.metamodel.specloader.specimpl.MixedInMember2;
+import org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionDefault;
 
 /**
  * Factoring out the commonality between <tt>ActionInvocationFacetViaMethod</tt> and <tt>BackgroundServiceDefault</tt>.

http://git-wip-us.apache.org/repos/asf/isis/blob/68968850/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
index f22c8a1..80c295b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
@@ -197,7 +197,7 @@ public interface ObjectAction extends ObjectMember {
     /**
      * internal API, called by {@link ActionInvocationFacet} if the action is actually executed (ie in the foreground).
      */
-    void setupActionInvocationContext(
+    void setupBulkActionInvocationContext(
             final ObjectAdapter targetAdapter);
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/68968850/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
----------------------------------------------------------------------
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 424e8c2..7f9a2c6 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
@@ -556,7 +556,7 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
      * Internal API
      */
     @Override
-    public void setupActionInvocationContext(final ObjectAdapter targetAdapter) {
+    public void setupBulkActionInvocationContext(final ObjectAdapter targetAdapter) {
 
         final Object targetPojo = ObjectAdapter.Util.unwrap(targetAdapter);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/68968850/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
index 7f31916..e29dd07 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
@@ -58,6 +58,7 @@ import org.apache.isis.core.metamodel.services.persistsession.PersistenceSession
 import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.metamodel.services.command.CommandDtoServiceInternal;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.CollectionTypeRegistry;
@@ -332,7 +333,7 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
         return getPersistenceSessionService().adapterFor(mixinPojo);
     }
 
-    static String determineNameFrom(final ObjectActionDefault mixinAction) {
+    public static String determineNameFrom(final ObjectAction mixinAction) {
         return StringExtensions.asCapitalizedName(suffix(mixinAction));
     }
 
@@ -345,7 +346,7 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
         return suffix.replaceAll(" ","");
     }
 
-    static String suffix(final ObjectActionDefault mixinAction) {
+    static String suffix(final ObjectAction mixinAction) {
         return suffix(mixinAction.getOnType().getSingularName());
     }