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() {