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());
}