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/04/22 11:47:39 UTC

[04/14] isis git commit: ISIS-1374: now correctly persisting the mixinFqClassName into the cmd memento for mixin actions.

ISIS-1374: now correctly persisting the mixinFqClassName into the cmd memento for mixin actions.


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

Branch: refs/heads/ISIS-1291
Commit: af4e3ca200b1530c7c7ae9ae0bff94b31d4632ae
Parents: 0a33532
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Apr 21 13:30:03 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Apr 21 13:34:58 2016 +0100

----------------------------------------------------------------------
 ...onInvocationFacetForDomainEventAbstract.java |  5 +--
 .../specimpl/ObjectActionMixedIn.java           | 44 ++++++++++++++++++++
 .../command/CommandMementoServiceDefault.java   |  7 +++-
 3 files changed, 52 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/af4e3ca2/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 6199504..fc85208 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
@@ -42,11 +42,9 @@ import org.apache.isis.applib.services.background.ActionInvocationMemento;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.command.Command;
 import org.apache.isis.applib.services.command.CommandContext;
-import org.apache.isis.core.metamodel.services.command.CommandMementoService;
 import org.apache.isis.applib.services.command.spi.CommandService;
 import org.apache.isis.applib.services.eventbus.AbstractDomainEvent;
 import org.apache.isis.applib.services.eventbus.ActionDomainEvent;
-import org.apache.isis.applib.services.jaxb.JaxbService;
 import org.apache.isis.applib.services.queryresultscache.QueryResultsCache;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
@@ -71,6 +69,7 @@ import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFa
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+import org.apache.isis.core.metamodel.services.command.CommandMementoService;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.specloader.ReflectiveActionException;
@@ -338,7 +337,7 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
                     }
 
                     if(command.getMemento() == null) {
-                        // similarly, guard here to deal with subsequent contributed/mixin actions.
+                        // similarly, guard here to deal with subsequent or prior contributed/mixin actions.
 
                         final CommandMementoService commandMementoService = getCommandMementoService();
 

http://git-wip-us.apache.org/repos/asf/isis/blob/af4e3ca2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
index 483d140..9bdb98e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
@@ -45,9 +45,12 @@ import org.apache.isis.core.metamodel.facets.all.named.NamedFacetInferred;
 import org.apache.isis.core.metamodel.interactions.InteractionUtils;
 import org.apache.isis.core.metamodel.interactions.UsabilityContext;
 import org.apache.isis.core.metamodel.interactions.VisibilityContext;
+import org.apache.isis.core.metamodel.services.command.CommandMementoService;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
+import org.apache.isis.schema.cmd.v1.CommandMementoDto;
+import org.apache.isis.schema.utils.CommandMementoDtoUtils;
 
 public class ObjectActionMixedIn extends ObjectActionDefault implements MixedInMember2 {
 
@@ -231,7 +234,31 @@ public class ObjectActionMixedIn extends ObjectActionDefault implements MixedInM
 
                 final Bookmark targetBookmark = CommandUtil.bookmarkFor(mixedInAdapter);
                 command.setTarget(targetBookmark);
+
+            }
+
+            if(command.getMemento() == null) {
+                // similarly, guard here to deal with subsequent or prior contributed/mixin actions.
+
+                final CommandMementoService commandMementoService = getCommandMementoService();
+
+                final CommandMementoDto dto = commandMementoService.asCommandMemento(
+                        Collections.singletonList(mixedInAdapter),
+                        this, arguments);
+
+                if(dto != null) {
+                    // the default implementation will always return a dto.  The guard is to allow
+                    // for the default implementation to be replaced with a version that returns null
+                    // allowing a fallback to the original API (using ActionInvocationMemento rather than
+                    // CommandMementoDto).
+                    final String mementoXml = CommandMementoDtoUtils.toXml(dto);
+                    command.setMemento(mementoXml);
+                } else {
+                    // no fallback to old behaviour is required; mixin actions were simply not correctly supported.
+                }
             }
+
+
         }
 
         return mixinAction.execute(mixinAdapterFor(mixinType, mixedInAdapter), arguments, interactionInitiatedBy);
@@ -250,6 +277,10 @@ public class ObjectActionMixedIn extends ObjectActionDefault implements MixedInM
         return mixinAdapterFor(mixinType, mixedInAdapter);
     }
 
+    private static Object unwrap(final ObjectAdapter adapter) {
+        return adapter == null ? null : adapter.getObject();
+    }
+
     /* (non-Javadoc)
      * @see org.apache.isis.core.metamodel.specloader.specimpl.ObjectMemberAbstract#getIdentifier()
      */
@@ -263,4 +294,17 @@ public class ObjectActionMixedIn extends ObjectActionDefault implements MixedInM
         return getSpecificationLoader().loadSpecification(mixinType);
 
     }
+
+
+
+    // //////////////////////////////////////
+
+    private CommandMementoService getCommandMementoService() {
+        return lookupService(CommandMementoService.class);
+    }
+
+    private <T> T lookupService(final Class<T> serviceClass) {
+        return getServicesInjector().lookupService(serviceClass);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/af4e3ca2/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandMementoServiceDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandMementoServiceDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandMementoServiceDefault.java
index 1f09abb..9ec9094 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandMementoServiceDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandMementoServiceDefault.java
@@ -42,6 +42,7 @@ import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
 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.ObjectActionMixedIn;
 import org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault;
 import org.apache.isis.core.runtime.services.memento.MementoServiceDefault;
 import org.apache.isis.core.runtime.system.context.IsisContext;
@@ -169,7 +170,11 @@ public class CommandMementoServiceDefault implements CommandMementoService {
             final Object arg = argAdapter != null? argAdapter.getObject(): null;
             CommandMementoDtoUtils.addParamArg(actionDto.getParameters(), parameterName, paramType, arg, bookmarkService);
         }
-        actionDto.setMixinFqClassName(null);
+        if(objectAction instanceof ObjectActionMixedIn) {
+            final ObjectActionMixedIn actionMixedIn = (ObjectActionMixedIn) objectAction;
+            final String mixinTypeName = actionMixedIn.getMixinType().getCorrespondingClass().getName();
+            actionDto.setMixinFqClassName(mixinTypeName);
+        }
 
         dto.setTransactionId(UUID.randomUUID().toString());
         return dto;