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;