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 2015/05/25 13:50:10 UTC
isis git commit: ISIS-1154: adding parameter names/types to
PublishingService's EventMetadata and also ActionDomainEvent.
Repository: isis
Updated Branches:
refs/heads/ISIS-1154 [created] 19e3e7fb6
ISIS-1154: adding parameter names/types to PublishingService's EventMetadata and also ActionDomainEvent.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/19e3e7fb
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/19e3e7fb
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/19e3e7fb
Branch: refs/heads/ISIS-1154
Commit: 19e3e7fb6bbf6b46659deecfac6cfc130155fa92
Parents: a106383
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon May 25 12:50:05 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon May 25 12:50:05 2015 +0100
----------------------------------------------------------------------
.../background/ActionInvocationMemento.java | 12 ++++-
.../applib/services/command/CommandDefault.java | 8 +--
.../services/eventbus/ActionDomainEvent.java | 24 ++++++++-
.../applib/services/publish/EventMetadata.java | 53 ++++++++++++++++++--
.../EventPayloadForActionInvocation.java | 4 ++
.../metamodel/facets/DomainEventHelper.java | 16 +++++-
...onInvocationFacetForDomainEventAbstract.java | 4 ++
.../spec/feature/ObjectActionParameter.java | 17 +++++++
.../system/transaction/IsisTransaction.java | 37 ++++++++++++--
9 files changed, 159 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/19e3e7fb/core/applib/src/main/java/org/apache/isis/applib/services/background/ActionInvocationMemento.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/background/ActionInvocationMemento.java b/core/applib/src/main/java/org/apache/isis/applib/services/background/ActionInvocationMemento.java
index d9a51c6..c8454d2 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/background/ActionInvocationMemento.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/background/ActionInvocationMemento.java
@@ -75,11 +75,19 @@ public class ActionInvocationMemento {
public String getActionId() {
return memento.get("actionId", String.class);
}
-
+
+ /**
+ * @deprecated - always returns <tt>null</tt>; use {@link #getActionId()} instead.
+ */
+ @Deprecated
public String getTargetClassName() {
return memento.get("targetClassName", String.class);
}
-
+
+ /**
+ * @deprecated - always returns <tt>null</tt>; use {@link #getActionId()} instead.
+ */
+ @Deprecated
public String getTargetActionName() {
return memento.get("targetActionName", String.class);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/19e3e7fb/core/applib/src/main/java/org/apache/isis/applib/services/command/CommandDefault.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/command/CommandDefault.java b/core/applib/src/main/java/org/apache/isis/applib/services/command/CommandDefault.java
index d45c8d8..b98a781 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/command/CommandDefault.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/command/CommandDefault.java
@@ -33,7 +33,7 @@ import org.apache.isis.applib.services.eventbus.ActionDomainEvent;
import org.apache.isis.applib.services.eventbus.ActionInteractionEvent;
import org.apache.isis.applib.util.ObjectContracts;
-public class CommandDefault implements Command2, Command3 {
+public class CommandDefault implements Command3 {
public CommandDefault() {
setExecutor(Executor.OTHER);
@@ -80,7 +80,9 @@ public class CommandDefault implements Command2, Command3 {
public void setTargetAction(String targetAction) {
this.targetAction = targetAction;
}
-
+
+
+
// //////////////////////////////////////
// arguments (property)
// //////////////////////////////////////
@@ -428,7 +430,5 @@ public class CommandDefault implements Command2, Command3 {
public String toString() {
return ObjectContracts.toString(this, "startedAt,user,memberIdentifier,target,transactionId");
}
-
-
}
http://git-wip-us.apache.org/repos/asf/isis/blob/19e3e7fb/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/ActionDomainEvent.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/ActionDomainEvent.java b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/ActionDomainEvent.java
index 8e21fdb..895e3a5 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/ActionDomainEvent.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/ActionDomainEvent.java
@@ -115,6 +115,27 @@ public abstract class ActionDomainEvent<S> extends AbstractInteractionEvent<S> {
//endregion
+ //region > parameterNames
+ private List<String> parameterNames;
+ public List<String> getParameterNames() {
+ return parameterNames;
+ }
+ public void setParameterNames(final List<String> parameterNames) {
+ this.parameterNames = parameterNames;
+ }
+ //endregion
+
+ //region > parameterTypes
+ private List<Class<?>> parameterTypes;
+ public List<Class<?>> getParameterTypes() {
+ return parameterTypes;
+ }
+
+ public void setParameterTypes(final List<Class<?>> parameterTypes) {
+ this.parameterTypes = parameterTypes;
+ }
+ //endregion
+
//region > arguments
private List<Object> arguments;
/**
@@ -133,7 +154,7 @@ public abstract class ActionDomainEvent<S> extends AbstractInteractionEvent<S> {
}
//endregion
-
+ //region > returnValue
/**
*
*/
@@ -159,6 +180,7 @@ public abstract class ActionDomainEvent<S> extends AbstractInteractionEvent<S> {
public void setReturnValue(final Object returnValue) {
this.returnValue = returnValue;
}
+ //endregion
//region > toString
@Override
http://git-wip-us.apache.org/repos/asf/isis/blob/19e3e7fb/core/applib/src/main/java/org/apache/isis/applib/services/publish/EventMetadata.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/publish/EventMetadata.java b/core/applib/src/main/java/org/apache/isis/applib/services/publish/EventMetadata.java
index 0e8e673..f8f6ed6 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/publish/EventMetadata.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/publish/EventMetadata.java
@@ -20,6 +20,7 @@
package org.apache.isis.applib.services.publish;
import java.sql.Timestamp;
+import java.util.List;
import java.util.UUID;
import org.apache.isis.applib.Identifier;
@@ -45,7 +46,9 @@ public class EventMetadata {
private final String targetAction;
private final Bookmark target;
private final String actionIdentifier;
-
+ private final List<String> actionParameterNames;
+ private final List<Class<?>> actionParameterTypes;
+
/**
* @deprecated - no longer called by the framework.
*/
@@ -59,7 +62,11 @@ public class EventMetadata {
final String title) {
this(transactionId, sequence, eventType, user, new java.sql.Timestamp(timestamp), title, null, null, null, null);
}
-
+
+ /**
+ * @deprecated - no longer called by the framework.
+ */
+ @Deprecated
public EventMetadata(
final UUID transactionId,
final int sequence,
@@ -71,6 +78,22 @@ public class EventMetadata {
final String targetAction,
final Bookmark target,
final String actionIdentifier) {
+ this(transactionId, sequence, eventType, user, javaSqlTimestamp, title, targetClass, targetAction, target, actionIdentifier, null, null);
+ }
+
+ public EventMetadata(
+ final UUID transactionId,
+ final int sequence,
+ final EventType eventType,
+ final String user,
+ final java.sql.Timestamp javaSqlTimestamp,
+ final String title,
+ final String targetClass,
+ final String targetAction,
+ final Bookmark target,
+ final String actionIdentifier,
+ final List<String> actionParameterNames,
+ final List<Class<?>> actionParameterTypes) {
this.transactionId = transactionId;
this.sequence = sequence;
this.user = user;
@@ -81,8 +104,10 @@ public class EventMetadata {
this.targetAction = targetAction;
this.target = target;
this.actionIdentifier = actionIdentifier;
+ this.actionParameterNames = actionParameterNames;
+ this.actionParameterTypes = actionParameterTypes;
}
-
+
/**
* Isis' identifier of the transaction within which this event
* originated.
@@ -168,12 +193,32 @@ public class EventMetadata {
* Formal action identifier, corresponding to {@link Identifier#toClassAndNameIdentityString()}).
*
* <p>
- * Populated only for for {@link EventType#ACTION_INVOCATION}s.
+ * Populated only for {@link EventType#ACTION_INVOCATION}s.
*/
public String getActionIdentifier() {
return actionIdentifier;
}
+ /**
+ * Parameter names of the invoked action.
+ *
+ * <p>
+ * Populated only for {@link EventType#ACTION_INVOCATION}s.
+ */
+ public List<String> getActionParameterNames() {
+ return actionParameterNames;
+ }
+
+ /**
+ * Parameter types of the invoked action.
+ *
+ * <p>
+ * Populated only for {@link EventType#ACTION_INVOCATION}s.
+ */
+ public List<Class<?>> getActionParameterTypes() {
+ return actionParameterTypes;
+ }
+
// //////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/isis/blob/19e3e7fb/core/applib/src/main/java/org/apache/isis/applib/services/publish/EventPayloadForActionInvocation.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/publish/EventPayloadForActionInvocation.java b/core/applib/src/main/java/org/apache/isis/applib/services/publish/EventPayloadForActionInvocation.java
index da4810c..b0f4a26 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/publish/EventPayloadForActionInvocation.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/publish/EventPayloadForActionInvocation.java
@@ -58,6 +58,10 @@ public class EventPayloadForActionInvocation<T> implements EventPayload {
this.stringifier = stringifier;
}
+ @Programmatic
+ public List<? extends Object> getArguments() {
+ return arguments;
+ }
public T getTarget() {
return target;
http://git-wip-us.apache.org/repos/asf/isis/blob/19e3e7fb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/DomainEventHelper.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/DomainEventHelper.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/DomainEventHelper.java
index dcf655a..2744478 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/DomainEventHelper.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/DomainEventHelper.java
@@ -21,6 +21,12 @@ package org.apache.isis.core.metamodel.facets;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
+import java.util.Collections;
+import java.util.List;
+
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+
import org.apache.isis.applib.FatalException;
import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.services.command.Command;
@@ -37,7 +43,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-
+import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
public class DomainEventHelper {
@@ -80,6 +86,10 @@ public class DomainEventHelper {
// should always be the case...
final ObjectAction objectAction = (ObjectAction) identified;
event.setActionSemantics(objectAction.getSemantics());
+
+ final List<ObjectActionParameter> parameters = objectAction.getParameters();
+ event.setParameterNames(immutableList(Iterables.transform(parameters, ObjectActionParameter.Functions.GET_NAME)));
+ event.setParameterTypes(immutableList(Iterables.transform(parameters, ObjectActionParameter.Functions.GET_TYPE)));
}
}
@@ -115,6 +125,10 @@ public class DomainEventHelper {
}
}
+ private static <T> List<T> immutableList(final Iterable<T> iterable) {
+ return Collections.unmodifiableList(Lists.newArrayList(iterable));
+ }
+
@SuppressWarnings("unchecked")
static <S> ActionDomainEvent<S> newActionDomainEvent(
final Class<? extends ActionDomainEvent<S>> type,
http://git-wip-us.apache.org/repos/asf/isis/blob/19e3e7fb/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 26082f4..df0c123 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
@@ -23,9 +23,12 @@ import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.List;
+
import com.google.common.base.Strings;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+
import org.apache.isis.applib.NonRecoverableException;
import org.apache.isis.applib.RecoverableException;
import org.apache.isis.applib.ViewModel;
@@ -185,6 +188,7 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
command,
null);
+
// ... invoke the action
final InvocationResult invocationResult = internalInvoke(command, owningAction, targetAdapter, arguments);
http://git-wip-us.apache.org/repos/asf/isis/blob/19e3e7fb/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
index 1f20fa4..1be4585 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
@@ -19,6 +19,8 @@
package org.apache.isis.core.metamodel.spec.feature;
+import com.google.common.base.Function;
+
import org.apache.isis.applib.filter.Filter;
import org.apache.isis.applib.profiles.Localization;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
@@ -143,4 +145,19 @@ public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
}
};
}
+ public static class Functions {
+ public static final Function<ObjectActionParameter, String> GET_NAME = new Function<ObjectActionParameter, String>() {
+ @Override public String apply(final ObjectActionParameter input) {
+ return input.getName();
+ }
+ };
+ public static final Function<ObjectActionParameter, Class<?>> GET_TYPE = new Function<ObjectActionParameter, Class<?>>() {
+ @Override public Class<?> apply(final ObjectActionParameter input) {
+ return input.getSpecification().getCorrespondingClass();
+ }
+ };
+
+ private Functions(){}
+
+ }
}
http://git-wip-us.apache.org/repos/asf/isis/blob/19e3e7fb/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
index 52def80..8cd0e01 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
@@ -84,6 +84,8 @@ import org.apache.isis.core.metamodel.facets.object.publishedobject.PublishedObj
import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext.TransactionState;
import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
import org.apache.isis.core.metamodel.spec.feature.Contributed;
+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.ObjectAssociation;
import org.apache.isis.core.runtime.persistence.PersistenceConstants;
import org.apache.isis.core.runtime.persistence.objectstore.transaction.CreateObjectCommand;
@@ -586,8 +588,20 @@ public class IsisTransaction implements TransactionScopedComponent {
final String targetAction = command.getTargetAction();
final Bookmark target = command.getTarget();
final String memberIdentifier = command.getMemberIdentifier();
+ final List<String> parameterNames;
+ final List<Class<?>> parameterTypes;
+ if(action instanceof ObjectAction) {
+ // should always be the case
+ ObjectAction objectAction = (ObjectAction) action;
+ final List<ObjectActionParameter> parameters = objectAction.getParameters();
+ parameterNames = immutableList(Iterables.transform(parameters, ObjectActionParameter.Functions.GET_NAME));
+ parameterTypes = immutableList(Iterables.transform(parameters, ObjectActionParameter.Functions.GET_TYPE));
+ } else {
+ parameterNames = null;
+ parameterTypes = null;
+ }
- final EventMetadata metadata = newEventMetadata(EventType.ACTION_INVOCATION, currentUser, timestamp, title, targetClass, targetAction, target, memberIdentifier);
+ final EventMetadata metadata = newEventMetadata(EventType.ACTION_INVOCATION, currentUser, timestamp, title, targetClass, targetAction, target, memberIdentifier, parameterNames, parameterTypes);
publishingService.publishAction(payloadFactory, metadata, currentInvocation, objectStringifier());
} finally {
// ensures that cannot publish this action more than once
@@ -595,6 +609,11 @@ public class IsisTransaction implements TransactionScopedComponent {
}
}
+ private static <T> List<T> immutableList(final Iterable<T> iterable) {
+ return Collections.unmodifiableList(Lists.newArrayList(iterable));
+ }
+
+
/**
* @return the adapters that were published (if any were).
*/
@@ -623,7 +642,7 @@ public class IsisTransaction implements TransactionScopedComponent {
final String enlistedAdapterClass = CommandUtil.targetClassNameFor(enlistedAdapter);
final Bookmark enlistedTarget = enlistedAdapterOid.asBookmark();
- final EventMetadata metadata = newEventMetadata(eventTypeFor, currentUser, timestamp, title, enlistedAdapterClass, null, enlistedTarget, null);
+ final EventMetadata metadata = newEventMetadata(eventTypeFor, currentUser, timestamp, title, enlistedAdapterClass, null, enlistedTarget, null, null, null);
publishingService.publishObject(payloadFactory, metadata, enlistedAdapter, changeKind, objectStringifier());
}
@@ -671,11 +690,21 @@ public class IsisTransaction implements TransactionScopedComponent {
return objectStringifier;
}
- private EventMetadata newEventMetadata(final EventType eventType, final String currentUser, final java.sql.Timestamp timestampEpoch, final String title, String targetClass, String targetAction, Bookmark target, String memberIdentifier) {
+ private EventMetadata newEventMetadata(
+ final EventType eventType,
+ final String currentUser,
+ final Timestamp timestampEpoch,
+ final String title,
+ String targetClass,
+ String targetAction,
+ Bookmark target,
+ String memberIdentifier,
+ final List<String> parameterNames,
+ final List<Class<?>> parameterTypes) {
int nextEventSequence = nextEventSequence();
return new EventMetadata(
getTransactionId(), nextEventSequence, eventType, currentUser, timestampEpoch, title,
- targetClass, targetAction, target, memberIdentifier);
+ targetClass, targetAction, target, memberIdentifier, parameterNames, parameterTypes);
}
private int nextEventSequence() {