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/04 09:11:53 UTC

[1/8] isis git commit: ISIS-1397: rename ReturnDto to ValueWithTypeDto, use for new param of property modification also.

Repository: isis
Updated Branches:
  refs/heads/ISIS-1291 a282f199e -> e85f40534


ISIS-1397: rename ReturnDto to ValueWithTypeDto, use for new param of property modification also.


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

Branch: refs/heads/ISIS-1291
Commit: 362350c00b0fef9d3f4717c72629399fe0a614f6
Parents: a282f19
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue May 3 09:31:18 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Tue May 3 09:31:18 2016 +0100

----------------------------------------------------------------------
 .../isis/schema/utils/InteractionDtoUtils.java  | 62 ++++++++++----------
 .../org/apache/isis/schema/utils/Roundtrip.java |  6 +-
 .../InteractionDtoServiceInternalDefault.java   |  4 +-
 .../org/apache/isis/schema/ixn/ixn-1.0.xsd      | 10 ++--
 4 files changed, 42 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/362350c0/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java b/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
index 356c04c..278467c 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
@@ -58,7 +58,7 @@ import org.apache.isis.schema.ixn.v1.ActionInvocationDto;
 import org.apache.isis.schema.ixn.v1.InteractionDto;
 import org.apache.isis.schema.ixn.v1.InteractionExecutionDto;
 import org.apache.isis.schema.ixn.v1.PropertyModificationDto;
-import org.apache.isis.schema.ixn.v1.ReturnDto;
+import org.apache.isis.schema.ixn.v1.ValueWithTypeDto;
 import org.apache.isis.schema.utils.jaxbadapters.JavaSqlTimestampXmlGregorianCalendarAdapter;
 
 public final class InteractionDtoUtils {
@@ -134,7 +134,7 @@ public final class InteractionDtoUtils {
             final String targetTitle,
             final String actionIdentifier,
             final List<ParamDto> parameterDtos,
-            final ReturnDto returnDto,
+            final ValueWithTypeDto returnDto,
             final String user) {
 
         final InteractionDto interactionDto = newInteractionDto(transactionId);
@@ -155,7 +155,7 @@ public final class InteractionDtoUtils {
             final Bookmark targetBookmark,
             final String targetTitle,
             final String propertyIdentifier,
-            final ParamDto newValueDto,
+            final ValueWithTypeDto newValueDto,
             final String user
     ) {
 
@@ -181,7 +181,9 @@ public final class InteractionDtoUtils {
             final String targetTitle,
             final String actionIdentifier,
             final List<ParamDto> parameterDtos,
-            final ReturnDto returnDto, final String user, final String transactionId) {
+            final ValueWithTypeDto returnDto,
+            final String user,
+            final String transactionId) {
 
         return (ActionInvocationDto) newInteractionExecutionDto(
                 InteractionType.ACTION_INVOCATION, transactionId, sequence,
@@ -195,7 +197,7 @@ public final class InteractionDtoUtils {
             final Bookmark targetBookmark,
             final String targetTitle,
             final String propertyIdentifier,
-            final ParamDto newValueDto,
+            final ValueWithTypeDto newValueDto,
             final String user,
             final String transactionId) {
         return (PropertyModificationDto) newInteractionExecutionDto(
@@ -213,8 +215,8 @@ public final class InteractionDtoUtils {
             final String targetTitle,
             final String memberIdentifier,
             final List<ParamDto> parameterDtos,
-            final ReturnDto returnDto,
-            final ParamDto newValueDto,
+            final ValueWithTypeDto returnDto,
+            final ValueWithTypeDto newValueDto,
             final String user) {
 
         final InteractionExecutionDto executionDto;
@@ -344,7 +346,7 @@ public final class InteractionDtoUtils {
             final ActionInvocationDto invocationDto,
             final Class<?> returnType,
             final Object result, final BookmarkService bookmarkService) {
-        final ReturnDto returnDto = returnValueFor(invocationDto);
+        final ValueWithTypeDto returnDto = returnValueFor(invocationDto);
         boolean isValueType = setValue(returnDto, returnType, result);
         if(!isValueType) {
             addReturnReference(bookmarkService.bookmarkFor(result), invocationDto);
@@ -353,19 +355,19 @@ public final class InteractionDtoUtils {
 
     // REVIEW: done in InteractionDtoServiceInternalDefault, I believe
     private static void addReturnReference(final Bookmark bookmark, final ActionInvocationDto invocationDto) {
-        final ReturnDto returnedDto = returnValueFor(invocationDto);
+        final ValueWithTypeDto returnedDto = returnValueFor(invocationDto);
         OidDto oidDto = CommonDtoUtils.asOidDto(bookmark);
         ValueDto value = new ValueDto();
         value.setReference(oidDto);
         returnedDto.setValue(value);
-        returnedDto.setReturnType(ValueType.REFERENCE);
+        returnedDto.setType(ValueType.REFERENCE);
     }
 
     // REVIEW: done in InteractionDtoServiceInternalDefault, I believe
-    private static ReturnDto returnValueFor(final ActionInvocationDto invocationDto) {
-        ReturnDto returned = invocationDto.getReturned();
+    private static ValueWithTypeDto returnValueFor(final ActionInvocationDto invocationDto) {
+        ValueWithTypeDto returned = invocationDto.getReturned();
         if(returned == null) {
-            returned = new ReturnDto();
+            returned = new ValueWithTypeDto();
             invocationDto.setReturned(returned);
         }
         return returned;
@@ -446,7 +448,7 @@ public final class InteractionDtoUtils {
     }
 
     public static boolean setValue(
-            final ReturnDto returnDto,
+            final ValueWithTypeDto returnDto,
             final Class<?> type,
             final Object val) {
         if(val == null) {
@@ -462,52 +464,52 @@ public final class InteractionDtoUtils {
     }
 
     private static boolean setValueType(
-            final ReturnDto returnDto,
+            final ValueWithTypeDto returnDto,
             final Class<?> type) {
         if(type == String.class) {
-            returnDto.setReturnType(ValueType.STRING);
+            returnDto.setType(ValueType.STRING);
         } else
         if(type == byte.class || type == Byte.class) {
-            returnDto.setReturnType(ValueType.BYTE);
+            returnDto.setType(ValueType.BYTE);
         } else
         if(type == short.class || type == Short.class) {
-            returnDto.setReturnType(ValueType.SHORT);
+            returnDto.setType(ValueType.SHORT);
         }else
         if(type == int.class || type == Integer.class) {
-            returnDto.setReturnType(ValueType.INT);
+            returnDto.setType(ValueType.INT);
         }else
         if(type == long.class || type == Long.class) {
-            returnDto.setReturnType(ValueType.LONG);
+            returnDto.setType(ValueType.LONG);
         }else
         if(type == char.class || type == Character.class) {
-            returnDto.setReturnType(ValueType.CHAR);
+            returnDto.setType(ValueType.CHAR);
         }else
         if(type == boolean.class || type == Boolean.class) {
-            returnDto.setReturnType(ValueType.BOOLEAN);
+            returnDto.setType(ValueType.BOOLEAN);
         }else
         if(type == float.class || type == Float.class) {
-            returnDto.setReturnType(ValueType.FLOAT);
+            returnDto.setType(ValueType.FLOAT);
         }else
         if(type == double.class || type == Double.class) {
-            returnDto.setReturnType(ValueType.DOUBLE);
+            returnDto.setType(ValueType.DOUBLE);
         }else
         if(type == BigInteger.class) {
-            returnDto.setReturnType(ValueType.BIG_INTEGER);
+            returnDto.setType(ValueType.BIG_INTEGER);
         }else
         if(type == BigDecimal.class) {
-            returnDto.setReturnType(ValueType.BIG_DECIMAL);
+            returnDto.setType(ValueType.BIG_DECIMAL);
         }else
         if(type == DateTime.class) {
-            returnDto.setReturnType(ValueType.JODA_DATE_TIME);
+            returnDto.setType(ValueType.JODA_DATE_TIME);
         }else
         if(type == LocalDateTime.class) {
-            returnDto.setReturnType(ValueType.JODA_LOCAL_DATE_TIME);
+            returnDto.setType(ValueType.JODA_LOCAL_DATE_TIME);
         }else
         if(type == LocalDate.class) {
-            returnDto.setReturnType(ValueType.JODA_LOCAL_DATE);
+            returnDto.setType(ValueType.JODA_LOCAL_DATE);
         }else
         if(type == LocalTime.class) {
-            returnDto.setReturnType(ValueType.JODA_LOCAL_TIME);
+            returnDto.setType(ValueType.JODA_LOCAL_TIME);
         }else
         {
             // none of the supported value types

http://git-wip-us.apache.org/repos/asf/isis/blob/362350c0/core/applib/src/test/java/org/apache/isis/schema/utils/Roundtrip.java
----------------------------------------------------------------------
diff --git a/core/applib/src/test/java/org/apache/isis/schema/utils/Roundtrip.java b/core/applib/src/test/java/org/apache/isis/schema/utils/Roundtrip.java
index 1a81c2f..91c8a2b 100644
--- a/core/applib/src/test/java/org/apache/isis/schema/utils/Roundtrip.java
+++ b/core/applib/src/test/java/org/apache/isis/schema/utils/Roundtrip.java
@@ -38,7 +38,7 @@ import org.apache.isis.schema.common.v1.OidDto;
 import org.apache.isis.schema.common.v1.ValueType;
 import org.apache.isis.schema.ixn.v1.ActionInvocationDto;
 import org.apache.isis.schema.ixn.v1.InteractionDto;
-import org.apache.isis.schema.ixn.v1.ReturnDto;
+import org.apache.isis.schema.ixn.v1.ValueWithTypeDto;
 
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.nullValue;
@@ -55,8 +55,8 @@ public class Roundtrip {
         final Timestamp startedAt = new Timestamp(new Date().getTime());
         final Timestamp completedAt = new Timestamp(startedAt.getTime() + 1000);
 
-        final ReturnDto returnDto = new ReturnDto();
-        returnDto.setReturnType(ValueType.BOOLEAN);
+        final ValueWithTypeDto returnDto = new ValueWithTypeDto();
+        returnDto.setType(ValueType.BOOLEAN);
         returnDto.setNull(true);
 
         final InteractionDto interactionDto = InteractionDtoUtils.newInteractionDtoWithActionInvocation(

http://git-wip-us.apache.org/repos/asf/isis/blob/362350c0/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
index 04fb7fe..85b1830 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
@@ -43,7 +43,7 @@ import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.schema.cmd.v1.ActionDto;
 import org.apache.isis.schema.ixn.v1.ActionInvocationDto;
 import org.apache.isis.schema.ixn.v1.PropertyModificationDto;
-import org.apache.isis.schema.ixn.v1.ReturnDto;
+import org.apache.isis.schema.ixn.v1.ValueWithTypeDto;
 import org.apache.isis.schema.utils.InteractionDtoUtils;
 
 @DomainService(nature = NatureOfService.DOMAIN)
@@ -81,7 +81,7 @@ public class InteractionDtoServiceInternalDefault implements InteractionDtoServi
         final Class<?> returnType = returnSpec.getCorrespondingClass();
         final Object resultPojo = resultAdapter != null? resultAdapter.getObject(): null;
 
-        final ReturnDto returnDto = new ReturnDto();
+        final ValueWithTypeDto returnDto = new ValueWithTypeDto();
         InteractionDtoUtils.setValue(returnDto, returnType, resultPojo);
 
         final String transactionIdStr = transactionId.toString();

http://git-wip-us.apache.org/repos/asf/isis/blob/362350c0/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd
----------------------------------------------------------------------
diff --git a/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd b/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd
index 116d9ab..071365b 100644
--- a/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd
+++ b/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd
@@ -145,7 +145,7 @@
                             </xs:sequence>
                         </xs:complexType>
                     </xs:element>
-                    <xs:element name="returned" type="returnDto" minOccurs="0" maxOccurs="1">
+                    <xs:element name="returned" type="valueWithTypeDto" minOccurs="0" maxOccurs="1">
                         <xs:annotation>
                             <xs:documentation>The value returned by this action (including the type of that returned value).  Either the 'returned' or the 'threw' element (from 'memberInteractionDto') will be populated.
                             </xs:documentation>
@@ -160,21 +160,21 @@
         <xs:complexContent>
             <xs:extension base="interactionExecutionDto">
                 <xs:sequence>
-                    <xs:element name="newValue" type="cmd:paramDto"/>
+                    <xs:element name="newValue" type="valueWithTypeDto"/>
                 </xs:sequence>
             </xs:extension>
         </xs:complexContent>
     </xs:complexType>
 
-    <xs:complexType name="returnDto">
+    <xs:complexType name="valueWithTypeDto">
         <xs:annotation>
-            <xs:documentation>Captures both the value returned of an action, and also the type of that returned value.
+            <xs:documentation>Captures both a value and its corresponding type.  Used for the return value of action invocations, and for the new value in property modifications.
             </xs:documentation>
         </xs:annotation>
         <xs:sequence>
             <xs:element name="value" type="common:valueDto"/>
         </xs:sequence>
-        <xs:attribute name="returnType" use="required" type="common:valueType"/>
+        <xs:attribute name="type" use="required" type="common:valueType"/>
         <xs:attribute name="null" use="optional" type="xs:boolean"/>
     </xs:complexType>
 


[2/8] isis git commit: ISIS-1389: simplifying code of ActionInvocationFacet by inlining, improving error handling, only broadcast events once an InteractionContext.currentExecution is defined.

Posted by da...@apache.org.
ISIS-1389: simplifying code of ActionInvocationFacet by inlining, improving error handling, only broadcast events once an InteractionContext.currentExecution is defined.


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

Branch: refs/heads/ISIS-1291
Commit: 82a0dab74aec6afea8859b2488aefeb434dda453
Parents: 362350c
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue May 3 20:33:37 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Tue May 3 20:33:37 2016 +0100

----------------------------------------------------------------------
 ...onInvocationFacetForDomainEventAbstract.java | 231 +++++++------------
 1 file changed, 78 insertions(+), 153 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/82a0dab7/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 77fbcc9..cc72d27 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
@@ -152,50 +152,12 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
     }
 
 
-    /**
-     * Introduced to disambiguate the meaning of <tt>null</tt> as a return value of
-     * {@link ActionInvocationFacet#invoke(ObjectAction, ObjectAdapter, ObjectAdapter, ObjectAdapter[], InteractionInitiatedBy)}
-     */
-    public static class InvocationResult {
-
-        public static InvocationResult forActionThatReturned(final ObjectAdapter resultAdapter) {
-            return new InvocationResult(true, resultAdapter);
-        }
-
-        public static InvocationResult forActionNotInvoked() {
-            return new InvocationResult(false, null);
-        }
-
-        private final boolean whetherInvoked;
-        private final ObjectAdapter adapter;
-
-        private InvocationResult(final boolean whetherInvoked, final ObjectAdapter result) {
-            this.whetherInvoked = whetherInvoked;
-            this.adapter = result;
-        }
-
-        public boolean getWhetherInvoked() {
-            return whetherInvoked;
-        }
-
-        /**
-         * Returns the result, or null if either the action invocation returned null or
-         * if the action was never invoked in the first place.
-         *
-         * <p>
-         * Use {@link #getWhetherInvoked()} to distinguish between these two cases.
-         */
-        public ObjectAdapter getAdapter() {
-            return adapter;
-        }
-    }
-
     @Override
     public ObjectAdapter invoke(
             final ObjectAction owningAction,
             final ObjectAdapter targetAdapter,
             final ObjectAdapter mixedInAdapter,
-            final ObjectAdapter[] arguments,
+            final ObjectAdapter[] argumentAdapters,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         // similar code in PropertySetterOrClearFacetFDEA
@@ -203,105 +165,8 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
         final CommandContext commandContext = getCommandContext();
         final Command command = commandContext.getCommand();
 
-        // ... post the executing event
-        final ActionDomainEvent<?> event =
-                domainEventHelper.postEventForAction(
-                        AbstractDomainEvent.Phase.EXECUTING,
-                        eventType, null,
-                        owningAction, owningAction, targetAdapter, mixedInAdapter, arguments,
-                        command,
-                        null);
-
-        final InvocationResult invocationResult = invokeInternal(owningAction, targetAdapter, arguments);
-        final ObjectAdapter invocationResultAdapter = invocationResult.getAdapter();
-
-        // ... post the executed event
-        if (invocationResult.getWhetherInvoked()) {
-            // perhaps the Action was not properly invoked (i.e. an exception was raised).
-            // If invoked ok, then post to the event bus
-            domainEventHelper.postEventForAction(
-                    AbstractDomainEvent.Phase.EXECUTED,
-                    eventType, verify(event),
-                    owningAction, owningAction, targetAdapter, mixedInAdapter, arguments,
-                    command,
-                    invocationResultAdapter);
-        }
+        owningAction.setupCommand(targetAdapter, argumentAdapters);
 
-        if (invocationResultAdapter == null) {
-            return null;
-        }
-
-        return filteredIfRequired(invocationResultAdapter, interactionInitiatedBy);
-    }
-
-    private InvocationResult invokeInternal(
-            final ObjectAction owningAction,
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter[] argumentAdapters) {
-
-        // similar code in PropertySetterOrClearFacetFDEA
-
-        try {
-            owningAction.setupActionInvocationContext(targetAdapter);
-            owningAction.setupCommand(targetAdapter, argumentAdapters);
-
-            ObjectAdapter resultAdapter = invokeThruCommand(owningAction, targetAdapter, argumentAdapters);
-
-            return InvocationResult.forActionThatReturned(resultAdapter);
-
-        } catch (final IllegalArgumentException e) {
-            throw e;
-        } catch (final InvocationTargetException e) {
-            final Throwable targetException = e.getTargetException();
-            if (targetException instanceof IllegalStateException) {
-                throw new ReflectiveActionException( String.format(
-                        "IllegalStateException thrown while executing %s %s",
-                        method, targetException.getMessage()), targetException);
-            }
-            if(targetException instanceof RecoverableException) {
-                if (!getTransactionState().canCommit()) {
-                    // something severe has happened to the underlying transaction;
-                    // so escalate this exception to be non-recoverable
-                    final Throwable targetExceptionCause = targetException.getCause();
-                    Throwable nonRecoverableCause = targetExceptionCause != null? targetExceptionCause: targetException;
-
-                    // trim to first 300 chars
-                    final String message = trim(nonRecoverableCause.getMessage(), 300);
-
-                    throw new NonRecoverableException(message, nonRecoverableCause);
-                }
-            }
-
-            ThrowableExtensions.throwWithinIsisException(e, "Exception executing " + method);
-
-            // Action was not invoked (an Exception was thrown)
-            return InvocationResult.forActionNotInvoked();
-
-        } catch (final IllegalAccessException e) {
-            throw new ReflectiveActionException("Illegal access of " + method, e);
-        }
-    }
-
-    private static String trim(String message, final int maxLen) {
-        if(!Strings.isNullOrEmpty(message)) {
-            message = message.substring(0, Math.min(message.length(), maxLen));
-            if(message.length() == maxLen) {
-                message += " ...";
-            }
-        }
-        return message;
-    }
-
-    protected ObjectAdapter invokeThruCommand(
-            final ObjectAction owningAction,
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter[] argumentAdapters)
-            throws IllegalAccessException, InvocationTargetException {
-
-        // similar code in PropertySetterOrClearFacetFDEA
-
-        final CommandContext commandContext = getCommandContext();
-        final Command command = commandContext.getCommand();
 
         final InteractionContext interactionContext = getInteractionContext();
         final Interaction interaction = interactionContext.getInteraction();
@@ -326,45 +191,87 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
         } else {
 
             // otherwise, go ahead and execute action in the 'foreground'
+            owningAction.setupActionInvocationContext(targetAdapter);
 
-            final Object target = ObjectAdapter.Util.unwrap(targetAdapter);
-            final List<Object> arguments = ObjectAdapter.Util.unwrap(Arrays.asList(argumentAdapters));
+            final Object targetPojo = ObjectAdapter.Util.unwrap(targetAdapter);
+            final List<Object> argumentPojos = ObjectAdapter.Util.unwrap(Arrays.asList(argumentAdapters));
 
-            final Interaction.ActionArgs actionArgs = new Interaction.ActionArgs(actionId, target, arguments);
+            final Interaction.ActionArgs actionArgs = new Interaction.ActionArgs(actionId, targetPojo, argumentPojos);
             final Interaction.MemberCallable callable = new Interaction.MemberCallable<Interaction.ActionArgs>() {
+
                 @Override
                 public Object call(
                         final Interaction.Execution currentExecution,
                         final Interaction.ActionArgs actionArgs) {
 
                     try {
-                        final Object resultPojo = invokeMethodElseFromCache(targetAdapter, argumentAdapters);
+                        // ... post the executing event
+                        final ActionDomainEvent<?> event =
+                                domainEventHelper.postEventForAction(
+                                        AbstractDomainEvent.Phase.EXECUTING,
+                                        eventType, null,
+                                        owningAction, owningAction,
+                                        targetAdapter, mixedInAdapter, argumentAdapters,
+                                        command,
+                                        null);
 
-                        if (LOG.isDebugEnabled()) {
-                            LOG.debug(" action result " + resultPojo);
-                        }
 
-                        ObjectAdapter resultAdapter = cloneIfViewModelCloneable(resultPojo, targetAdapter);
+                        final Object resultPojo = invokeMethodElseFromCache(targetAdapter, argumentAdapters);
+
+                        final ObjectAdapter resultAdapterPossiblyCloned = cloneIfViewModelCloneable(resultPojo, targetAdapter);
 
-                        // update the current execution
+                        // update the current execution with the DTO (memento)
                         final List<ObjectAdapter> parameterAdapters = Arrays.asList(argumentAdapters);
                         final ActionInvocationDto invocationDto =
                                 getInteractionDtoServiceInternal().asActionInvocationDto(
-                                    owningAction, targetAdapter, parameterAdapters, resultAdapter);
+                                        owningAction, targetAdapter, parameterAdapters, resultAdapterPossiblyCloned);
 
                         currentExecution.setDto(invocationDto);
 
-                        return resultAdapter != null ? resultAdapter.getObject() : null;
+                        // ... post the executed event
+                        domainEventHelper.postEventForAction(
+                                AbstractDomainEvent.Phase.EXECUTED,
+                                eventType, verify(event),
+                                owningAction, owningAction, targetAdapter, mixedInAdapter, argumentAdapters,
+                                command,
+                                resultAdapterPossiblyCloned);
+
+                        return ObjectAdapter.Util.unwrap(resultAdapterPossiblyCloned);
+
+                    } catch (IllegalAccessException ex) {
+                        throw new ReflectiveActionException("Illegal access of " + method, ex);
+                    } catch (InvocationTargetException ex) {
+
+                        final Throwable targetException = ex.getTargetException();
+                        if (targetException instanceof IllegalStateException) {
+                            throw new ReflectiveActionException( String.format(
+                                    "IllegalStateException thrown while executing %s %s",
+                                    method, targetException.getMessage()), targetException);
+                        }
+
+                        if(targetException instanceof RecoverableException) {
+                            if (!getTransactionState().canCommit()) {
+                                // something severe has happened to the underlying transaction;
+                                // so escalate this exception to be non-recoverable
+                                final Throwable targetExceptionCause = targetException.getCause();
+                                Throwable nonRecoverableCause = targetExceptionCause != null
+                                        ? targetExceptionCause
+                                        : targetException;
 
-                    } catch (InvocationTargetException | IllegalAccessException e) {
-                        throw new RuntimeException(e);
+                                // trim to first 300 chars
+                                final String message = trim(nonRecoverableCause.getMessage(), 300);
+
+                                throw new NonRecoverableException(message, nonRecoverableCause);
+                            }
+                        }
+
+                        ThrowableExtensions.throwWithinIsisException(ex, "Exception executing " + method);
+                        return null; // never executed, previous line throws
                     }
                 }
             };
 
-
             interaction.execute(callable, actionArgs, getClockService(), command);
-
             final Interaction.Execution priorExecution = interaction.getPriorExecution();
 
             final RuntimeException executionExceptionIfAny = priorExecution.getThrew();
@@ -373,6 +280,9 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
             }
 
             resultAdapter = getAdapterManager().adapterFor(priorExecution.getReturned());
+
+
+            // update Command (if required)
             setCommandResultIfEntity(command, resultAdapter);
 
             final PublishedActionFacet publishedActionFacet = getIdentified().getFacet(PublishedActionFacet.class);
@@ -387,9 +297,20 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
                         targetAdapter, parameterAdapters,
                         resultAdapter);
             }
+        }
+
+
+        return filteredIfRequired(resultAdapter, interactionInitiatedBy);
+    }
 
+    private static String trim(String message, final int maxLen) {
+        if(!Strings.isNullOrEmpty(message)) {
+            message = message.substring(0, Math.min(message.length(), maxLen));
+            if(message.length() == maxLen) {
+                message += " ...";
+            }
         }
-        return resultAdapter;
+        return message;
     }
 
     protected Object invokeMethodElseFromCache(
@@ -504,6 +425,10 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
             final ObjectAdapter resultAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
+        if (resultAdapter == null) {
+            return null;
+        }
+
         final boolean filterForVisibility = getConfiguration().getBoolean("isis.reflector.facet.filterVisibility", true);
         if (!filterForVisibility) {
             return resultAdapter;


[4/8] isis git commit: ISIS-1389: removing differences between Dtos and Interaction: collapsing MemberArgs and Interaction.

Posted by da...@apache.org.
ISIS-1389: removing differences between Dtos and Interaction: collapsing MemberArgs and Interaction.


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

Branch: refs/heads/ISIS-1291
Commit: 501fcb827a1b1f0a880cb30a7e5f152425b00d78
Parents: 2249764
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed May 4 00:17:07 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed May 4 00:17:20 2016 +0100

----------------------------------------------------------------------
 .../isis/applib/services/iactn/Interaction.java | 296 +++++++++----------
 .../isis/schema/utils/InteractionDtoUtils.java  |   9 +-
 ...onInvocationFacetForDomainEventAbstract.java |  63 ++--
 ...etterOrClearFacetForDomainEventAbstract.java |  50 +++-
 .../ixn/InteractionDtoServiceInternal.java      |  12 +-
 .../background/BackgroundCommandExecution.java  |   4 +-
 .../InteractionDtoServiceInternalDefault.java   |  31 +-
 7 files changed, 256 insertions(+), 209 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/501fcb82/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 7cdd78d..3479eaf 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
@@ -35,10 +35,15 @@ import org.apache.isis.applib.services.HasTransactionId;
 import org.apache.isis.applib.services.clock.ClockService;
 import org.apache.isis.applib.services.command.Command;
 import org.apache.isis.applib.services.eventbus.AbstractDomainEvent;
+import org.apache.isis.applib.services.eventbus.ActionDomainEvent;
 import org.apache.isis.applib.services.eventbus.EventBusService;
+import org.apache.isis.applib.services.eventbus.PropertyDomainEvent;
 import org.apache.isis.applib.services.wrapper.WrapperFactory;
+import org.apache.isis.schema.common.v1.InteractionType;
 import org.apache.isis.schema.common.v1.PeriodDto;
+import org.apache.isis.schema.ixn.v1.ActionInvocationDto;
 import org.apache.isis.schema.ixn.v1.InteractionExecutionDto;
+import org.apache.isis.schema.ixn.v1.PropertyModificationDto;
 import org.apache.isis.schema.utils.jaxbadapters.JavaSqlTimestampXmlGregorianCalendarAdapter;
 
 /**
@@ -100,104 +105,41 @@ public class Interaction implements HasTransactionId {
      * by which the framework actually performs the interaction.
      * @param <T>
      */
-    public interface MemberCallable<T extends MemberArgs> {
-        Object call(final Execution currentExecution, final T args);
+    public interface MemberExecutor<T extends Execution> {
+        Object execute(final T currentExecution);
     }
 
-    public static abstract class MemberArgs {
 
-        private final String memberId;
-
-        enum Type {
-            PROPERTY,
-            ACTION
-        }
-
-        private final Object target;
-        private final Type type;
-
-        protected MemberArgs(
-                final Type type,
-                final String memberId,
-                final Object target) {
-            this.memberId = memberId;
-            this.target = target;
-            this.type = type;
-        }
-
-        public String getMemberId() {
-            return memberId;
-        }
-
-        public Object getTarget() {
-            return target;
-        }
-
-        public Type getType() {
-            return type;
-        }
-    }
-
-
-    public static class ActionArgs extends MemberArgs {
-        private final List<Object> args;
-
-        public ActionArgs(
-                final String actionId,
-                final Object target,
-                final List<Object> args) {
-            super(Type.ACTION, actionId, target);
-            this.args = args;
-        }
 
-        public List<Object> getArgs() {
-            return args;
-        }
-    }
-
-    public static class PropertyArgs extends MemberArgs {
-        private final Object argValue;
-
-        public PropertyArgs(
-                final String propertyId, final Object target,
-                final Object argValue) {
-            super(Type.PROPERTY, propertyId, target);
-            this.argValue = argValue;
-        }
-
-        public Object getArgValue() {
-            return argValue;
-        }
-    }
-
-    public <T> T execute(
-            final MemberCallable memberCallable,
-            final ActionArgs actionArgs,
+    public Object execute(
+            final MemberExecutor<ActionInvocation> memberExecutor,
+            final ActionInvocation actionInvocation,
             final ClockService clockService,
             final Command command) {
 
-        final Execution execution = push(actionArgs, clockService, command);
+        pushAndUpdateCommand(actionInvocation, clockService, command);
 
-        return execute(memberCallable, actionArgs, clockService, execution);
+        return execute(memberExecutor, actionInvocation, clockService);
     }
 
-    public <T> T execute(
-            final MemberCallable memberCallable,
-            final PropertyArgs propertyArgs,
+    public Object execute(
+            final MemberExecutor<PropertyModification> memberExecutor,
+            final PropertyModification propertyModification,
             final ClockService clockService,
             final Command command) {
 
-        final Execution execution = push(propertyArgs, clockService, command);
-        return execute(memberCallable, propertyArgs, clockService, execution);
+        pushAndUpdateCommand(propertyModification, clockService, command);
+        return execute(memberExecutor, propertyModification, clockService);
     }
 
 
-    private Execution push(
-            final MemberArgs memberArgs,
+    private Execution pushAndUpdateCommand(
+            final Execution execution,
             final ClockService clockService,
             final Command command) {
+
         final Timestamp startedAt = clockService.nowAsJavaSqlTimestamp();
-        final Execution execution = push(startedAt, memberArgs);
+        push(startedAt, execution);
 
         if(command.getStartedAt() == null) {
             command.setStartedAt(startedAt);
@@ -206,29 +148,27 @@ public class Interaction implements HasTransactionId {
     }
 
 
-    private <T> T execute(
-            final MemberCallable memberCallable,
-            final MemberArgs memberArgs,
-            final ClockService clockService,
-            final Execution currentExecution) {
+    private <T extends Execution> Object execute(
+            final MemberExecutor<T> memberExecutor,
+            final T execution,
+            final ClockService clockService) {
 
         // as a convenience, since in all cases we want the command to start when the first interaction executes,
         // we populate the command here.
 
         try {
             try {
-                Object result = memberCallable.call(currentExecution, memberArgs);
-                currentExecution.setReturned(result);
-                return (T)result;
-            } catch (Exception e) {
+                Object result = memberExecutor.execute(execution);
+                execution.setReturned(result);
+                return result;
+            } catch (Exception ex) {
 
                 // just because an exception has thrown, does not mean it is that significant; it could be that
                 // it is recognized by an ExceptionRecognizer and is not severe, eg unique index violation in the DB.
-                RuntimeException re = e instanceof RuntimeException? (RuntimeException) e : new RuntimeException(e);
-                currentExecution.setThrew(re);
+                currentExecution.setThrew(ex);
 
                 // propagate (as in previous design); caller will need to trap and decide
-                throw re;
+                throw ex;
             }
         } finally {
             final Timestamp completedAt = clockService.nowAsJavaSqlTimestamp();
@@ -261,23 +201,23 @@ public class Interaction implements HasTransactionId {
      * </p>
      */
     @Programmatic
-    Execution push(final Timestamp startedAt, final MemberArgs memberArgs) {
+    private Execution push(final Timestamp startedAt, final Execution execution) {
 
-        final Execution newExecution;
         if(currentExecution == null) {
             // new top-level execution
-            newExecution = new Execution(memberArgs, startedAt);
-            executionGraphs.add(newExecution);
+            executionGraphs.add(execution);
 
         } else {
             // adds to graph of parent
-            newExecution = new Execution(memberArgs, startedAt, currentExecution);
+            execution.setParent(currentExecution);
         }
 
-        // set
-        moveCurrentTo(newExecution);
+        execution.setStartedAt(startedAt);
 
-        return currentExecution;
+        // update this.currentExecution and this.previousExecution
+        moveCurrentTo(execution);
+
+        return execution;
     }
 
     /**
@@ -290,9 +230,9 @@ public class Interaction implements HasTransactionId {
      * @param completedAt
      */
     @Programmatic
-    Execution pop(final Timestamp completedAt) {
+    private Execution pop(final Timestamp completedAt) {
         if(currentExecution == null) {
-            throw new IllegalStateException("No current execution graph to pop");
+            throw new IllegalStateException("No current execution to pop");
         }
         final Execution popped = currentExecution;
         popped.setCompletedAt(completedAt);
@@ -307,8 +247,7 @@ public class Interaction implements HasTransactionId {
     }
 
     /**
-     * Returns a (list of) graph(es) indicating the domain events in the order that they were
-     * {@link #push(Timestamp, MemberArgs pushed}.
+     * Returns a (list of) graph(es) indicating the domain events in the order that they were pushed.
      *
      * <p>
      *     Each {@link Execution} represents a call stack of domain events (action invocations or property edits),
@@ -325,7 +264,7 @@ public class Interaction implements HasTransactionId {
     /**
      * <b>NOT API</b>: intended to be called only by the framework.
      *
-     * Clears the set of {@link AbstractDomainEvent}s that have been {@link #push(Timestamp, MemberArgs push)}ed.
+     * Clears the set of {@link Execution}s that may have been {@link #push(Timestamp, Execution)}ed.
      */
     @Programmatic
     public void clear() {
@@ -376,40 +315,59 @@ public class Interaction implements HasTransactionId {
      * Represents an action invocation/property edit as a node in a call-stack execution graph, with sub-interactions
      * being made by way of the {@link WrapperFactory}).
      */
-    public static class Execution {
+    public static class Execution<T extends InteractionExecutionDto, E extends AbstractDomainEvent<?>> {
 
         //region > fields, constructor
-        private final Timestamp startedAt;
-        private final MemberArgs memberArgs;
-        private final Execution parent;
-        private final List<Execution> children = Lists.newArrayList();
+
+        private final String memberId;
+        private final Object target;
+        private final InteractionType interactionType;
 
         public Execution(
-                final MemberArgs memberArgs, final Timestamp startedAt) {
-            this.startedAt = startedAt;
-            this.memberArgs = memberArgs;
-            this.parent = null;
+                final InteractionType interactionType,
+                final String memberId,
+                final Object target) {
+            this.interactionType = interactionType;
+            this.memberId = memberId;
+            this.target = target;
         }
+        //endregion
 
-        public Execution(
-                final MemberArgs memberArgs, final Timestamp startedAt, final Execution parent) {
-            this.startedAt = startedAt;
-            this.parent = parent;
-            this.memberArgs = memberArgs;
-            parent.children.add(this);
+        //region > via constructor: interactionType, memberId, target
+
+        public InteractionType getInteractionType() {
+            return interactionType;
+        }
+
+        public String getMemberId() {
+            return memberId;
         }
+
+        public Object getTarget() {
+            return target;
+        }
+
         //endregion
 
-        //region > parent
+        //region > parent, children
+
+        private final List<Execution> children = Lists.newArrayList();
+        private Execution parent;
+
         /**
          * The action/property that invoked this action/property edit (if any).
          */
         public Execution getParent() {
             return parent;
         }
-        //endregion
 
-        //region > children
+        public void setParent(final Execution parent) {
+            this.parent = parent;
+            if(parent != null) {
+                parent.children.add(this);
+            }
+        }
+
         /**
          * The actions/property edits made in turn via the {@link WrapperFactory}.
          */
@@ -418,33 +376,36 @@ public class Interaction implements HasTransactionId {
         }
         //endregion
 
-        //region > memberArgs
-        public MemberArgs getMemberArgs() {
-            return memberArgs;
-        }
-        //endregion
 
         //region > event
 
-        private AbstractDomainEvent<?> event;
+        private E event;
         /**
          * The domain event fired on the {@link EventBusService event bus} representing the execution of
          * this action invocation/property edit.
+         *
+         * <p>
+         *     This event field is called by the framework before the action invocation/property edit itself;
+         *     if read by the executing action/property edit method it will be in the
+         *     {@link AbstractDomainEvent.Phase#EXECUTING executing} phase.
+         * </p>
          */
-        public AbstractDomainEvent<?> getEvent() {
+        public E getEvent() {
             return event;
         }
 
         /**
          * <b>NOT API</b>: intended to be called only by the framework.
          */
-        public void setEvent(final AbstractDomainEvent<?> event) {
+        public void setEvent(final E event) {
             this.event = event;
         }
         //endregion
 
-        //region > startedAt
+        //region > startedAt, completedAt
 
+        private Timestamp startedAt;
+        private Timestamp completedAt;
 
         /**
          * The date/time at which this execution started.
@@ -453,12 +414,11 @@ public class Interaction implements HasTransactionId {
             return startedAt;
         }
 
+        public void setStartedAt(final Timestamp startedAt) {
+            this.startedAt = startedAt;
+            syncMetrics();
+        }
 
-        //endregion
-
-        //region > completedAt
-
-        private Timestamp completedAt;
 
         /**
          * The date/time at which this execution completed.
@@ -470,14 +430,14 @@ public class Interaction implements HasTransactionId {
         /**
          * <b>NOT API</b>: intended to be called only by the framework.
          */
-        void setCompletedAt(Timestamp completedAt) {
+        void setCompletedAt(final Timestamp completedAt) {
             this.completedAt = completedAt;
             syncMetrics();
         }
 
         //endregion
 
-        //region > returned (property)
+        //region > returned, threw (properties)
 
         private Object returned;
         /**
@@ -502,20 +462,16 @@ public class Interaction implements HasTransactionId {
             this.returned = returned;
         }
 
-        //endregion
-
-        //region > threw (property)
-
-        private RuntimeException threw;
+        private Exception threw;
         @Programmatic
-        public RuntimeException getThrew() {
+        public Exception getThrew() {
             return threw;
         }
 
         /**
          * <b>NOT API</b>: intended to be called only by the framework.
          */
-        public void setThrew(RuntimeException threw) {
+        public void setThrew(Exception threw) {
             this.threw = threw;
         }
 
@@ -524,16 +480,25 @@ public class Interaction implements HasTransactionId {
 
         //region > dto (property)
 
-        private InteractionExecutionDto dto;
+        private T dto;
 
-        public InteractionExecutionDto getDto() {
+        /**
+         * A serializable representation of this action invocation/property edit.
+         *
+         * <p>
+         *     This <i>will</i> be populated (by the framework) during the method call itself (representing the
+         *     action invocation/property edit), though some fields ({@link Execution#getCompletedAt()},
+         *     {@link Execution#getReturned()}) will (obviously) still be null.
+         * </p>
+         */
+        public T getDto() {
             return dto;
         }
 
         /**
-         * Set by framework (implementation of {@link MemberCallable})
+         * Set by framework (implementation of {@link MemberExecutor})
          */
-        public void setDto(final InteractionExecutionDto executionDto) {
+        public void setDto(final T executionDto) {
             this.dto = executionDto;
             syncMetrics();
         }
@@ -561,4 +526,37 @@ public class Interaction implements HasTransactionId {
 
     }
 
+    public static class ActionInvocation extends Execution<ActionInvocationDto, ActionDomainEvent<?>> {
+
+        private final List<Object> args;
+
+        public ActionInvocation(
+                final String memberId,
+                final Object target,
+                final List<Object> args) {
+            super(InteractionType.ACTION_INVOCATION, memberId, target);
+            this.args = args;
+        }
+
+        public List<Object> getArgs() {
+            return args;
+        }
+    }
+
+    public static class PropertyModification extends Execution<PropertyModificationDto, PropertyDomainEvent<?,?>> {
+
+        private final Object newValue;
+
+        public PropertyModification(
+                final String memberId,
+                final Object target,
+                final Object newValue) {
+            super(InteractionType.PROPERTY_MODIFICATION, memberId, target);
+            this.newValue = newValue;
+        }
+
+        public Object getNewValue() {
+            return newValue;
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/501fcb82/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java b/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
index 278467c..7572384 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
@@ -141,7 +141,7 @@ public final class InteractionDtoUtils {
 
         final InteractionExecutionDto executionDto = newActionInvocation(
                 sequence, targetBookmark, targetTitle,
-                actionIdentifier, parameterDtos, returnDto,
+                actionIdentifier, parameterDtos,
                 user, transactionId);
 
         addExecution(interactionDto, executionDto);
@@ -181,14 +181,13 @@ public final class InteractionDtoUtils {
             final String targetTitle,
             final String actionIdentifier,
             final List<ParamDto> parameterDtos,
-            final ValueWithTypeDto returnDto,
             final String user,
             final String transactionId) {
 
         return (ActionInvocationDto) newInteractionExecutionDto(
                 InteractionType.ACTION_INVOCATION, transactionId, sequence,
                 targetBookmark, targetTitle, actionIdentifier,
-                parameterDtos, returnDto, null,
+                parameterDtos, null,
                 user);
     }
 
@@ -203,7 +202,7 @@ public final class InteractionDtoUtils {
         return (PropertyModificationDto) newInteractionExecutionDto(
                 InteractionType.PROPERTY_MODIFICATION, transactionId, sequence,
                 targetBookmark, targetTitle, propertyIdentifier,
-                null, null, newValueDto,
+                null, newValueDto,
                 user);
     }
 
@@ -215,7 +214,6 @@ public final class InteractionDtoUtils {
             final String targetTitle,
             final String memberIdentifier,
             final List<ParamDto> parameterDtos,
-            final ValueWithTypeDto returnDto,
             final ValueWithTypeDto newValueDto,
             final String user) {
 
@@ -226,7 +224,6 @@ public final class InteractionDtoUtils {
 
             final ActionInvocationDto.Parameters parameters = invocation.getParameters();
             parameters.getParameter().addAll(parameterDtos);
-            invocation.setReturned(returnDto);
 
             executionDto = invocation;
         } else {

http://git-wip-us.apache.org/repos/asf/isis/blob/501fcb82/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 cc72d27..d89c8bc 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
@@ -173,7 +173,7 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
 
         final String actionId = owningAction.getIdentifier().toClassAndNameIdentityString();
 
-        final ObjectAdapter resultAdapter;
+        final ObjectAdapter returnedAdapter;
         if( command.getExecutor() == Command.Executor.USER &&
             command.getExecuteIn() == org.apache.isis.applib.annotation.Command.ExecuteIn.BACKGROUND) {
 
@@ -186,7 +186,7 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
                         "Unable to persist command for action '%s'; CommandService does not support persistent commands ",
                         actionId));
             }
-            resultAdapter = getAdapterManager().adapterFor(command);
+            returnedAdapter = getAdapterManager().adapterFor(command);
 
         } else {
 
@@ -194,17 +194,25 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
             owningAction.setupActionInvocationContext(targetAdapter);
 
             final Object targetPojo = ObjectAdapter.Util.unwrap(targetAdapter);
-            final List<Object> argumentPojos = ObjectAdapter.Util.unwrap(Arrays.asList(argumentAdapters));
+            final List<ObjectAdapter> argumentAdapterList = Arrays.asList(argumentAdapters);
+            final List<Object> argumentPojos = ObjectAdapter.Util.unwrap(argumentAdapterList);
 
-            final Interaction.ActionArgs actionArgs = new Interaction.ActionArgs(actionId, targetPojo, argumentPojos);
-            final Interaction.MemberCallable callable = new Interaction.MemberCallable<Interaction.ActionArgs>() {
+            final Interaction.ActionInvocation execution =
+                    new Interaction.ActionInvocation(actionId, targetPojo, argumentPojos);
+            final Interaction.MemberExecutor<Interaction.ActionInvocation> callable =
+                    new Interaction.MemberExecutor<Interaction.ActionInvocation>() {
 
                 @Override
-                public Object call(
-                        final Interaction.Execution currentExecution,
-                        final Interaction.ActionArgs actionArgs) {
+                public Object execute(final Interaction.ActionInvocation currentExecution) {
 
                     try {
+
+                        // update the current execution with the DTO (memento)
+                        final ActionInvocationDto invocationDto =
+                                getInteractionDtoServiceInternal().asActionInvocationDto(
+                                        owningAction, targetAdapter, argumentAdapterList);
+                        currentExecution.setDto(invocationDto);
+
                         // ... post the executing event
                         final ActionDomainEvent<?> event =
                                 domainEventHelper.postEventForAction(
@@ -215,18 +223,14 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
                                         command,
                                         null);
 
+                        // set event onto the execution
+                        currentExecution.setEvent(event);
 
+                        // invoke method
                         final Object resultPojo = invokeMethodElseFromCache(targetAdapter, argumentAdapters);
 
                         final ObjectAdapter resultAdapterPossiblyCloned = cloneIfViewModelCloneable(resultPojo, targetAdapter);
 
-                        // update the current execution with the DTO (memento)
-                        final List<ObjectAdapter> parameterAdapters = Arrays.asList(argumentAdapters);
-                        final ActionInvocationDto invocationDto =
-                                getInteractionDtoServiceInternal().asActionInvocationDto(
-                                        owningAction, targetAdapter, parameterAdapters, resultAdapterPossiblyCloned);
-
-                        currentExecution.setDto(invocationDto);
 
                         // ... post the executed event
                         domainEventHelper.postEventForAction(
@@ -271,19 +275,32 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
                 }
             };
 
-            interaction.execute(callable, actionArgs, getClockService(), command);
-            final Interaction.Execution priorExecution = interaction.getPriorExecution();
+            // sets up startedAt and completedAt on the execution, also manages the execution call graph
+            interaction.execute(callable, execution, getClockService(), command);
+
+            // handle any exceptions
+            final Interaction.Execution<ActionInvocationDto, ?> priorExecution = interaction.getPriorExecution();
+
+            final Exception executionExceptionIfAny = priorExecution.getThrew();
+
+            // TODO: should also sync DTO's threw here...
 
-            final RuntimeException executionExceptionIfAny = priorExecution.getThrew();
             if(executionExceptionIfAny != null) {
-                throw executionExceptionIfAny;
+                throw executionExceptionIfAny instanceof RuntimeException
+                        ? ((RuntimeException)executionExceptionIfAny)
+                        : new RuntimeException(executionExceptionIfAny);
             }
 
-            resultAdapter = getAdapterManager().adapterFor(priorExecution.getReturned());
+
+            final Object returnedPojo = priorExecution.getReturned();
+            returnedAdapter = adapterManager.adapterFor(returnedPojo);
+
+            // sync DTO with result
+            getInteractionDtoServiceInternal().updateResult(priorExecution.getDto(), owningAction, returnedPojo);
 
 
             // update Command (if required)
-            setCommandResultIfEntity(command, resultAdapter);
+            setCommandResultIfEntity(command, returnedAdapter);
 
             final PublishedActionFacet publishedActionFacet = getIdentified().getFacet(PublishedActionFacet.class);
             if (publishedActionFacet != null) {
@@ -295,12 +312,12 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
                         priorExecution,
                         owningAction, identifiedHolder,
                         targetAdapter, parameterAdapters,
-                        resultAdapter);
+                        returnedAdapter);
             }
         }
 
 
-        return filteredIfRequired(resultAdapter, interactionInitiatedBy);
+        return filteredIfRequired(returnedAdapter, interactionInitiatedBy);
     }
 
     private static String trim(String message, final int maxLen) {

http://git-wip-us.apache.org/repos/asf/isis/blob/501fcb82/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
index abe0ec8..83c8fbe 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
@@ -40,7 +40,9 @@ import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollect
 import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
 import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+import org.apache.isis.core.metamodel.services.ixn.InteractionDtoServiceInternal;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.isis.schema.ixn.v1.PropertyModificationDto;
 
 public abstract class PropertySetterOrClearFacetForDomainEventAbstract
         extends SingleValueFacetAbstract<Class<? extends PropertyDomainEvent<?,?>>> {
@@ -148,7 +150,7 @@ public abstract class PropertySetterOrClearFacetForDomainEventAbstract
 
     private void setOrClearProperty(
             final Style style,
-            final OneToOneAssociation owningAssociation,
+            final OneToOneAssociation owningProperty,
             final ObjectAdapter targetAdapter,
             final ObjectAdapter newValueAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
@@ -162,13 +164,13 @@ public abstract class PropertySetterOrClearFacetForDomainEventAbstract
         final CommandContext commandContext = getCommandContext();
         final Command command = commandContext.getCommand();
 
-        owningAssociation.setupCommand(targetAdapter, newValueAdapter);
+        owningProperty.setupCommand(targetAdapter, newValueAdapter);
 
 
         final InteractionContext interactionContext = getInteractionContext();
         final Interaction interaction = interactionContext.getInteraction();
 
-        final String propertyId = owningAssociation.getIdentifier().toClassAndNameIdentityString();
+        final String propertyId = owningProperty.getIdentifier().toClassAndNameIdentityString();
 
         if( command.getExecutor() == Command.Executor.USER &&
                 command.getExecuteIn() == org.apache.isis.applib.annotation.Command.ExecuteIn.BACKGROUND) {
@@ -185,19 +187,25 @@ public abstract class PropertySetterOrClearFacetForDomainEventAbstract
 
         } else {
 
-            // otherwise, go ahead and execute action in the 'foreground'
-
             final Object target = ObjectAdapter.Util.unwrap(targetAdapter);
             final Object argValue = ObjectAdapter.Util.unwrap(newValueAdapter);
 
-            final Interaction.PropertyArgs propertyArgs = new Interaction.PropertyArgs(propertyId, target, argValue);
-            final Interaction.MemberCallable<?> callable = new Interaction.MemberCallable<Interaction.PropertyArgs>() {
-                        @Override public Object call(
-                                final Interaction.Execution currentExecution,
-                                final Interaction.PropertyArgs propertyArgs11) {
+            final Interaction.PropertyModification execution =
+                    new Interaction.PropertyModification(propertyId, target, argValue);
+            final Interaction.MemberExecutor<Interaction.PropertyModification> executor =
+                    new Interaction.MemberExecutor<Interaction.PropertyModification>() {
+                        @Override
+                        public Object execute(final Interaction.PropertyModification currentExecution) {
 
                             try {
 
+                                // update the current execution with the DTO (memento)
+                                final PropertyModificationDto invocationDto =
+                                        getInteractionDtoServiceInternal().asPropertyModificationDto(
+                                                owningProperty, targetAdapter, newValueAdapter);
+                                currentExecution.setDto(invocationDto);
+
+
                                 // ... post the executing event
                                 final Object oldValue = getterFacet.getProperty(targetAdapter, interactionInitiatedBy);
                                 final Object newValue = ObjectAdapter.Util.unwrap(newValueAdapter);
@@ -210,10 +218,15 @@ public abstract class PropertySetterOrClearFacetForDomainEventAbstract
                                                 oldValue, newValue);
 
 
-                                style.invoke(PropertySetterOrClearFacetForDomainEventAbstract.this, owningAssociation,
+                                // set event onto the execution
+                                currentExecution.setEvent(event);
+
+                                // invoke method
+                                style.invoke(PropertySetterOrClearFacetForDomainEventAbstract.this, owningProperty,
                                         targetAdapter, newValueAdapter, interactionInitiatedBy);
 
 
+
                                 // reading the actual value from the target object, playing it safe...
                                 final Object actualNewValue = getterFacet.getProperty(targetAdapter, interactionInitiatedBy);
                                 if (!Objects.equal(oldValue, actualNewValue)) {
@@ -239,13 +252,19 @@ public abstract class PropertySetterOrClearFacetForDomainEventAbstract
                         }
                     };
 
-            interaction.execute(callable, propertyArgs, getClockService(), command);
+            // sets up startedAt and completedAt on the execution, also manages the execution call graph
+            interaction.execute(executor, execution, getClockService(), command);
 
+            // handle any exceptions
             final Interaction.Execution priorExecution = interaction.getPriorExecution();
 
-            final RuntimeException executionExceptionIfAny = priorExecution.getThrew();
+            // TODO: should also sync DTO's threw here...
+
+            final Exception executionExceptionIfAny = priorExecution.getThrew();
             if(executionExceptionIfAny != null) {
-                throw executionExceptionIfAny;
+                throw executionExceptionIfAny instanceof RuntimeException
+                        ? ((RuntimeException)executionExceptionIfAny)
+                        : new RuntimeException(executionExceptionIfAny);
             }
 
             //
@@ -270,6 +289,9 @@ public abstract class PropertySetterOrClearFacetForDomainEventAbstract
     }
 
 
+    private InteractionDtoServiceInternal getInteractionDtoServiceInternal() {
+        return lookupService(InteractionDtoServiceInternal.class);
+    }
 
     private ServicesInjector getServicesInjector() {
         return servicesInjector;

http://git-wip-us.apache.org/repos/asf/isis/blob/501fcb82/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ixn/InteractionDtoServiceInternal.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ixn/InteractionDtoServiceInternal.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ixn/InteractionDtoServiceInternal.java
index 716ba9b..80f89ae 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ixn/InteractionDtoServiceInternal.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ixn/InteractionDtoServiceInternal.java
@@ -33,10 +33,16 @@ public interface InteractionDtoServiceInternal {
     ActionInvocationDto asActionInvocationDto(
             ObjectAction objectAction,
             ObjectAdapter targetAdapter,
-            List<ObjectAdapter> parameterAdapters,
-            ObjectAdapter resultAdapter);
+            List<ObjectAdapter> argumentAdapters);
 
-    @Programmatic PropertyModificationDto asPropertyModificationDto(
+    @Programmatic
+    ActionInvocationDto updateResult(
+            ActionInvocationDto actionInvocationDto,
+            ObjectAction objectAction,
+            Object resultPojo);
+
+    @Programmatic
+    PropertyModificationDto asPropertyModificationDto(
             OneToOneAssociation property,
             ObjectAdapter targetAdapter,
             ObjectAdapter newValueAdapterIfAny);

http://git-wip-us.apache.org/repos/asf/isis/blob/501fcb82/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
index 4decd5b..923aac4 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
@@ -227,8 +227,8 @@ public abstract class BackgroundCommandExecution extends AbstractIsisSessionTemp
                     // responsibility of auditing/profiling
                     backgroundCommand.setException(Throwables.getStackTraceAsString(e));
 
-                    // alternatively, could use...
-                    RuntimeException unused = backgroundInteraction.getPriorExecution().getThrew();
+                    // alternatively, could have used ...
+                    Exception unused = backgroundInteraction.getPriorExecution().getThrew();
 
                     backgroundInteraction.getCurrentExecution().setThrew(e);
                 }

http://git-wip-us.apache.org/repos/asf/isis/blob/501fcb82/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
index 85b1830..733a252 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
@@ -54,8 +54,7 @@ public class InteractionDtoServiceInternalDefault implements InteractionDtoServi
     public ActionInvocationDto asActionInvocationDto(
             final ObjectAction objectAction,
             final ObjectAdapter targetAdapter,
-            final List<ObjectAdapter> parameterAdapters,
-            final ObjectAdapter resultAdapter) {
+            final List<ObjectAdapter> argumentAdapters) {
 
         final Command command = commandContext.getCommand();
         final UUID transactionId = command.getTransactionId();
@@ -74,15 +73,7 @@ public class InteractionDtoServiceInternalDefault implements InteractionDtoServi
 
         final ActionDto actionDto = new ActionDto();
         commandDtoServiceInternal.addActionArgs(
-                objectAction, actionDto, parameterAdapters.toArray(new ObjectAdapter[]{}));
-
-        final ObjectSpecification returnSpec = objectAction.getReturnType();
-
-        final Class<?> returnType = returnSpec.getCorrespondingClass();
-        final Object resultPojo = resultAdapter != null? resultAdapter.getObject(): null;
-
-        final ValueWithTypeDto returnDto = new ValueWithTypeDto();
-        InteractionDtoUtils.setValue(returnDto, returnType, resultPojo);
+                objectAction, actionDto, argumentAdapters.toArray(new ObjectAdapter[]{}));
 
         final String transactionIdStr = transactionId.toString();
 
@@ -90,11 +81,27 @@ public class InteractionDtoServiceInternalDefault implements InteractionDtoServi
         // InteractionDtoUtils.addReturn(invocationDto, returnType, resultPojo, bookmarkService);
         return InteractionDtoUtils.newActionInvocation(
                 nextEventSequence, targetBookmark, targetTitle,
-                actionDto.getMemberIdentifier(), actionDto.getParameters(), returnDto, currentUser,
+                actionDto.getMemberIdentifier(), actionDto.getParameters(), currentUser,
                 transactionIdStr);
     }
 
     @Override @Programmatic
+    public ActionInvocationDto updateResult(
+            final ActionInvocationDto actionInvocationDto,
+            final ObjectAction objectAction,
+            final Object resultPojo) {
+
+        final ObjectSpecification returnSpec = objectAction.getReturnType();
+
+        final Class<?> returnType = returnSpec.getCorrespondingClass();
+
+        final ValueWithTypeDto returnDto = new ValueWithTypeDto();
+        InteractionDtoUtils.setValue(returnDto, returnType, resultPojo);
+
+        return actionInvocationDto;
+    }
+
+    @Override @Programmatic
     public PropertyModificationDto asPropertyModificationDto(
             final OneToOneAssociation property,
             final ObjectAdapter targetAdapter,


[3/8] isis git commit: ISIS-1398: inlining/simplifying PropertySetterOfClearFacet so that only emit events when InteractionContext is setup.

Posted by da...@apache.org.
ISIS-1398: inlining/simplifying PropertySetterOfClearFacet so that only emit events when InteractionContext is setup.


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

Branch: refs/heads/ISIS-1291
Commit: 22497648fbc6a28a980eff46363474ad2496ee95
Parents: 82a0dab
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue May 3 20:57:37 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Tue May 3 20:57:37 2016 +0100

----------------------------------------------------------------------
 ...etterOrClearFacetForDomainEventAbstract.java | 115 +++++++++----------
 1 file changed, 54 insertions(+), 61 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/22497648/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
index c2178fa..abe0ec8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
@@ -76,10 +76,10 @@ public abstract class PropertySetterOrClearFacetForDomainEventAbstract
         this.domainEventHelper = new DomainEventHelper(servicesInjector);
     }
 
-    enum Type {
+    enum Style {
         SET {
             @Override
-            boolean meetsPrereqs(final PropertySetterOrClearFacetForDomainEventAbstract facet) {
+            boolean hasCorrespondingFacet(final PropertySetterOrClearFacetForDomainEventAbstract facet) {
                 return facet.setterFacet != null;
             }
 
@@ -97,7 +97,7 @@ public abstract class PropertySetterOrClearFacetForDomainEventAbstract
         },
         CLEAR {
             @Override
-            boolean meetsPrereqs(final PropertySetterOrClearFacetForDomainEventAbstract facet) {
+            boolean hasCorrespondingFacet(final PropertySetterOrClearFacetForDomainEventAbstract facet) {
                 return facet.clearFacet != null;
             }
 
@@ -115,7 +115,7 @@ public abstract class PropertySetterOrClearFacetForDomainEventAbstract
             }
         };
 
-        abstract boolean meetsPrereqs(final PropertySetterOrClearFacetForDomainEventAbstract facet);
+        abstract boolean hasCorrespondingFacet(final PropertySetterOrClearFacetForDomainEventAbstract facet);
 
         abstract void invoke(
                 final PropertySetterOrClearFacetForDomainEventAbstract facet,
@@ -130,7 +130,7 @@ public abstract class PropertySetterOrClearFacetForDomainEventAbstract
             final ObjectAdapter targetAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
-        setOrClearProperty(Type.CLEAR,
+        setOrClearProperty(Style.CLEAR,
                 owningProperty, targetAdapter, null, interactionInitiatedBy);
 
     }
@@ -141,13 +141,13 @@ public abstract class PropertySetterOrClearFacetForDomainEventAbstract
             final ObjectAdapter newValueAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
-        setOrClearProperty(Type.SET,
+        setOrClearProperty(Style.SET,
                 owningProperty, targetAdapter, newValueAdapter, interactionInitiatedBy);
 
     }
 
     private void setOrClearProperty(
-            final Type type,
+            final Style style,
             final OneToOneAssociation owningAssociation,
             final ObjectAdapter targetAdapter,
             final ObjectAdapter newValueAdapter,
@@ -155,66 +155,20 @@ public abstract class PropertySetterOrClearFacetForDomainEventAbstract
 
         // similar code in ActionInvocationFacetFDEA
 
-        if(!type.meetsPrereqs(this)) {
+        if(!style.hasCorrespondingFacet(this)) {
             return;
         }
 
-        // ... post the executing event
-        final Object oldValue = getterFacet.getProperty(targetAdapter, interactionInitiatedBy);
-        final Object newValue = ObjectAdapter.Util.unwrap(newValueAdapter);
-
-        final PropertyDomainEvent<?, ?> event =
-                domainEventHelper.postEventForProperty(
-                        AbstractDomainEvent.Phase.EXECUTING,
-                        eventType(), null,
-                        getIdentified(), targetAdapter,
-                        oldValue, newValue);
-
-        setPropertyInternal(type, owningAssociation, targetAdapter, newValueAdapter, interactionInitiatedBy);
-
-        // reading the actual value from the target object, playing it safe...
-        final Object actualNewValue = getterFacet.getProperty(targetAdapter, interactionInitiatedBy);
-        if (!Objects.equal(oldValue, actualNewValue)) {
-
-            // ... post the executed event
-            domainEventHelper.postEventForProperty(
-                    AbstractDomainEvent.Phase.EXECUTED,
-                    eventType(), verify(event),
-                    getIdentified(), targetAdapter,
-                    oldValue, actualNewValue);
-        }
-    }
-
-    public void setPropertyInternal(
-            final Type type,
-            final OneToOneAssociation owningProperty,
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter newValueAdapter,
-            final InteractionInitiatedBy interactionInitiatedBy) {
-
-        // similar code in ActionInvocationFacetFDEA
-
-        owningProperty.setupCommand(targetAdapter, newValueAdapter);
-
-        invokeThruCommand(type, owningProperty, targetAdapter, newValueAdapter, interactionInitiatedBy);
-    }
-
-    private void invokeThruCommand(
-            final Type type,
-            final OneToOneAssociation owningProperty,
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter valueAdapterOrNull,
-            final InteractionInitiatedBy interactionInitiatedBy) {
-
-        // similar code in ActionInvocationFacetFDEA
-
         final CommandContext commandContext = getCommandContext();
         final Command command = commandContext.getCommand();
 
+        owningAssociation.setupCommand(targetAdapter, newValueAdapter);
+
+
         final InteractionContext interactionContext = getInteractionContext();
         final Interaction interaction = interactionContext.getInteraction();
 
-        final String propertyId = owningProperty.getIdentifier().toClassAndNameIdentityString();
+        final String propertyId = owningAssociation.getIdentifier().toClassAndNameIdentityString();
 
         if( command.getExecutor() == Command.Executor.USER &&
                 command.getExecuteIn() == org.apache.isis.applib.annotation.Command.ExecuteIn.BACKGROUND) {
@@ -234,7 +188,7 @@ public abstract class PropertySetterOrClearFacetForDomainEventAbstract
             // otherwise, go ahead and execute action in the 'foreground'
 
             final Object target = ObjectAdapter.Util.unwrap(targetAdapter);
-            final Object argValue = ObjectAdapter.Util.unwrap(valueAdapterOrNull);
+            final Object argValue = ObjectAdapter.Util.unwrap(newValueAdapter);
 
             final Interaction.PropertyArgs propertyArgs = new Interaction.PropertyArgs(propertyId, target, argValue);
             final Interaction.MemberCallable<?> callable = new Interaction.MemberCallable<Interaction.PropertyArgs>() {
@@ -242,8 +196,46 @@ public abstract class PropertySetterOrClearFacetForDomainEventAbstract
                                 final Interaction.Execution currentExecution,
                                 final Interaction.PropertyArgs propertyArgs11) {
 
-                            type.invoke(PropertySetterOrClearFacetForDomainEventAbstract.this, owningProperty, targetAdapter, valueAdapterOrNull, interactionInitiatedBy);
-                            return null;
+                            try {
+
+                                // ... post the executing event
+                                final Object oldValue = getterFacet.getProperty(targetAdapter, interactionInitiatedBy);
+                                final Object newValue = ObjectAdapter.Util.unwrap(newValueAdapter);
+
+                                final PropertyDomainEvent<?, ?> event =
+                                        domainEventHelper.postEventForProperty(
+                                                AbstractDomainEvent.Phase.EXECUTING,
+                                                eventType(), null,
+                                                getIdentified(), targetAdapter,
+                                                oldValue, newValue);
+
+
+                                style.invoke(PropertySetterOrClearFacetForDomainEventAbstract.this, owningAssociation,
+                                        targetAdapter, newValueAdapter, interactionInitiatedBy);
+
+
+                                // reading the actual value from the target object, playing it safe...
+                                final Object actualNewValue = getterFacet.getProperty(targetAdapter, interactionInitiatedBy);
+                                if (!Objects.equal(oldValue, actualNewValue)) {
+
+                                    // ... post the executed event
+                                    domainEventHelper.postEventForProperty(
+                                            AbstractDomainEvent.Phase.EXECUTED,
+                                            eventType(), verify(event),
+                                            getIdentified(), targetAdapter,
+                                            oldValue, actualNewValue);
+                                }
+
+                                return null;
+
+                                //
+                                // REVIEW: the corresponding action has a whole bunch of error handling here.
+                                // we probably should do something similar...
+                                //
+
+                            } finally {
+
+                            }
                         }
                     };
 
@@ -262,6 +254,7 @@ public abstract class PropertySetterOrClearFacetForDomainEventAbstract
             // property modifications.
             //
         }
+
     }
 
     private Class<? extends PropertyDomainEvent<?, ?>> eventType() {


[8/8] isis git commit: ISIS-1291: app now running again...

Posted by da...@apache.org.
ISIS-1291: app now running again...


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

Branch: refs/heads/ISIS-1291
Commit: e85f405341fc847feae7a2ade3a165e03433e8c3
Parents: 18c6b49
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed May 4 08:11:35 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed May 4 08:11:35 2016 +0100

----------------------------------------------------------------------
 .../isis/schema/utils/CommandDtoUtils.java      | 11 +++++
 .../isis/schema/utils/InteractionDtoUtils.java  | 29 ++++++++-----
 ...ertyClearFacetForDomainEventFromDefault.java |  2 +-
 ...cetForDomainEventFromPropertyAnnotation.java |  2 +-
 ...nEventFromPropertyInteractionAnnotation.java |  2 +-
 ...tForPostsPropertyChangedEventAnnotation.java |  2 +-
 ...rtySetterFacetForDomainEventFromDefault.java |  2 +-
 ...cetForDomainEventFromPropertyAnnotation.java |  2 +-
 ...nEventFromPropertyInteractionAnnotation.java |  2 +-
 ...tForPostsPropertyChangedEventAnnotation.java |  2 +-
 ...etterOrClearFacetForDomainEventAbstract.java |  7 +---
 .../CommandDtoServiceInternalDefault.java       |  6 ++-
 .../InteractionDtoServiceInternalDefault.java   | 44 ++++++++++++++++----
 ...SqlTimestampXmlGregorianCalendarAdapter.java |  3 ++
 .../jaxbadapters/JodaDateTimeStringAdapter.java |  5 ++-
 ...JodaDateTimeXMLGregorianCalendarAdapter.java |  7 ++--
 .../JodaLocalDateStringAdapter.java             | 10 ++++-
 .../JodaLocalDateTimeStringAdapter.java         | 10 ++++-
 ...ocalDateTimeXMLGregorianCalendarAdapter.java |  8 ++--
 ...odaLocalDateXMLGregorianCalendarAdapter.java |  7 ++--
 .../JodaLocalTimeStringAdapter.java             | 10 ++++-
 ...odaLocalTimeXMLGregorianCalendarAdapter.java |  8 +++-
 22 files changed, 125 insertions(+), 56 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/e85f4053/core/applib/src/main/java/org/apache/isis/schema/utils/CommandDtoUtils.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/CommandDtoUtils.java b/core/applib/src/main/java/org/apache/isis/schema/utils/CommandDtoUtils.java
index 8e867be..bcb8529 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/CommandDtoUtils.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/CommandDtoUtils.java
@@ -33,6 +33,7 @@ import javax.xml.bind.Unmarshaller;
 
 import com.google.common.io.Resources;
 
+import org.apache.isis.schema.cmd.v1.ActionDto;
 import org.apache.isis.schema.cmd.v1.CommandDto;
 
 public final class CommandDtoUtils {
@@ -87,7 +88,17 @@ public final class CommandDtoUtils {
             throw new RuntimeException(e);
         }
     }
+
     //endregion
 
+    public static ActionDto.Parameters parametersFor(final ActionDto actionDto) {
+        ActionDto.Parameters parameters = actionDto.getParameters();
+        if(parameters == null) {
+            parameters = new ActionDto.Parameters();
+            actionDto.setParameters(parameters);
+        }
+        return parameters;
+    }
+
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/e85f4053/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java b/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
index 9a42150..da95ace 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
@@ -211,9 +211,9 @@ public final class InteractionDtoUtils {
         if(type == InteractionType.ACTION_INVOCATION) {
 
             final ActionInvocationDto invocation = new ActionInvocationDto();
-
-            final ActionInvocationDto.Parameters parameters = invocation.getParameters();
-            parameters.getParameter().addAll(parameterDtos);
+            final ActionInvocationDto.Parameters invocationParameters = parametersFor(invocation);
+            invocation.setParameters(invocationParameters);
+            invocationParameters.getParameter().addAll(parameterDtos);
 
             executionDto = invocation;
         } else {
@@ -278,12 +278,21 @@ public final class InteractionDtoUtils {
         return edit;
     }
 
-    private static List<ParamDto> parametersFor(final InteractionDto ixnDto) {
-        return parametersFor(actionInvocationFor(ixnDto));
+    private static List<ParamDto> parameterListFor(final InteractionDto ixnDto) {
+        return parameterListFor(actionInvocationFor(ixnDto));
+    }
+
+    private static ActionInvocationDto.Parameters parametersFor(final ActionInvocationDto invocationDto) {
+        ActionInvocationDto.Parameters parameters = invocationDto.getParameters();
+        if(parameters == null) {
+            parameters = new ActionInvocationDto.Parameters();
+            invocationDto.setParameters(parameters);
+        }
+        return parameters;
     }
 
-    private static List<ParamDto> parametersFor(final ActionInvocationDto invocationDto) {
-        return invocationDto.getParameters().getParameter();
+    private static List<ParamDto> parameterListFor(final ActionInvocationDto invocationDto) {
+        return parametersFor(invocationDto).getParameter();
     }
 
     private static PeriodDto timingsFor(final MemberExecutionDto executionDto) {
@@ -306,7 +315,7 @@ public final class InteractionDtoUtils {
             final Object arg,
             final BookmarkService bookmarkService) {
 
-        final List<ParamDto> params = parametersFor(interactionDto);
+        final List<ParamDto> params = parameterListFor(interactionDto);
         ParamDto paramDto = CommonDtoUtils.newParamDto(parameterName, parameterType, arg, bookmarkService);
         params.add(paramDto);
     }
@@ -332,7 +341,7 @@ public final class InteractionDtoUtils {
 
     //region > getParameters, getParameterNames, getParameterTypes
     public static List<ParamDto> getParameters(final ActionInvocationDto ai) {
-        final List<ParamDto> params = parametersFor(ai);
+        final List<ParamDto> params = parameterListFor(ai);
         final int parameterNumber = getNumberOfParameters(ai);
         final List<ParamDto> paramDtos = Lists.newArrayList();
         for (int i = 0; i < parameterNumber; i++) {
@@ -343,7 +352,7 @@ public final class InteractionDtoUtils {
     }
 
     private static int getNumberOfParameters(final ActionInvocationDto ai) {
-        final List<ParamDto> params = parametersFor(ai);
+        final List<ParamDto> params = parameterListFor(ai);
         return params != null ? params.size() : 0;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/e85f4053/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromDefault.java
index 7a1d076..8a32335 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromDefault.java
@@ -37,6 +37,6 @@ public class PropertyClearFacetForDomainEventFromDefault
             final PropertyDomainEventFacetAbstract propertyInteractionFacet,
             final FacetHolder holder,
             final ServicesInjector servicesInjector) {
-        super(eventType, getterFacet, null, clearFacet, propertyInteractionFacet, servicesInjector, holder);
+        super(PropertyClearFacet.class, eventType, getterFacet, null, clearFacet, propertyInteractionFacet, servicesInjector, holder);
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/e85f4053/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyAnnotation.java
index 3ed3617..3d19439 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyAnnotation.java
@@ -37,6 +37,6 @@ public class PropertyClearFacetForDomainEventFromPropertyAnnotation
             final PropertyDomainEventFacetAbstract propertyInteractionFacet,
             final FacetHolder holder,
             final ServicesInjector servicesInjector) {
-        super(eventType, getterFacet, null, clearFacet, propertyInteractionFacet, servicesInjector, holder);
+        super(PropertyClearFacet.class, eventType, getterFacet, null, clearFacet, propertyInteractionFacet, servicesInjector, holder);
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/e85f4053/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyInteractionAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyInteractionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyInteractionAnnotation.java
index 307256a..3b18c76 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyInteractionAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventFromPropertyInteractionAnnotation.java
@@ -41,6 +41,6 @@ public class PropertyClearFacetForDomainEventFromPropertyInteractionAnnotation
             final PropertyDomainEventFacetAbstract propertyInteractionFacet,
             final FacetHolder holder,
             final ServicesInjector servicesInjector) {
-        super(eventType, getterFacet, null, clearFacet, propertyInteractionFacet, servicesInjector, holder);
+        super(PropertyClearFacet.class, eventType, getterFacet, null, clearFacet, propertyInteractionFacet, servicesInjector, holder);
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/e85f4053/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForPostsPropertyChangedEventAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForPostsPropertyChangedEventAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForPostsPropertyChangedEventAnnotation.java
index 2fc86b9..0138d9b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForPostsPropertyChangedEventAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForPostsPropertyChangedEventAnnotation.java
@@ -41,7 +41,7 @@ public class PropertyClearFacetForPostsPropertyChangedEventAnnotation
             final PropertyDomainEventFacetAbstract propertyInteractionFacet,
             final FacetHolder holder,
             final ServicesInjector servicesInjector) {
-        super(eventType, getterFacet, null, clearFacet, propertyInteractionFacet, servicesInjector, holder);
+        super(PropertyClearFacet.class, eventType, getterFacet, null, clearFacet, propertyInteractionFacet, servicesInjector, holder);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/e85f4053/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromDefault.java
index 396bcdf..796186c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromDefault.java
@@ -37,7 +37,7 @@ public class PropertySetterFacetForDomainEventFromDefault
             final PropertyDomainEventFacetAbstract propertyInteractionFacet,
             final FacetHolder holder,
             final ServicesInjector servicesInjector) {
-        super(eventType, getterFacet, setterFacet, null, propertyInteractionFacet, servicesInjector, holder);
+        super(PropertySetterFacet.class, eventType, getterFacet, setterFacet, null, propertyInteractionFacet, servicesInjector, holder);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/e85f4053/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyAnnotation.java
index f3e4217..deb059d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyAnnotation.java
@@ -37,6 +37,6 @@ public class PropertySetterFacetForDomainEventFromPropertyAnnotation
             final PropertyDomainEventFacetAbstract propertyInteractionFacet,
             final FacetHolder holder,
             final ServicesInjector servicesInjector) {
-        super(eventType, getterFacet, setterFacet, null, propertyInteractionFacet, servicesInjector, holder);
+        super(PropertySetterFacet.class, eventType, getterFacet, setterFacet, null, propertyInteractionFacet, servicesInjector, holder);
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/e85f4053/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyInteractionAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyInteractionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyInteractionAnnotation.java
index f977679..cd757cb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyInteractionAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventFromPropertyInteractionAnnotation.java
@@ -41,6 +41,6 @@ public class PropertySetterFacetForDomainEventFromPropertyInteractionAnnotation
             final PropertyDomainEventFacetAbstract propertyInteractionFacet,
             final FacetHolder holder,
             final ServicesInjector servicesInjector) {
-        super(eventType, getterFacet, setterFacet, null, propertyInteractionFacet, servicesInjector, holder);
+        super(PropertySetterFacet.class, eventType, getterFacet, setterFacet, null, propertyInteractionFacet, servicesInjector, holder);
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/e85f4053/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForPostsPropertyChangedEventAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForPostsPropertyChangedEventAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForPostsPropertyChangedEventAnnotation.java
index 81b6742..b97fc54 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForPostsPropertyChangedEventAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForPostsPropertyChangedEventAnnotation.java
@@ -41,7 +41,7 @@ public class PropertySetterFacetForPostsPropertyChangedEventAnnotation
             final PropertyDomainEventFacetAbstract propertyInteractionFacet,
             final FacetHolder holder,
             final ServicesInjector servicesInjector) {
-        super(eventType, getterFacet, setterFacet, null, propertyInteractionFacet, servicesInjector, holder);
+        super(PropertySetterFacet.class, eventType, getterFacet, setterFacet, null, propertyInteractionFacet, servicesInjector, holder);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/e85f4053/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
index 982b852..878bfa1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
@@ -47,10 +47,6 @@ import org.apache.isis.schema.ixn.v1.PropertyEditDto;
 public abstract class PropertySetterOrClearFacetForDomainEventAbstract
         extends SingleValueFacetAbstract<Class<? extends PropertyDomainEvent<?,?>>> {
 
-    public static Class<? extends Facet> type() {
-        return PropertySetterFacet.class;
-    }
-
     private final DomainEventHelper domainEventHelper;
 
     private final PropertyOrCollectionAccessorFacet getterFacet;
@@ -62,6 +58,7 @@ public abstract class PropertySetterOrClearFacetForDomainEventAbstract
 
 
     public PropertySetterOrClearFacetForDomainEventAbstract(
+            final Class<? extends Facet> facetType,
             final Class<? extends PropertyDomainEvent<?, ?>> eventType,
             final PropertyOrCollectionAccessorFacet getterFacet,
             final PropertySetterFacet setterFacet,
@@ -69,7 +66,7 @@ public abstract class PropertySetterOrClearFacetForDomainEventAbstract
             final PropertyDomainEventFacetAbstract propertyDomainEventFacet,
             final ServicesInjector servicesInjector,
             final FacetHolder holder) {
-        super(type(), eventType, holder);
+        super(facetType, eventType, holder);
         this.getterFacet = getterFacet;
         this.setterFacet = setterFacet;
         this.clearFacet = clearFacet;

http://git-wip-us.apache.org/repos/asf/isis/blob/e85f4053/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
index c55b347..341afdc 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
@@ -51,6 +51,7 @@ import org.apache.isis.schema.cmd.v1.ParamDto;
 import org.apache.isis.schema.cmd.v1.PropertyDto;
 import org.apache.isis.schema.common.v1.InteractionType;
 import org.apache.isis.schema.common.v1.ValueWithTypeDto;
+import org.apache.isis.schema.utils.CommandDtoUtils;
 import org.apache.isis.schema.utils.CommonDtoUtils;
 
 @DomainService(
@@ -203,11 +204,12 @@ public class CommandDtoServiceInternalDefault implements CommandDtoServiceIntern
             final Class<?> paramType = actionParameter.getSpecification().getCorrespondingClass();
             final ObjectAdapter argAdapter = argAdapters[paramNum];
             final Object arg = argAdapter != null? argAdapter.getObject(): null;
-            final List<ParamDto> parameters = actionDto.getParameters().getParameter();
+            final ActionDto.Parameters parameters = CommandDtoUtils.parametersFor(actionDto);
+            final List<ParamDto> parameterList = parameters.getParameter();
 
             ParamDto paramDto = CommonDtoUtils.newParamDto(
                     parameterName, paramType, arg, bookmarkService);
-            parameters.add(paramDto);
+            parameterList.add(paramDto);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/e85f4053/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
index abac5a5..a7d0bd7 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
@@ -41,8 +41,12 @@ 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.OneToOneAssociation;
 import org.apache.isis.schema.cmd.v1.ActionDto;
+import org.apache.isis.schema.cmd.v1.ParamDto;
+import org.apache.isis.schema.cmd.v1.PropertyDto;
+import org.apache.isis.schema.common.v1.ValueWithTypeDto;
 import org.apache.isis.schema.ixn.v1.ActionInvocationDto;
 import org.apache.isis.schema.ixn.v1.PropertyEditDto;
+import org.apache.isis.schema.utils.CommandDtoUtils;
 import org.apache.isis.schema.utils.InteractionDtoUtils;
 
 @DomainService(nature = NatureOfService.DOMAIN)
@@ -64,8 +68,8 @@ public class InteractionDtoServiceInternalDefault implements InteractionDtoServi
         final Object targetPojo = targetAdapter.getObject();
         final Bookmark targetBookmark = bookmarkService.bookmarkFor(targetPojo);
 
-        final String actionClassNameId = objectAction.getIdentifier().toClassAndNameIdentityString();
-        final String actionId = actionClassNameId.substring(actionClassNameId.indexOf('#')+1);
+        final String actionIdentifier = objectAction.getIdentifier().toClassAndNameIdentityString();
+        final String actionId = actionIdentifier.substring(actionIdentifier.indexOf('#')+1);
         final String targetTitle = targetBookmark.toString() + ": " + actionId;
 
         final String currentUser = userService.getUser().getName();
@@ -73,14 +77,14 @@ public class InteractionDtoServiceInternalDefault implements InteractionDtoServi
         final ActionDto actionDto = new ActionDto();
         commandDtoServiceInternal.addActionArgs(
                 objectAction, actionDto, argumentAdapters.toArray(new ObjectAdapter[]{}));
+        final List<ParamDto> parameterDtos = CommandDtoUtils.parametersFor(actionDto).getParameter();
 
         final String transactionIdStr = transactionId.toString();
 
-        // done above, I believe
-        // InteractionDtoUtils.addReturn(invocationDto, returnType, resultPojo, bookmarkService);
         return InteractionDtoUtils.newActionInvocation(
                 nextEventSequence, targetBookmark, targetTitle,
-                actionDto.getMemberIdentifier(), actionDto.getParameters().getParameter(), currentUser,
+                actionDto.getMemberIdentifier(),
+                parameterDtos, currentUser,
                 transactionIdStr);
     }
 
@@ -105,11 +109,33 @@ public class InteractionDtoServiceInternalDefault implements InteractionDtoServi
             final ObjectAdapter targetAdapter,
             final ObjectAdapter newValueAdapterIfAny) {
 
-        //
-        //
-        //
+        final Command command = commandContext.getCommand();
+        final UUID transactionId = command.getTransactionId();
+
+        final Interaction.SequenceName sequenceName = Interaction.SequenceName.PUBLISHED_EVENT;
+        final int nextEventSequence = command.next(sequenceName.abbr());
+
+        final Object targetPojo = targetAdapter.getObject();
+        final Bookmark targetBookmark = bookmarkService.bookmarkFor(targetPojo);
+
+        final String propertyIdentifier = property.getIdentifier().toClassAndNameIdentityString();
+        final String propertyId = propertyIdentifier.substring(propertyIdentifier.indexOf('#')+1);
+        final String targetTitle = targetBookmark.toString() + ": " + propertyId;
+
+        final String currentUser = userService.getUser().getName();
+
+        final PropertyDto propertyDto = new PropertyDto();
+        commandDtoServiceInternal.addPropertyValue(property, propertyDto, newValueAdapterIfAny);
+        final ValueWithTypeDto newValue = propertyDto.getNewValue();
+
+        final String transactionIdStr = transactionId.toString();
+
+        return InteractionDtoUtils.newPropertyEdit(
+                nextEventSequence, targetBookmark, targetTitle,
+                propertyDto.getMemberIdentifier(),
+                newValue, currentUser,
+                transactionIdStr);
 
-        throw new RuntimeException("not yet implemented");
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/e85f4053/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JavaSqlTimestampXmlGregorianCalendarAdapter.java
----------------------------------------------------------------------
diff --git a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JavaSqlTimestampXmlGregorianCalendarAdapter.java b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JavaSqlTimestampXmlGregorianCalendarAdapter.java
index 7d7c7ec..cea3cd0 100644
--- a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JavaSqlTimestampXmlGregorianCalendarAdapter.java
+++ b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JavaSqlTimestampXmlGregorianCalendarAdapter.java
@@ -52,6 +52,9 @@ public class JavaSqlTimestampXmlGregorianCalendarAdapter extends XmlAdapter<XMLG
     }
 
     public static XMLGregorianCalendar print(final java.sql.Timestamp timestamp) {
+        if(timestamp == null) {
+            return null;
+        }
         GregorianCalendar c = new GregorianCalendar();
         c.setTime(timestamp);
         return getDatatypeFactory().newXMLGregorianCalendar(c);

http://git-wip-us.apache.org/repos/asf/isis/blob/e85f4053/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaDateTimeStringAdapter.java
----------------------------------------------------------------------
diff --git a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaDateTimeStringAdapter.java b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaDateTimeStringAdapter.java
index 6c41263..36da922 100644
--- a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaDateTimeStringAdapter.java
+++ b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaDateTimeStringAdapter.java
@@ -38,7 +38,10 @@ public final class JodaDateTimeStringAdapter {
     }
 
     public static String print(final DateTime date) {
-        return date != null? date.toString(): null;
+        if (date == null) {
+            return null;
+        }
+        return formatter.print(date);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/e85f4053/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaDateTimeXMLGregorianCalendarAdapter.java
----------------------------------------------------------------------
diff --git a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaDateTimeXMLGregorianCalendarAdapter.java b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaDateTimeXMLGregorianCalendarAdapter.java
index 75e4445..ccd3943 100644
--- a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaDateTimeXMLGregorianCalendarAdapter.java
+++ b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaDateTimeXMLGregorianCalendarAdapter.java
@@ -28,8 +28,6 @@ import com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl
 
 import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
-import org.joda.time.format.DateTimeFormatter;
-import org.joda.time.format.ISODateTimeFormat;
 
 /**
  * Not registered in the XSD schema (as a JAXB binding, because can only map xs:dateTime once (and have chosen to map to LocalDateTime).
@@ -38,7 +36,6 @@ public final class JodaDateTimeXMLGregorianCalendarAdapter {
     private JodaDateTimeXMLGregorianCalendarAdapter() {
     }
 
-    private static DateTimeFormatter formatter = ISODateTimeFormat.dateTime();
 
     public static DateTime parse(final XMLGregorianCalendar xgc) {
         if(xgc == null) return null;
@@ -52,7 +49,9 @@ public final class JodaDateTimeXMLGregorianCalendarAdapter {
     }
 
     public static XMLGregorianCalendar print(final DateTime dateTime) {
-        if(dateTime == null) return null;
+        if(dateTime == null) {
+            return null;
+        }
 
         final long millis = dateTime.getMillis();
         final DateTimeZone dateTimeZone = dateTime.getZone();

http://git-wip-us.apache.org/repos/asf/isis/blob/e85f4053/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateStringAdapter.java
----------------------------------------------------------------------
diff --git a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateStringAdapter.java b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateStringAdapter.java
index e939701..f2bbe64 100644
--- a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateStringAdapter.java
+++ b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateStringAdapter.java
@@ -31,11 +31,17 @@ public final class JodaLocalDateStringAdapter {
     private static DateTimeFormatter dateFormatter = ISODateTimeFormat.localDateParser();
 
     public static LocalDate parse(final String date) {
-        return !Strings.isNullOrEmpty(date) ? dateFormatter.parseLocalDate(date) : null;
+        if (Strings.isNullOrEmpty(date)) {
+            return null;
+        }
+        return dateFormatter.parseLocalDate(date);
     }
 
     public static String print(LocalDate date) {
-        return date != null? date.toString() : null;
+        if (date == null) {
+            return null;
+        }
+        return dateFormatter.print(date);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/e85f4053/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateTimeStringAdapter.java
----------------------------------------------------------------------
diff --git a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateTimeStringAdapter.java b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateTimeStringAdapter.java
index 83f7c9c..3bbc291 100644
--- a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateTimeStringAdapter.java
+++ b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateTimeStringAdapter.java
@@ -31,11 +31,17 @@ public final class JodaLocalDateTimeStringAdapter {
     private static DateTimeFormatter formatter = ISODateTimeFormat.localDateOptionalTimeParser();
 
     public static LocalDateTime parse(final String date) {
-        return !Strings.isNullOrEmpty(date) ? formatter.parseLocalDateTime(date) : null;
+        if (Strings.isNullOrEmpty(date)) {
+            return null;
+        }
+        return formatter.parseLocalDateTime(date);
     }
 
     public static String print(final LocalDateTime date) {
-        return date != null? date.toString(): null;
+        if (date == null) {
+            return null;
+        }
+        return formatter.print(date);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/e85f4053/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateTimeXMLGregorianCalendarAdapter.java
----------------------------------------------------------------------
diff --git a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateTimeXMLGregorianCalendarAdapter.java b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateTimeXMLGregorianCalendarAdapter.java
index dcc8073..4501aa0 100644
--- a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateTimeXMLGregorianCalendarAdapter.java
+++ b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateTimeXMLGregorianCalendarAdapter.java
@@ -23,8 +23,6 @@ import javax.xml.datatype.XMLGregorianCalendar;
 import com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl;
 
 import org.joda.time.LocalDateTime;
-import org.joda.time.format.DateTimeFormatter;
-import org.joda.time.format.ISODateTimeFormat;
 
 /**
  * Not registered in the XSD schema (as a JAXB binding, because can only map xs:dateTime once (and have chosen to map to LocalDateTime).
@@ -33,8 +31,6 @@ public final class JodaLocalDateTimeXMLGregorianCalendarAdapter {
     private JodaLocalDateTimeXMLGregorianCalendarAdapter() {
     }
 
-    private static DateTimeFormatter formatter = ISODateTimeFormat.dateTime();
-
     public static LocalDateTime parse(final XMLGregorianCalendar xgc) {
         if(xgc == null) return null;
 
@@ -50,7 +46,9 @@ public final class JodaLocalDateTimeXMLGregorianCalendarAdapter {
     }
 
     public static XMLGregorianCalendar print(final LocalDateTime dateTime) {
-        if(dateTime == null) return null;
+        if(dateTime == null) {
+            return null;
+        }
 
         final XMLGregorianCalendarImpl xgc = new XMLGregorianCalendarImpl();
         xgc.setYear(dateTime.getYear());

http://git-wip-us.apache.org/repos/asf/isis/blob/e85f4053/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateXMLGregorianCalendarAdapter.java
----------------------------------------------------------------------
diff --git a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateXMLGregorianCalendarAdapter.java b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateXMLGregorianCalendarAdapter.java
index f135b3f..1489995 100644
--- a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateXMLGregorianCalendarAdapter.java
+++ b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalDateXMLGregorianCalendarAdapter.java
@@ -23,8 +23,6 @@ import javax.xml.datatype.XMLGregorianCalendar;
 import com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl;
 
 import org.joda.time.LocalDate;
-import org.joda.time.format.DateTimeFormatter;
-import org.joda.time.format.ISODateTimeFormat;
 
 /**
  * Not registered in the XSD schema (as a JAXB binding, because can only map xs:dateTime once (and have chosen to map to LocalDateTime).
@@ -33,7 +31,6 @@ public final class JodaLocalDateXMLGregorianCalendarAdapter {
     private JodaLocalDateXMLGregorianCalendarAdapter() {
     }
 
-    private static DateTimeFormatter formatter = ISODateTimeFormat.dateTime();
 
     public static LocalDate parse(final XMLGregorianCalendar xgc) {
         if(xgc == null) return null;
@@ -46,7 +43,9 @@ public final class JodaLocalDateXMLGregorianCalendarAdapter {
     }
 
     public static XMLGregorianCalendar print(final LocalDate dateTime) {
-        if(dateTime == null) return null;
+        if(dateTime == null) {
+            return null;
+        }
 
         final XMLGregorianCalendarImpl xgc = new XMLGregorianCalendarImpl();
         xgc.setYear(dateTime.getYear());

http://git-wip-us.apache.org/repos/asf/isis/blob/e85f4053/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalTimeStringAdapter.java
----------------------------------------------------------------------
diff --git a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalTimeStringAdapter.java b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalTimeStringAdapter.java
index fe035c4..97b55c5 100644
--- a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalTimeStringAdapter.java
+++ b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalTimeStringAdapter.java
@@ -31,11 +31,17 @@ public final class JodaLocalTimeStringAdapter {
     private static DateTimeFormatter dateFormatter = ISODateTimeFormat.localTimeParser();
 
     public static LocalTime parse(final String date) {
-        return !Strings.isNullOrEmpty(date) ? dateFormatter.parseLocalTime(date) : null;
+        if (Strings.isNullOrEmpty(date)) {
+            return null;
+        }
+        return dateFormatter.parseLocalTime(date);
     }
 
     public static String print(LocalTime date) {
-        return date != null? date.toString() : null;
+        if (date == null) {
+            return null;
+        }
+        return dateFormatter.print(date);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/e85f4053/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalTimeXMLGregorianCalendarAdapter.java
----------------------------------------------------------------------
diff --git a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalTimeXMLGregorianCalendarAdapter.java b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalTimeXMLGregorianCalendarAdapter.java
index 9648929..108bb9b 100644
--- a/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalTimeXMLGregorianCalendarAdapter.java
+++ b/core/schema/src/main/java/org/apache/isis/schema/utils/jaxbadapters/JodaLocalTimeXMLGregorianCalendarAdapter.java
@@ -32,7 +32,9 @@ public final class JodaLocalTimeXMLGregorianCalendarAdapter {
     }
 
     public static LocalTime parse(final XMLGregorianCalendar xgc) {
-        if(xgc == null) return null;
+        if(xgc == null) {
+            return null;
+        }
 
         final int hour = xgc.getHour();
         final int minute = xgc.getMinute();
@@ -43,7 +45,9 @@ public final class JodaLocalTimeXMLGregorianCalendarAdapter {
     }
 
     public static XMLGregorianCalendar print(final LocalTime dateTime) {
-        if(dateTime == null) return null;
+        if(dateTime == null) {
+            return null;
+        }
 
         final XMLGregorianCalendarImpl xgc = new XMLGregorianCalendarImpl();
         xgc.setHour(dateTime.getHourOfDay());


[7/8] isis git commit: ISIS-1389: completing up making CommandDto / InteractionDto and Interaction consistent.

Posted by da...@apache.org.
ISIS-1389: completing up making CommandDto / InteractionDto and Interaction consistent.


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

Branch: refs/heads/ISIS-1291
Commit: 18c6b4951d1277e1789a0a7c6eec12ebadd4a21b
Parents: 3e199c9
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed May 4 07:33:16 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed May 4 07:33:16 2016 +0100

----------------------------------------------------------------------
 ...d-dto-vs-interaction-dto-vs-interaction.xlsx | Bin 0 -> 13776 bytes
 .../isis/applib/services/iactn/Interaction.java |  21 +-
 .../isis/schema/utils/CommandDtoUtils.java      | 159 +----------
 .../isis/schema/utils/CommonDtoUtils.java       | 279 +++++++++++++++----
 .../isis/schema/utils/InteractionDtoUtils.java  | 196 +++----------
 .../isis/schema/utils/CommonDtoUtilsTest.java   |  43 +--
 .../org/apache/isis/schema/utils/Roundtrip.java |  41 +--
 .../background/BackgroundCommandExecution.java  |  11 +-
 .../CommandDtoServiceInternalDefault.java       |  14 +-
 .../InteractionDtoServiceInternalDefault.java   |   8 +-
 .../PublishingServiceInternalDefault.java       |   4 +-
 .../org/apache/isis/schema/cmd/cmd-1.0.xsd      |  17 +-
 .../apache/isis/schema/common/common-1.0.xsd    |  20 +-
 .../org/apache/isis/schema/ixn/ixn-1.0.xsd      |  26 +-
 14 files changed, 378 insertions(+), 461 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/18c6b495/adocs/documentation/src/main/excel/command-dto-vs-interaction-dto-vs-interaction.xlsx
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/excel/command-dto-vs-interaction-dto-vs-interaction.xlsx b/adocs/documentation/src/main/excel/command-dto-vs-interaction-dto-vs-interaction.xlsx
new file mode 100644
index 0000000..ca26513
Binary files /dev/null and b/adocs/documentation/src/main/excel/command-dto-vs-interaction-dto-vs-interaction.xlsx differ

http://git-wip-us.apache.org/repos/asf/isis/blob/18c6b495/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 ea95a6c..8aad3d3 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
@@ -42,7 +42,7 @@ import org.apache.isis.applib.services.wrapper.WrapperFactory;
 import org.apache.isis.schema.common.v1.InteractionType;
 import org.apache.isis.schema.common.v1.PeriodDto;
 import org.apache.isis.schema.ixn.v1.ActionInvocationDto;
-import org.apache.isis.schema.ixn.v1.InteractionExecutionDto;
+import org.apache.isis.schema.ixn.v1.MemberExecutionDto;
 import org.apache.isis.schema.ixn.v1.PropertyEditDto;
 import org.apache.isis.schema.utils.jaxbadapters.JavaSqlTimestampXmlGregorianCalendarAdapter;
 
@@ -227,7 +227,6 @@ public class Interaction implements HasTransactionId {
      * Pops the top-most  {@link org.apache.isis.applib.services.eventbus.ActionDomainEvent}
      * from the stack of events held by the command.
      * </p>
-     * @param completedAt
      */
     @Programmatic
     private Execution pop(final Timestamp completedAt) {
@@ -315,7 +314,7 @@ public class Interaction implements HasTransactionId {
      * Represents an action invocation/property edit as a node in a call-stack execution graph, with sub-interactions
      * being made by way of the {@link WrapperFactory}).
      */
-    public static class Execution<T extends InteractionExecutionDto, E extends AbstractDomainEvent<?>> {
+    public static class Execution<T extends MemberExecutionDto, E extends AbstractDomainEvent<?>> {
 
         //region > fields, constructor
 
@@ -351,17 +350,17 @@ public class Interaction implements HasTransactionId {
 
         //region > parent, children
 
-        private final List<Execution> children = Lists.newArrayList();
-        private Execution parent;
+        private final List<Execution<?,?>> children = Lists.newArrayList();
+        private Execution<?,?> parent;
 
         /**
          * The action/property that invoked this action/property edit (if any).
          */
-        public Execution getParent() {
+        public Execution<?,?> getParent() {
             return parent;
         }
 
-        public void setParent(final Execution parent) {
+        public void setParent(final Execution<?,?> parent) {
             this.parent = parent;
             if(parent != null) {
                 parent.children.add(this);
@@ -371,7 +370,7 @@ public class Interaction implements HasTransactionId {
         /**
          * The actions/property edits made in turn via the {@link WrapperFactory}.
          */
-        public List<Execution> getChildren() {
+        public List<Execution<?,?>> getChildren() {
             return Collections.unmodifiableList(children);
         }
         //endregion
@@ -511,11 +510,11 @@ public class Interaction implements HasTransactionId {
                 return;
             }
             final PeriodDto periodDto = periodDtoFor(this.dto);
-            periodDto.setStart(JavaSqlTimestampXmlGregorianCalendarAdapter.print(getStartedAt()));
-            periodDto.setComplete(JavaSqlTimestampXmlGregorianCalendarAdapter.print(getCompletedAt()));
+            periodDto.setStartedAt(JavaSqlTimestampXmlGregorianCalendarAdapter.print(getStartedAt()));
+            periodDto.setCompletedAt(JavaSqlTimestampXmlGregorianCalendarAdapter.print(getCompletedAt()));
         }
 
-        private static PeriodDto periodDtoFor(final InteractionExecutionDto executionDto) {
+        private static PeriodDto periodDtoFor(final MemberExecutionDto executionDto) {
             PeriodDto timings = executionDto.getTimings();
             if(timings == null) {
                 timings = new PeriodDto();

http://git-wip-us.apache.org/repos/asf/isis/blob/18c6b495/core/applib/src/main/java/org/apache/isis/schema/utils/CommandDtoUtils.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/CommandDtoUtils.java b/core/applib/src/main/java/org/apache/isis/schema/utils/CommandDtoUtils.java
index b0c3c61..8e867be 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/CommandDtoUtils.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/CommandDtoUtils.java
@@ -23,11 +23,8 @@ import java.io.IOException;
 import java.io.Reader;
 import java.io.StringReader;
 import java.io.Writer;
-import java.math.BigDecimal;
-import java.math.BigInteger;
 import java.net.URL;
 import java.nio.charset.Charset;
-import java.util.List;
 
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
@@ -36,18 +33,7 @@ import javax.xml.bind.Unmarshaller;
 
 import com.google.common.io.Resources;
 
-import org.joda.time.DateTime;
-import org.joda.time.LocalDate;
-import org.joda.time.LocalDateTime;
-import org.joda.time.LocalTime;
-
-import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.applib.services.bookmark.BookmarkService;
 import org.apache.isis.schema.cmd.v1.CommandDto;
-import org.apache.isis.schema.cmd.v1.ParamDto;
-import org.apache.isis.schema.common.v1.OidDto;
-import org.apache.isis.schema.common.v1.ValueDto;
-import org.apache.isis.schema.common.v1.ValueType;
 
 public final class CommandDtoUtils {
 
@@ -86,17 +72,17 @@ public final class CommandDtoUtils {
         return fromXml(new StringReader(s));
     }
 
-    public static String toXml(final CommandDto aimDto) {
+    public static String toXml(final CommandDto commandDto) {
         final CharArrayWriter caw = new CharArrayWriter();
-        toXml(aimDto, caw);
+        toXml(commandDto, caw);
         return caw.toString();
     }
 
-    public static void toXml(final CommandDto aimDto, final Writer writer) {
+    public static void toXml(final CommandDto commandDto, final Writer writer) {
         try {
             final Marshaller m = getJaxbContext().createMarshaller();
             m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
-            m.marshal(aimDto, writer);
+            m.marshal(commandDto, writer);
         } catch (JAXBException e) {
             throw new RuntimeException(e);
         }
@@ -104,141 +90,4 @@ public final class CommandDtoUtils {
     //endregion
 
 
-    static ValueDto argumentFor(final ParamDto paramDto) {
-        ValueDto valueDto = paramDto.getArgument();
-        if(valueDto == null) {
-            valueDto = new ValueDto();
-            paramDto.setArgument(valueDto);
-        }
-        return valueDto;
-    }
-
-    /**
-     * @param params
-     * @param parameterName
-     * @param parameterType - to determine the value type (if any)
-     * @param arg - either a value type (possibly boxed primitive), or a reference type
-     * @param bookmarkService - used if not a value type
-     */
-    public static void addParamArg(
-            final List<ParamDto> params,
-            final String parameterName,
-            final Class<?> parameterType,
-            final Object arg,
-            final BookmarkService bookmarkService) {
-
-        ParamDto paramDto = newParamDto(parameterName, parameterType, arg, bookmarkService);
-        params.add(paramDto);
-    }
-
-    public static ParamDto newParamDto(
-            final String parameterName,
-            final Class<?> parameterType,
-            final Object arg,
-            final BookmarkService bookmarkService) {
-
-        ParamDto paramDto = newParamDto(parameterName, parameterType, arg);
-        if(paramDto != null) {
-
-            if (arg != null) {
-                final ValueDto valueDto = argumentFor(paramDto);
-                CommonDtoUtils.setValue(valueDto, parameterType, arg);
-            }
-
-        } else {
-
-            // none of the supported value types
-            final Bookmark bookmark = arg instanceof Bookmark
-                    ? (Bookmark)arg
-                    : bookmarkService.bookmarkFor(arg);
-
-            paramDto = newParamDto(parameterName, ValueType.REFERENCE, bookmark);
-
-            if (bookmark != null) {
-                final ValueDto valueDto = argumentFor(paramDto);
-
-                OidDto argValue = CommonDtoUtils.asOidDto(bookmark);
-                valueDto.setReference(argValue);
-            }
-        }
-        return paramDto;
-    }
-
-    private static ParamDto newParamDto(final String parameterName, final Class<?> parameterType, final Object arg) {
-        ParamDto paramDto = null;
-        if(parameterType == String.class) {
-            paramDto = newParamDto(parameterName, ValueType.STRING, arg);
-        } else
-        if(parameterType == byte.class || parameterType == Byte.class) {
-            paramDto = newParamDto(parameterName, ValueType.BYTE, arg);
-        } else
-        if(parameterType == short.class || parameterType == Short.class) {
-            paramDto = newParamDto(parameterName, ValueType.SHORT, arg);
-        }else
-        if(parameterType == int.class || parameterType == Integer.class) {
-            paramDto = newParamDto(parameterName, ValueType.INT, arg);
-        }else
-        if(parameterType == long.class || parameterType == Long.class) {
-            paramDto = newParamDto(parameterName, ValueType.LONG, arg);
-        }else
-        if(parameterType == char.class || parameterType == Character.class) {
-            paramDto = newParamDto(parameterName, ValueType.CHAR, arg);
-        }else
-        if(parameterType == boolean.class || parameterType == Boolean.class) {
-            paramDto = newParamDto(parameterName, ValueType.BOOLEAN, arg);
-        }else
-        if(parameterType == float.class || parameterType == Float.class) {
-            paramDto = newParamDto(parameterName, ValueType.FLOAT, arg);
-        }else
-        if(parameterType == double.class || parameterType == Double.class) {
-            paramDto = newParamDto(parameterName, ValueType.DOUBLE, arg);
-        }else
-        if(parameterType == BigInteger.class) {
-            paramDto = newParamDto(parameterName, ValueType.BIG_INTEGER, arg);
-        }else
-        if(parameterType == BigDecimal.class) {
-            paramDto = newParamDto(parameterName, ValueType.BIG_DECIMAL, arg);
-        }else
-        if(parameterType == DateTime.class) {
-            paramDto = newParamDto(parameterName, ValueType.JODA_DATE_TIME, arg);
-        }else
-        if(parameterType == LocalDateTime.class) {
-            paramDto = newParamDto(parameterName, ValueType.JODA_LOCAL_DATE_TIME, arg);
-        }else
-        if(parameterType == LocalDate.class) {
-            paramDto = newParamDto(parameterName, ValueType.JODA_LOCAL_DATE, arg);
-        }else
-        if(parameterType == LocalTime.class) {
-            paramDto = newParamDto(parameterName, ValueType.JODA_LOCAL_TIME, arg);
-        }else
-        if(parameterType.isEnum()) {
-            paramDto = newParamDto(parameterName, ValueType.ENUM, arg);
-        }
-        return paramDto;
-    }
-
-    private static ParamDto newParamDto(final String parameterName, final ValueType parameterType, final Object value) {
-        final ParamDto paramDto = newParamDto(parameterName, parameterType);
-        paramDto.setNull(value == null);
-        return paramDto;
-    }
-
-    private static ParamDto newParamDto(
-            final String parameterName,
-            final ValueType parameterType) {
-        final ParamDto argDto = new ParamDto();
-        argDto.setParameterName(parameterName);
-        argDto.setParameterType(parameterType);
-        return argDto;
-    }
-
-    public static Object paramArgOf(final ParamDto paramDto) {
-        if(paramDto.isNull()) {
-            return null;
-        }
-        final ValueType parameterType = paramDto.getParameterType();
-        final ValueDto argument = paramDto.getArgument();
-        return CommonDtoUtils.getValue(argument, parameterType);
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/18c6b495/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java b/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java
index 3959f41..22376ed 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java
@@ -21,10 +21,9 @@ package org.apache.isis.schema.utils;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 
-import javax.annotation.Nullable;
-
 import com.google.common.base.Function;
 import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableMap;
 
 import org.joda.time.DateTime;
 import org.joda.time.LocalDate;
@@ -32,11 +31,14 @@ import org.joda.time.LocalDateTime;
 import org.joda.time.LocalTime;
 
 import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.applib.services.bookmark.BookmarkService;
 import org.apache.isis.schema.cmd.v1.ParamDto;
 import org.apache.isis.schema.common.v1.EnumDto;
 import org.apache.isis.schema.common.v1.OidDto;
 import org.apache.isis.schema.common.v1.ValueDto;
 import org.apache.isis.schema.common.v1.ValueType;
+import org.apache.isis.schema.common.v1.ValueWithTypeDto;
+import org.apache.isis.schema.utils.jaxbadapters.JavaSqlTimestampXmlGregorianCalendarAdapter;
 import org.apache.isis.schema.utils.jaxbadapters.JodaDateTimeXMLGregorianCalendarAdapter;
 import org.apache.isis.schema.utils.jaxbadapters.JodaLocalDateTimeXMLGregorianCalendarAdapter;
 import org.apache.isis.schema.utils.jaxbadapters.JodaLocalDateXMLGregorianCalendarAdapter;
@@ -44,13 +46,7 @@ import org.apache.isis.schema.utils.jaxbadapters.JodaLocalTimeXMLGregorianCalend
 
 public final class CommonDtoUtils {
 
-    public static final Function<OidDto, String> OID_DTO_2_STR = new Function<OidDto, String>() {
-        @Nullable @Override
-        public String apply(final OidDto oidDto) {
-            final Bookmark bookmark = Bookmark.from(oidDto);
-            return bookmark.toString();
-        }
-    };
+    //region > PARAM_DTO_TO_NAME, PARAM_DTO_TO_TYPE
 
     public static final Function<ParamDto, String> PARAM_DTO_TO_NAME = new Function<ParamDto, String>() {
         @Override public String apply(final ParamDto paramDto) {
@@ -62,84 +58,174 @@ public final class CommonDtoUtils {
             return paramDto.getParameterType();
         }
     };
+    //endregion
 
-    public static boolean setValue(
-            final ValueDto valueDto,
-            final Class<?> type,
-            final Object val) {
-        if(type == String.class) {
+    //region > asValueType
+    private final static ImmutableMap<Class<?>, ValueType> valueTypeByClass =
+            new ImmutableMap.Builder<Class<?>, ValueType>()
+                    .put(String.class, ValueType.STRING)
+                    .put(byte.class, ValueType.BYTE)
+                    .put(Byte.class, ValueType.BYTE)
+                    .put(short.class, ValueType.SHORT)
+                    .put(Short.class, ValueType.SHORT)
+                    .put(int.class, ValueType.INT)
+                    .put(Integer.class, ValueType.INT)
+                    .put(long.class, ValueType.LONG)
+                    .put(Long.class, ValueType.LONG)
+                    .put(char.class, ValueType.CHAR)
+                    .put(Character.class, ValueType.CHAR)
+                    .put(boolean.class, ValueType.BOOLEAN)
+                    .put(Boolean.class, ValueType.BOOLEAN)
+                    .put(float.class, ValueType.FLOAT)
+                    .put(Float.class, ValueType.FLOAT)
+                    .put(double.class, ValueType.DOUBLE)
+                    .put(Double.class, ValueType.DOUBLE)
+                    .put(BigInteger.class, ValueType.BIG_INTEGER)
+                    .put(BigDecimal.class, ValueType.BIG_DECIMAL)
+                    .put(DateTime.class, ValueType.JODA_DATE_TIME)
+                    .put(LocalDateTime.class, ValueType.JODA_LOCAL_DATE_TIME)
+                    .put(LocalDate.class, ValueType.JODA_LOCAL_DATE)
+                    .put(LocalTime.class, ValueType.JODA_LOCAL_TIME)
+                    .put(java.sql.Timestamp.class, ValueType.JAVA_SQL_TIMESTAMP)
+                    .build();
+
+    public static ValueType asValueType(final Class<?> type) {
+        final ValueType valueType = valueTypeByClass.get(type);
+        if (valueType != null) {
+            return valueType;
+        }
+        if (type.isEnum()) {
+            return ValueType.ENUM;
+        }
+        // assume reference otherwise
+        return ValueType.REFERENCE;
+    }
+    //endregion
+
+    //region > newValueDto
+
+    public static ValueDto newValueDto(
+            final ValueType valueType,
+            final Object val,
+            final BookmarkService bookmarkService) {
+
+        if(val == null) {
+            return null;
+        }
+
+        final ValueDto valueDto = new ValueDto();
+        switch (valueType) {
+        case STRING: {
             final String argValue = (String) val;
             valueDto.setString(argValue);
-        } else
-        if(type == byte.class || type == Byte.class) {
+            return valueDto;
+        }
+        case BYTE: {
             final Byte argValue = (Byte) val;
             valueDto.setByte(argValue);
-        } else
-        if(type == short.class || type == Short.class) {
+            return valueDto;
+        }
+        case SHORT: {
             final Short argValue = (Short) val;
             valueDto.setShort(argValue);
-        }else
-        if(type == int.class || type == Integer.class) {
+            return valueDto;
+        }
+        case INT: {
             final Integer argValue = (Integer) val;
             valueDto.setInt(argValue);
-        }else
-        if(type == long.class || type == Long.class) {
+            return valueDto;
+        }
+        case LONG: {
             final Long argValue = (Long) val;
             valueDto.setLong(argValue);
-        }else
-        if(type == char.class || type == Character.class) {
+            return valueDto;
+        }
+        case CHAR: {
             final Character argValue = (Character) val;
             valueDto.setChar("" + argValue);
-        }else
-        if(type == boolean.class || type == Boolean.class) {
+            return valueDto;
+        }
+        case BOOLEAN: {
             final Boolean argValue = (Boolean) val;
             valueDto.setBoolean(argValue);
-        }else
-        if(type == float.class || type == Float.class) {
+            return valueDto;
+        }
+        case FLOAT: {
             final Float argValue = (Float) val;
             valueDto.setFloat(argValue);
-        }else
-        if(type == double.class || type == Double.class) {
+            return valueDto;
+        }
+        case DOUBLE: {
             final Double argValue = (Double) val;
             valueDto.setDouble(argValue);
-        }else
-        if(type == BigInteger.class) {
+            return valueDto;
+        }
+        case BIG_INTEGER: {
             final BigInteger argValue = (BigInteger) val;
             valueDto.setBigInteger(argValue);
-        }else
-        if(type == BigDecimal.class) {
+            return valueDto;
+        }
+        case BIG_DECIMAL: {
             final BigDecimal argValue = (BigDecimal) val;
             valueDto.setBigDecimal(argValue);
-        }else
-        if(type == DateTime.class) {
+            return valueDto;
+        }
+        case JODA_DATE_TIME: {
             final DateTime argValue = (DateTime) val;
             valueDto.setDateTime(JodaDateTimeXMLGregorianCalendarAdapter.print(argValue));
-        }else
-        if(type == LocalDateTime.class) {
+            return valueDto;
+        }
+        case JODA_LOCAL_DATE_TIME: {
             final LocalDateTime argValue = (LocalDateTime) val;
             valueDto.setLocalDateTime(JodaLocalDateTimeXMLGregorianCalendarAdapter.print(argValue));
-        }else
-        if(type == LocalDate.class) {
+            return valueDto;
+        }
+        case JODA_LOCAL_DATE: {
             final LocalDate argValue = (LocalDate) val;
             valueDto.setLocalDate(JodaLocalDateXMLGregorianCalendarAdapter.print(argValue));
-        }else
-        if(type == LocalTime.class) {
+            return valueDto;
+        }
+        case JODA_LOCAL_TIME: {
             final LocalTime argValue = (LocalTime) val;
             valueDto.setLocalTime(JodaLocalTimeXMLGregorianCalendarAdapter.print(argValue));
-        }else
-        if(type.isEnum()) {
+            return valueDto;
+        }
+        case JAVA_SQL_TIMESTAMP: {
+            final java.sql.Timestamp argValue = (java.sql.Timestamp) val;
+            valueDto.setTimestamp(JavaSqlTimestampXmlGregorianCalendarAdapter.print(argValue));
+            return valueDto;
+        }
+        case ENUM: {
             final Enum argValue = (Enum) val;
             final EnumDto enumDto = new EnumDto();
             valueDto.setEnum(enumDto);
             enumDto.setEnumType(argValue.getClass().getName());
             enumDto.setEnumName(argValue.name());
-        }else
-        {
-            // none of the supported value types
-            return false;
+            return valueDto;
+        }
+        case REFERENCE: {
+            final Bookmark bookmark = val instanceof Bookmark
+                    ? (Bookmark) val
+                    : bookmarkService.bookmarkFor(val);
+
+            if (bookmark != null) {
+                OidDto argValue = bookmark != null ? bookmark.toOidDto() : null;
+                valueDto.setReference(argValue);
+            }
+            return valueDto;
+        }
+        case VOID:
+            return null;
+        default:
+            // should never happen; all cases are listed above
+            throw new IllegalArgumentException(String.format(
+                    "newValueDto(): do not recognize valueType %s (likely a framework error)",
+                    valueType));
         }
-        return true;
     }
+    //endregion
+
+    //region > getValue (from valueDto)
 
     public static <T> T getValue(
             final ValueDto valueDto,
@@ -169,6 +255,8 @@ public final class CommonDtoUtils {
             return (T) valueDto.getBigDecimal();
         case BIG_INTEGER:
             return (T) valueDto.getBigInteger();
+        case JAVA_SQL_TIMESTAMP:
+            return (T) JavaSqlTimestampXmlGregorianCalendarAdapter.parse(valueDto.getDateTime());
         case JODA_DATE_TIME:
             return (T) JodaDateTimeXMLGregorianCalendarAdapter.parse(valueDto.getDateTime());
         case JODA_LOCAL_DATE:
@@ -180,15 +268,21 @@ public final class CommonDtoUtils {
         case ENUM:
             final EnumDto enumDto = valueDto.getEnum();
             final String enumType = enumDto.getEnumType();
-            final Class<? extends Enum> enumClass = loadClass3(enumType);
+            final Class<? extends Enum> enumClass = loadClassElseThrow(enumType);
             return (T) Enum.valueOf(enumClass, enumDto.getEnumName());
         case REFERENCE:
             return (T) valueDto.getReference();
+        case VOID:
+            return null;
+        default:
+            // should never happen; all cases are listed above
+            throw new IllegalArgumentException(String.format(
+                    "getValueDto(...): do not recognize valueType %s (likely a framework error)",
+                    valueType));
         }
-        throw new IllegalStateException("Value type was not recognised (possible bug)");
     }
 
-    static <T> Class<T> loadClass3(final String enumType) {
+    private static <T> Class<T> loadClassElseThrow(final String enumType) {
         try {
             return (Class<T>) loadClass(enumType);
         } catch (ClassNotFoundException e) {
@@ -196,7 +290,7 @@ public final class CommonDtoUtils {
         }
     }
 
-    static Class<?> loadClass(String className) throws ClassNotFoundException {
+    private static Class<?> loadClass(String className) throws ClassNotFoundException {
         ClassLoader ccl = Thread.currentThread().getContextClassLoader();
         if(ccl == null) {
             return loadClass(className, (ClassLoader)null);
@@ -209,13 +303,86 @@ public final class CommonDtoUtils {
         }
     }
 
-    static Class<?> loadClass(String className, ClassLoader classLoader) throws ClassNotFoundException {
+    private static Class<?> loadClass(String className, ClassLoader classLoader) throws ClassNotFoundException {
         return classLoader == null?Class.forName(className):Class.forName(className, true, classLoader);
     }
+    //endregion
+
+    //region > newValueWithTypeDto
+
+
+    public static ValueWithTypeDto newValueWithTypeDto(
+            final Class<?> type,
+            final Object val,
+            final BookmarkService bookmarkService) {
+
+        final ValueWithTypeDto valueWithTypeDto = new ValueWithTypeDto();
+
+        final ValueType valueType = asValueType(type);
+        valueWithTypeDto.setType(valueType);
+
+        final ValueDto valueDto = newValueDto(valueType, val, bookmarkService);
+        valueWithTypeDto.setValue(valueDto);
 
-    public static OidDto asOidDto(final Bookmark reference) {
-        return reference != null ? reference.toOidDto() : null;
+        return valueWithTypeDto;
     }
 
+    //endregion
+
+    //region > getValue (from ValueWithTypeDto)
+
+    public static <T> T getValue(final ValueWithTypeDto valueWithTypeDto) {
+        if(valueWithTypeDto.isNull()) {
+            return null;
+        }
+        final ValueType type = valueWithTypeDto.getType();
+        final ValueDto value = valueWithTypeDto.getValue();
+        return CommonDtoUtils.getValue(value, type);
+    }
+
+
+    //endregion
+
+
+    //region > newParamDto
+
+    public static ParamDto newParamDto(
+            final String parameterName,
+            final Class<?> parameterType,
+            final Object arg,
+            final BookmarkService bookmarkService) {
+
+        final ParamDto paramDto = new ParamDto();
+
+        paramDto.setParameterName(parameterName);
+
+        final ValueType valueType = CommonDtoUtils.asValueType(parameterType);
+        paramDto.setParameterType(valueType);
+
+        final ValueDto valueDto =
+                CommonDtoUtils.newValueDto(valueType, arg, bookmarkService);
+        paramDto.setArgument(valueDto);
+
+        paramDto.setNull(arg == null);
+
+        return paramDto;
+    }
+    //endregion
+
+    //region > getValue (from ParamDto)
+
+    public static <T> T getValue(final ParamDto paramDto) {
+        if(paramDto.isNull()) {
+            return null;
+        }
+        final ValueType parameterType = paramDto.getParameterType();
+        final ValueDto argument = paramDto.getArgument();
+        return CommonDtoUtils.getValue(argument, parameterType);
+    }
+
+    //endregion
+
+
+
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/18c6b495/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java b/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
index 883ab8d..9a42150 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
@@ -24,11 +24,8 @@ import java.io.PrintStream;
 import java.io.Reader;
 import java.io.StringReader;
 import java.io.Writer;
-import java.math.BigDecimal;
-import java.math.BigInteger;
 import java.net.URL;
 import java.nio.charset.Charset;
-import java.sql.Timestamp;
 import java.util.Collections;
 import java.util.List;
 
@@ -41,11 +38,6 @@ import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 import com.google.common.io.Resources;
 
-import org.joda.time.DateTime;
-import org.joda.time.LocalDate;
-import org.joda.time.LocalDateTime;
-import org.joda.time.LocalTime;
-
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
 import org.apache.isis.schema.cmd.v1.ParamDto;
@@ -54,12 +46,11 @@ import org.apache.isis.schema.common.v1.OidDto;
 import org.apache.isis.schema.common.v1.PeriodDto;
 import org.apache.isis.schema.common.v1.ValueDto;
 import org.apache.isis.schema.common.v1.ValueType;
+import org.apache.isis.schema.common.v1.ValueWithTypeDto;
 import org.apache.isis.schema.ixn.v1.ActionInvocationDto;
 import org.apache.isis.schema.ixn.v1.InteractionDto;
-import org.apache.isis.schema.ixn.v1.InteractionExecutionDto;
+import org.apache.isis.schema.ixn.v1.MemberExecutionDto;
 import org.apache.isis.schema.ixn.v1.PropertyEditDto;
-import org.apache.isis.schema.ixn.v1.ValueWithTypeDto;
-import org.apache.isis.schema.utils.jaxbadapters.JavaSqlTimestampXmlGregorianCalendarAdapter;
 
 public final class InteractionDtoUtils {
 
@@ -134,12 +125,11 @@ public final class InteractionDtoUtils {
             final String targetTitle,
             final String actionIdentifier,
             final List<ParamDto> parameterDtos,
-            final ValueWithTypeDto returnDto,
             final String user) {
 
         final InteractionDto interactionDto = newInteractionDto(transactionId);
 
-        final InteractionExecutionDto executionDto = newActionInvocation(
+        final MemberExecutionDto executionDto = newActionInvocation(
                 sequence, targetBookmark, targetTitle,
                 actionIdentifier, parameterDtos,
                 user, transactionId);
@@ -161,7 +151,7 @@ public final class InteractionDtoUtils {
 
         final InteractionDto interactionDto = newInteractionDto(transactionId);
 
-        final InteractionExecutionDto executionDto = newPropertyEdit(
+        final MemberExecutionDto executionDto = newPropertyEdit(
                 sequence, targetBookmark, targetTitle,
                 propertyIdentifier, newValueDto,
                 user, transactionId);
@@ -184,7 +174,7 @@ public final class InteractionDtoUtils {
             final String user,
             final String transactionId) {
 
-        return (ActionInvocationDto) newInteractionExecutionDto(
+        return (ActionInvocationDto) newMemberExecutionDto(
                 InteractionType.ACTION_INVOCATION, transactionId, sequence,
                 targetBookmark, targetTitle, actionIdentifier,
                 parameterDtos, null,
@@ -199,14 +189,14 @@ public final class InteractionDtoUtils {
             final ValueWithTypeDto newValueDto,
             final String user,
             final String transactionId) {
-        return (PropertyEditDto) newInteractionExecutionDto(
+        return (PropertyEditDto) newMemberExecutionDto(
                 InteractionType.PROPERTY_EDIT, transactionId, sequence,
                 targetBookmark, targetTitle, propertyIdentifier,
                 null, newValueDto,
                 user);
     }
 
-    private static InteractionExecutionDto newInteractionExecutionDto(
+    private static MemberExecutionDto newMemberExecutionDto(
             final InteractionType type,
             final String transactionId,
             final int sequence,
@@ -217,7 +207,7 @@ public final class InteractionDtoUtils {
             final ValueWithTypeDto newValueDto,
             final String user) {
 
-        final InteractionExecutionDto executionDto;
+        final MemberExecutionDto executionDto;
         if(type == InteractionType.ACTION_INVOCATION) {
 
             final ActionInvocationDto invocation = new ActionInvocationDto();
@@ -254,7 +244,7 @@ public final class InteractionDtoUtils {
 
     public static void addExecution(
             final InteractionDto interactionDto,
-            final InteractionExecutionDto executionDto) {
+            final MemberExecutionDto executionDto) {
         interactionDto.setExecution(executionDto);
 
         executionDto.setInteractionType(
@@ -266,18 +256,6 @@ public final class InteractionDtoUtils {
 
     //endregion
 
-    //region > addTimings
-    public static void addTimings(
-            final InteractionExecutionDto executionDto,
-            final Timestamp startedAt,
-            final Timestamp completedAt) {
-        final PeriodDto timings = timingsFor(executionDto);
-        timings.setStart(JavaSqlTimestampXmlGregorianCalendarAdapter.print(startedAt));
-        timings.setComplete(JavaSqlTimestampXmlGregorianCalendarAdapter.print(completedAt));
-    }
-
-    //endregion
-
     //region > invocationFor, actionFor, timingsFor
 
     private static ActionInvocationDto actionInvocationFor(final InteractionDto interactionDto) {
@@ -308,7 +286,7 @@ public final class InteractionDtoUtils {
         return invocationDto.getParameters().getParameter();
     }
 
-    private static PeriodDto timingsFor(final InteractionExecutionDto executionDto) {
+    private static PeriodDto timingsFor(final MemberExecutionDto executionDto) {
         PeriodDto timings = executionDto.getTimings();
         if(timings == null) {
             timings = new PeriodDto();
@@ -322,15 +300,17 @@ public final class InteractionDtoUtils {
     //region > addParamArg
 
     public static void addParamArg(
-            final InteractionDto ixn,
+            final InteractionDto interactionDto,
             final String parameterName,
             final Class<?> parameterType,
             final Object arg,
             final BookmarkService bookmarkService) {
 
-        final List<ParamDto> params = parametersFor(ixn);
-        CommandDtoUtils.addParamArg(params, parameterName, parameterType, arg, bookmarkService);
+        final List<ParamDto> params = parametersFor(interactionDto);
+        ParamDto paramDto = CommonDtoUtils.newParamDto(parameterName, parameterType, arg, bookmarkService);
+        params.add(paramDto);
     }
+    //endregion
 
     //region > addReturn
 
@@ -340,41 +320,16 @@ public final class InteractionDtoUtils {
      * @param result - either a value type (possibly boxed primitive), or a reference type
      * @param bookmarkService - used if not a value type
      */
-    // REVIEW: done in InteractionDtoServiceInternalDefault, I believe
-    private static void addReturn(
+    public static void addReturn(
             final ActionInvocationDto invocationDto,
             final Class<?> returnType,
             final Object result, final BookmarkService bookmarkService) {
-        final ValueWithTypeDto returnDto = returnValueFor(invocationDto);
-        boolean isValueType = setValue(returnDto, returnType, result);
-        if(!isValueType) {
-            addReturnReference(bookmarkService.bookmarkFor(result), invocationDto);
-        }
+        final ValueWithTypeDto returned = CommonDtoUtils
+                .newValueWithTypeDto(returnType, result, bookmarkService);
+        invocationDto.setReturned(returned);
     }
-
-    // REVIEW: done in InteractionDtoServiceInternalDefault, I believe
-    private static void addReturnReference(final Bookmark bookmark, final ActionInvocationDto invocationDto) {
-        final ValueWithTypeDto returnedDto = returnValueFor(invocationDto);
-        OidDto oidDto = CommonDtoUtils.asOidDto(bookmark);
-        ValueDto value = new ValueDto();
-        value.setReference(oidDto);
-        returnedDto.setValue(value);
-        returnedDto.setType(ValueType.REFERENCE);
-    }
-
-    // REVIEW: done in InteractionDtoServiceInternalDefault, I believe
-    private static ValueWithTypeDto returnValueFor(final ActionInvocationDto invocationDto) {
-        ValueWithTypeDto returned = invocationDto.getReturned();
-        if(returned == null) {
-            returned = new ValueWithTypeDto();
-            invocationDto.setReturned(returned);
-        }
-        return returned;
-    }
-
     //endregion
 
-
     //region > getParameters, getParameterNames, getParameterTypes
     public static List<ParamDto> getParameters(final ActionInvocationDto ai) {
         final List<ParamDto> params = parametersFor(ai);
@@ -398,9 +353,14 @@ public final class InteractionDtoUtils {
     public static List<ValueType> getParameterTypes(final ActionInvocationDto ai) {
         return immutableList(Iterables.transform(getParameters(ai), CommonDtoUtils.PARAM_DTO_TO_TYPE));
     }
+
+    private static <T> List<T> immutableList(final Iterable<T> iterable) {
+        return Collections.unmodifiableList(Lists.newArrayList(iterable));
+    }
+
     //endregion
 
-    //region > getParameter, getParameterName, getParameterType
+    //region > getParameter, getParameterName, getParameterType, getParameterArgument
     public static ParamDto getParameter(final ActionInvocationDto ai, final int paramNum) {
         final int parameterNumber = getNumberOfParameters(ai);
         if(paramNum > parameterNumber) {
@@ -410,17 +370,19 @@ public final class InteractionDtoUtils {
         return parameters.get(paramNum);
     }
 
-    public static ValueDto getParameterArg(final ActionInvocationDto ai, final int paramNum) {
+    public static ValueDto getParameterArgument(final ActionInvocationDto ai, final int paramNum) {
         final ParamDto paramDto = getParameter(ai, paramNum);
-        return CommandDtoUtils.argumentFor(paramDto);
+        return paramDto.getArgument();
     }
 
-
     public static String getParameterName(final ActionInvocationDto ai, final int paramNum) {
-        return CommonDtoUtils.PARAM_DTO_TO_NAME.apply(getParameter(ai, paramNum));
+        final ParamDto paramDto = getParameter(ai, paramNum);
+        return paramDto.getParameterName();
     }
+
     public static ValueType getParameterType(final ActionInvocationDto ai, final int paramNum) {
-        return CommonDtoUtils.PARAM_DTO_TO_TYPE.apply(getParameter(ai, paramNum));
+        final ParamDto paramDto = getParameter(ai, paramNum);
+        return paramDto.getParameterType();
     }
     public static boolean isNull(final ActionInvocationDto ai, int paramNum) {
         final ParamDto paramDto = getParameter(ai, paramNum);
@@ -428,96 +390,15 @@ public final class InteractionDtoUtils {
     }
     //endregion
 
-    //region > getArg
-    public static <T> T getArg(final ActionInvocationDto ai, int paramNum, Class<T> cls) {
+    //region > getParameterArgValue
+    public static <T> T getParameterArgValue(final ActionInvocationDto ai, int paramNum, Class<T> inferClass) {
         final ParamDto paramDto = getParameter(ai, paramNum);
-        if(paramDto.isNull()) {
-            return null;
-        }
-        final ValueDto valueDto = CommandDtoUtils.argumentFor(paramDto);
-        final ValueType parameterType = paramDto.getParameterType();
-        return CommonDtoUtils.getValue(valueDto, parameterType);
-    }
-
-    //endregion
-
-
-    private static <T> List<T> immutableList(final Iterable<T> iterable) {
-        return Collections.unmodifiableList(Lists.newArrayList(iterable));
+        return CommonDtoUtils.getValue(paramDto);
     }
-
-    public static boolean setValue(
-            final ValueWithTypeDto returnDto,
-            final Class<?> type,
-            final Object val) {
-        if(val == null) {
-            returnDto.setNull(true);
-            return true;
-        } else {
-            returnDto.setNull(false);
-            final ValueDto valueDto = new ValueDto();
-            returnDto.setValue(valueDto);
-            setValueType(returnDto, type);
-            return CommonDtoUtils.setValue(valueDto, type, val);
-        }
-    }
-
-    private static boolean setValueType(
-            final ValueWithTypeDto returnDto,
-            final Class<?> type) {
-        if(type == String.class) {
-            returnDto.setType(ValueType.STRING);
-        } else
-        if(type == byte.class || type == Byte.class) {
-            returnDto.setType(ValueType.BYTE);
-        } else
-        if(type == short.class || type == Short.class) {
-            returnDto.setType(ValueType.SHORT);
-        }else
-        if(type == int.class || type == Integer.class) {
-            returnDto.setType(ValueType.INT);
-        }else
-        if(type == long.class || type == Long.class) {
-            returnDto.setType(ValueType.LONG);
-        }else
-        if(type == char.class || type == Character.class) {
-            returnDto.setType(ValueType.CHAR);
-        }else
-        if(type == boolean.class || type == Boolean.class) {
-            returnDto.setType(ValueType.BOOLEAN);
-        }else
-        if(type == float.class || type == Float.class) {
-            returnDto.setType(ValueType.FLOAT);
-        }else
-        if(type == double.class || type == Double.class) {
-            returnDto.setType(ValueType.DOUBLE);
-        }else
-        if(type == BigInteger.class) {
-            returnDto.setType(ValueType.BIG_INTEGER);
-        }else
-        if(type == BigDecimal.class) {
-            returnDto.setType(ValueType.BIG_DECIMAL);
-        }else
-        if(type == DateTime.class) {
-            returnDto.setType(ValueType.JODA_DATE_TIME);
-        }else
-        if(type == LocalDateTime.class) {
-            returnDto.setType(ValueType.JODA_LOCAL_DATE_TIME);
-        }else
-        if(type == LocalDate.class) {
-            returnDto.setType(ValueType.JODA_LOCAL_DATE);
-        }else
-        if(type == LocalTime.class) {
-            returnDto.setType(ValueType.JODA_LOCAL_TIME);
-        }else
-        {
-            // none of the supported value types
-            return false;
-        }
-        return true;
+    public static <T> T getParameterArgValue(final ActionInvocationDto ai, int paramNum) {
+        final ParamDto paramDto = getParameter(ai, paramNum);
+        return CommonDtoUtils.getValue(paramDto);
     }
-
-
     //endregion
 
     //region > debugging
@@ -527,5 +408,4 @@ public final class InteractionDtoUtils {
 
     //endregion
 
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/18c6b495/core/applib/src/test/java/org/apache/isis/schema/utils/CommonDtoUtilsTest.java
----------------------------------------------------------------------
diff --git a/core/applib/src/test/java/org/apache/isis/schema/utils/CommonDtoUtilsTest.java b/core/applib/src/test/java/org/apache/isis/schema/utils/CommonDtoUtilsTest.java
index 2b45322..b07dc43 100644
--- a/core/applib/src/test/java/org/apache/isis/schema/utils/CommonDtoUtilsTest.java
+++ b/core/applib/src/test/java/org/apache/isis/schema/utils/CommonDtoUtilsTest.java
@@ -18,30 +18,31 @@
  */
 package org.apache.isis.schema.utils;
 
+import org.jmock.auto.Mock;
+import org.junit.Assert;
+import org.junit.Rule;
 import org.junit.Test;
 
+import org.apache.isis.applib.services.bookmark.BookmarkService;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
 import org.apache.isis.schema.common.v1.ValueDto;
 import org.apache.isis.schema.common.v1.ValueType;
 
-import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.junit.Assert.assertThat;
 
 public class CommonDtoUtilsTest {
 
-    @Test
-    public void enums() throws Exception {
-
-        ValueDto valueDto = new ValueDto();
-        boolean b = CommonDtoUtils.setValue(valueDto, Vertical.class, Vertical.DOWN);
+    @Rule
+    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(JUnitRuleMockery2.Mode.INTERFACES_AND_CLASSES);
 
-        assertThat(b, is(true));
+    @Mock
+    private BookmarkService mockBookmarkService;
 
-        Object value = CommonDtoUtils.getValue(valueDto, ValueType.ENUM);
-        assertThat(value, is(notNullValue()));
-
-        assertThat((Vertical)value, is(equalTo(Vertical.DOWN)));
+    @Test
+    public void enums() throws Exception {
+        test(Vertical.DOWN);
     }
 
     enum Horizontal {
@@ -50,17 +51,25 @@ public class CommonDtoUtilsTest {
 
     @Test
     public void nested_enums() throws Exception {
+        test(Horizontal.LEFT);
+    }
+
+    private void test(final Enum<?> enumVal) {
 
-        ValueDto valueDto = new ValueDto();
-        boolean b = CommonDtoUtils.setValue(valueDto, Horizontal.class, Horizontal.LEFT);
+        // when
+        final ValueType valueType = CommonDtoUtils.asValueType(enumVal.getClass());
 
-        assertThat(b, is(true));
+        // then
+        assertThat(valueType, is(ValueType.ENUM));
 
-        Object value = CommonDtoUtils.getValue(valueDto, ValueType.ENUM);
+        // and when
+        final ValueDto valueDto = CommonDtoUtils.newValueDto(valueType, enumVal, mockBookmarkService);
+
+        // then
+        Object value = CommonDtoUtils.getValue(valueDto, valueType);
         assertThat(value, is(notNullValue()));
 
-        assertThat((Horizontal)value, is(equalTo(Horizontal.LEFT)));
+        Assert.assertEquals(value, enumVal);
     }
 
-
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/18c6b495/core/applib/src/test/java/org/apache/isis/schema/utils/Roundtrip.java
----------------------------------------------------------------------
diff --git a/core/applib/src/test/java/org/apache/isis/schema/utils/Roundtrip.java b/core/applib/src/test/java/org/apache/isis/schema/utils/Roundtrip.java
index a0aa7e1..127e771 100644
--- a/core/applib/src/test/java/org/apache/isis/schema/utils/Roundtrip.java
+++ b/core/applib/src/test/java/org/apache/isis/schema/utils/Roundtrip.java
@@ -36,9 +36,9 @@ import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.schema.cmd.v1.ParamDto;
 import org.apache.isis.schema.common.v1.OidDto;
 import org.apache.isis.schema.common.v1.ValueType;
+import org.apache.isis.schema.common.v1.ValueWithTypeDto;
 import org.apache.isis.schema.ixn.v1.ActionInvocationDto;
 import org.apache.isis.schema.ixn.v1.InteractionDto;
-import org.apache.isis.schema.ixn.v1.ValueWithTypeDto;
 
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.nullValue;
@@ -62,7 +62,8 @@ public class Roundtrip {
         final InteractionDto interactionDto = InteractionDtoUtils.newInteractionDtoWithActionInvocation(
                 UUID.randomUUID().toString(),
                 1,
-                new Bookmark("CUS", "12345"), "John Customer", "com.mycompany.Customer#placeOrder", Arrays.<ParamDto>asList(), returnDto, "freddyUser"
+                new Bookmark("CUS", "12345"), "John Customer", "com.mycompany.Customer#placeOrder", Arrays.<ParamDto>asList(),
+                "freddyUser"
         );
 
         InteractionDtoUtils.addParamArg(interactionDto, "aString", String.class, "Fred", null);
@@ -141,19 +142,19 @@ public class Roundtrip {
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("aString"));
         assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.STRING));
         assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(false));
-        assertThat(InteractionDtoUtils.getArg(invocationDto, param, String.class), is("Fred"));
+        assertThat(InteractionDtoUtils.getParameterArgValue(invocationDto, param, String.class), is("Fred"));
 
         param++;
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("nullString"));
         assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.STRING));
         assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(true));
-        assertThat(InteractionDtoUtils.getArg(invocationDto, param, String.class), is(nullValue()));
+        assertThat(InteractionDtoUtils.getParameterArgValue(invocationDto, param, String.class), is(nullValue()));
 
         param++;
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("aByte"));
         assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.BYTE));
         assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(false));
-        assertThat(InteractionDtoUtils.getArg(invocationDto, param, Byte.class), is((byte) 123));
+        assertThat(InteractionDtoUtils.getParameterArgValue(invocationDto, param, Byte.class), is((byte) 123));
 
         param++;
         assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.BYTE));
@@ -164,7 +165,7 @@ public class Roundtrip {
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("aShort"));
         assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.SHORT));
         assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(false));
-        assertThat(InteractionDtoUtils.getArg(invocationDto, param, Short.class), is((short) 32123));
+        assertThat(InteractionDtoUtils.getParameterArgValue(invocationDto, param, Short.class), is((short) 32123));
 
         param++;
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("nullShort"));
@@ -175,7 +176,7 @@ public class Roundtrip {
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("anInt"));
         assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.INT));
         assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(false));
-        assertThat(InteractionDtoUtils.getArg(invocationDto, param, int.class), is((int) 123454321));
+        assertThat(InteractionDtoUtils.getParameterArgValue(invocationDto, param, int.class), is((int) 123454321));
 
         param++;
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("nullInt"));
@@ -186,7 +187,7 @@ public class Roundtrip {
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("aLong"));
         assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.LONG));
         assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(false));
-        assertThat(InteractionDtoUtils.getArg(invocationDto, param, long.class), is((long) 1234567654321L));
+        assertThat(InteractionDtoUtils.getParameterArgValue(invocationDto, param, long.class), is((long) 1234567654321L));
 
         param++;
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("nullLong"));
@@ -197,7 +198,7 @@ public class Roundtrip {
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("aFloat"));
         assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.FLOAT));
         assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(false));
-        assertThat(InteractionDtoUtils.getArg(invocationDto, param, float.class), is((float) 12345.6789F));
+        assertThat(InteractionDtoUtils.getParameterArgValue(invocationDto, param, float.class), is((float) 12345.6789F));
 
         param++;
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("nullFloat"));
@@ -208,7 +209,7 @@ public class Roundtrip {
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("aDouble"));
         assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.DOUBLE));
         assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(false));
-        assertThat(InteractionDtoUtils.getArg(invocationDto, param, double.class), is(12345678.90123));
+        assertThat(InteractionDtoUtils.getParameterArgValue(invocationDto, param, double.class), is(12345678.90123));
 
         param++;
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("nullDouble"));
@@ -219,7 +220,7 @@ public class Roundtrip {
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("aBoolean"));
         assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.BOOLEAN));
         assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(false));
-        assertThat(InteractionDtoUtils.getArg(invocationDto, param, boolean.class), is(true));
+        assertThat(InteractionDtoUtils.getParameterArgValue(invocationDto, param, boolean.class), is(true));
 
         param++;
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("nullBoolean"));
@@ -230,7 +231,7 @@ public class Roundtrip {
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("aChar"));
         assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.CHAR));
         assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(false));
-        assertThat(InteractionDtoUtils.getArg(invocationDto, param, char.class), is('x'));
+        assertThat(InteractionDtoUtils.getParameterArgValue(invocationDto, param, char.class), is('x'));
 
         param++;
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("nullChar"));
@@ -241,7 +242,7 @@ public class Roundtrip {
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("aBigInteger"));
         assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.BIG_INTEGER));
         assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(false));
-        assertThat(InteractionDtoUtils.getArg(invocationDto, param, BigInteger.class), is(new java.math.BigInteger("12345678901234567890")));
+        assertThat(InteractionDtoUtils.getParameterArgValue(invocationDto, param, BigInteger.class), is(new java.math.BigInteger("12345678901234567890")));
 
         param++;
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("nullBigInteger"));
@@ -252,7 +253,7 @@ public class Roundtrip {
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("aBigDecimal"));
         assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.BIG_DECIMAL));
         assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(false));
-        assertThat(InteractionDtoUtils.getArg(invocationDto, param, BigDecimal.class), is(new java.math.BigDecimal("12345678901234567890")));
+        assertThat(InteractionDtoUtils.getParameterArgValue(invocationDto, param, BigDecimal.class), is(new java.math.BigDecimal("12345678901234567890")));
 
         param++;
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("nullBigDecimal"));
@@ -265,7 +266,7 @@ public class Roundtrip {
         assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(false));
         // bit hacky... regular comparison fails but toString() works... must be some additional data that differs, not sure what tho'
         assertThat(
-                InteractionDtoUtils.getArg(invocationDto, param, DateTime.class).toString(), is(new DateTime(2015, 5, 23, 9, 54, 1).toString()));
+                InteractionDtoUtils.getParameterArgValue(invocationDto, param, DateTime.class).toString(), is(new DateTime(2015, 5, 23, 9, 54, 1).toString()));
 
         param++;
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("nullJodaDateTime"));
@@ -276,7 +277,7 @@ public class Roundtrip {
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("aJodaLocalDate"));
         assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.JODA_LOCAL_DATE));
         assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(false));
-        final LocalDate actual = InteractionDtoUtils.getArg(invocationDto, param, LocalDate.class);
+        final LocalDate actual = InteractionDtoUtils.getParameterArgValue(invocationDto, param, LocalDate.class);
         final LocalDate expected = new LocalDate(2015, 5, 23);
         assertThat(actual, equalTo(expected));
 
@@ -289,7 +290,7 @@ public class Roundtrip {
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("aJodaLocalDateTime"));
         assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.JODA_LOCAL_DATE_TIME));
         assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(false));
-        assertThat(InteractionDtoUtils.getArg(invocationDto, param, LocalDateTime.class), is(new org.joda.time.LocalDateTime(2015, 5, 23, 9, 54, 1)));
+        assertThat(InteractionDtoUtils.getParameterArgValue(invocationDto, param, LocalDateTime.class), is(new org.joda.time.LocalDateTime(2015, 5, 23, 9, 54, 1)));
 
         param++;
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("nullJodaLocalDateTime"));
@@ -301,7 +302,7 @@ public class Roundtrip {
         assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.JODA_LOCAL_TIME));
         assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(false));
         assertThat(
-                InteractionDtoUtils.getArg(invocationDto, param, LocalTime.class), is(new org.joda.time.LocalTime(9, 54, 1)));
+                InteractionDtoUtils.getParameterArgValue(invocationDto, param, LocalTime.class), is(new org.joda.time.LocalTime(9, 54, 1)));
 
         param++;
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("nullJodaLocalTime"));
@@ -312,8 +313,8 @@ public class Roundtrip {
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("aReference"));
         assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.REFERENCE));
         assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(false));
-        assertThat(InteractionDtoUtils.getArg(invocationDto, param, OidDto.class).getObjectType(), is("ORD"));
-        assertThat(InteractionDtoUtils.getArg(invocationDto, param, OidDto.class).getObjectIdentifier(), is("12345"));
+        assertThat(InteractionDtoUtils.getParameterArgValue(invocationDto, param, OidDto.class).getObjectType(), is("ORD"));
+        assertThat(InteractionDtoUtils.getParameterArgValue(invocationDto, param, OidDto.class).getObjectIdentifier(), is("12345"));
 
         param++;
         assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("nullReference"));

http://git-wip-us.apache.org/repos/asf/isis/blob/18c6b495/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
index 2eb5b4e..8a123ee 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
@@ -54,7 +54,8 @@ import org.apache.isis.schema.cmd.v1.ParamDto;
 import org.apache.isis.schema.cmd.v1.PropertyDto;
 import org.apache.isis.schema.common.v1.InteractionType;
 import org.apache.isis.schema.common.v1.OidDto;
-import org.apache.isis.schema.utils.CommandDtoUtils;
+import org.apache.isis.schema.common.v1.ValueWithTypeDto;
+import org.apache.isis.schema.utils.CommonDtoUtils;
 
 /**
  * Intended to be used as a base class for executing queued up {@link Command background action}s.
@@ -266,8 +267,8 @@ public abstract class BackgroundCommandExecution extends AbstractIsisSessionTemp
     }
 
     protected ObjectAdapter newValueAdapterFor(final PropertyDto propertyDto) {
-        final ParamDto paramDto = propertyDto.getNewValue();
-        final Object arg = CommandDtoUtils.paramArgOf(paramDto);
+        final ValueWithTypeDto newValue = propertyDto.getNewValue();
+        final Object arg = CommonDtoUtils.getValue(newValue);
         return adapterFor(arg);
     }
 
@@ -327,12 +328,12 @@ public abstract class BackgroundCommandExecution extends AbstractIsisSessionTemp
     }
 
     private ObjectAdapter[] argAdaptersFor(final ActionDto actionDto) {
-        final List<ParamDto> params = actionDto.getParameters();
+        final List<ParamDto> params = actionDto.getParameters().getParameter();
         final List<ObjectAdapter> args = Lists.newArrayList(
                 Iterables.transform(params, new Function<ParamDto, ObjectAdapter>() {
                     @Override
                     public ObjectAdapter apply(final ParamDto paramDto) {
-                        final Object arg = CommandDtoUtils.paramArgOf(paramDto);
+                        final Object arg = CommonDtoUtils.getValue(paramDto);
                         return adapterFor(arg);
                     }
                 })

http://git-wip-us.apache.org/repos/asf/isis/blob/18c6b495/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
index c64c18f..c55b347 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
@@ -50,7 +50,8 @@ import org.apache.isis.schema.cmd.v1.CommandDto;
 import org.apache.isis.schema.cmd.v1.ParamDto;
 import org.apache.isis.schema.cmd.v1.PropertyDto;
 import org.apache.isis.schema.common.v1.InteractionType;
-import org.apache.isis.schema.utils.CommandDtoUtils;
+import org.apache.isis.schema.common.v1.ValueWithTypeDto;
+import org.apache.isis.schema.utils.CommonDtoUtils;
 
 @DomainService(
         nature = NatureOfService.DOMAIN
@@ -202,9 +203,10 @@ public class CommandDtoServiceInternalDefault implements CommandDtoServiceIntern
             final Class<?> paramType = actionParameter.getSpecification().getCorrespondingClass();
             final ObjectAdapter argAdapter = argAdapters[paramNum];
             final Object arg = argAdapter != null? argAdapter.getObject(): null;
-            final List<ParamDto> parameters = actionDto.getParameters();
+            final List<ParamDto> parameters = actionDto.getParameters().getParameter();
 
-            ParamDto paramDto = CommandDtoUtils.newParamDto(parameterName, paramType, arg, bookmarkService);
+            ParamDto paramDto = CommonDtoUtils.newParamDto(
+                    parameterName, paramType, arg, bookmarkService);
             parameters.add(paramDto);
         }
     }
@@ -221,9 +223,9 @@ public class CommandDtoServiceInternalDefault implements CommandDtoServiceIntern
         final ObjectSpecification valueSpec = property.getSpecification();
         final Class<?> valueType = valueSpec.getCorrespondingClass();
 
-        final ParamDto paramDto = CommandDtoUtils.newParamDto(
-                "newValue", valueType, ObjectAdapter.Util.unwrap(valueAdapter), bookmarkService);
-        propertyDto.setNewValue(paramDto);
+        final ValueWithTypeDto newValue = CommonDtoUtils.newValueWithTypeDto(
+                valueType, ObjectAdapter.Util.unwrap(valueAdapter), bookmarkService);
+        propertyDto.setNewValue(newValue);
     }
 
     // //////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/18c6b495/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
index 14b096f..abac5a5 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
@@ -43,7 +43,6 @@ import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.schema.cmd.v1.ActionDto;
 import org.apache.isis.schema.ixn.v1.ActionInvocationDto;
 import org.apache.isis.schema.ixn.v1.PropertyEditDto;
-import org.apache.isis.schema.ixn.v1.ValueWithTypeDto;
 import org.apache.isis.schema.utils.InteractionDtoUtils;
 
 @DomainService(nature = NatureOfService.DOMAIN)
@@ -81,7 +80,7 @@ public class InteractionDtoServiceInternalDefault implements InteractionDtoServi
         // InteractionDtoUtils.addReturn(invocationDto, returnType, resultPojo, bookmarkService);
         return InteractionDtoUtils.newActionInvocation(
                 nextEventSequence, targetBookmark, targetTitle,
-                actionDto.getMemberIdentifier(), actionDto.getParameters(), currentUser,
+                actionDto.getMemberIdentifier(), actionDto.getParameters().getParameter(), currentUser,
                 transactionIdStr);
     }
 
@@ -92,11 +91,10 @@ public class InteractionDtoServiceInternalDefault implements InteractionDtoServi
             final Object resultPojo) {
 
         final ObjectSpecification returnSpec = objectAction.getReturnType();
-
         final Class<?> returnType = returnSpec.getCorrespondingClass();
 
-        final ValueWithTypeDto returnDto = new ValueWithTypeDto();
-        InteractionDtoUtils.setValue(returnDto, returnType, resultPojo);
+        InteractionDtoUtils.addReturn(
+                actionInvocationDto, returnType, resultPojo, bookmarkService);
 
         return actionInvocationDto;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/18c6b495/core/runtime/src/main/java/org/apache/isis/core/runtime/services/publishing/PublishingServiceInternalDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/publishing/PublishingServiceInternalDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/publishing/PublishingServiceInternalDefault.java
index 6340285..d0f1661 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/publishing/PublishingServiceInternalDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/publishing/PublishingServiceInternalDefault.java
@@ -69,7 +69,7 @@ import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
 import org.apache.isis.schema.ixn.v1.InteractionDto;
-import org.apache.isis.schema.ixn.v1.InteractionExecutionDto;
+import org.apache.isis.schema.ixn.v1.MemberExecutionDto;
 import org.apache.isis.schema.utils.InteractionDtoUtils;
 
 /**
@@ -323,7 +323,7 @@ public class PublishingServiceInternalDefault implements PublishingServiceIntern
         // TODO: this is where we could now stitch together a deep call graph from the execution.getDto()s
         //
 
-        final InteractionExecutionDto executionDto = execution.getDto();
+        final MemberExecutionDto executionDto = execution.getDto();
 
         final String transactionId = commandContext.getCommand().getTransactionId().toString();
         final InteractionDto interactionDto = InteractionDtoUtils.newInteractionDto(transactionId);

http://git-wip-us.apache.org/repos/asf/isis/blob/18c6b495/core/schema/src/main/resources/org/apache/isis/schema/cmd/cmd-1.0.xsd
----------------------------------------------------------------------
diff --git a/core/schema/src/main/resources/org/apache/isis/schema/cmd/cmd-1.0.xsd b/core/schema/src/main/resources/org/apache/isis/schema/cmd/cmd-1.0.xsd
index 4be3695..5d6cee9 100644
--- a/core/schema/src/main/resources/org/apache/isis/schema/cmd/cmd-1.0.xsd
+++ b/core/schema/src/main/resources/org/apache/isis/schema/cmd/cmd-1.0.xsd
@@ -100,9 +100,18 @@
         <xs:complexContent>
             <xs:extension base="memberDto">
                 <xs:sequence>
-                    <xs:sequence minOccurs="0" maxOccurs="unbounded">
-                        <xs:element name="parameters" type="paramDto"/>
-                    </xs:sequence>
+                    <xs:element name="parameters" minOccurs="1" maxOccurs="1">
+                        <xs:annotation>
+                            <xs:documentation>
+                                The set of parameter/argument values for this action invocation.
+                            </xs:documentation>
+                        </xs:annotation>
+                        <xs:complexType>
+                            <xs:sequence minOccurs="0" maxOccurs="unbounded">
+                                <xs:element name="parameter" type="paramDto"/>
+                            </xs:sequence>
+                        </xs:complexType>
+                    </xs:element>
                 </xs:sequence>
             </xs:extension>
         </xs:complexContent>
@@ -116,7 +125,7 @@
         <xs:complexContent>
             <xs:extension base="memberDto">
                 <xs:sequence>
-                    <xs:element name="newValue" type="paramDto"/>
+                    <xs:element name="newValue" type="common:valueWithTypeDto"/>
                 </xs:sequence>
             </xs:extension>
         </xs:complexContent>

http://git-wip-us.apache.org/repos/asf/isis/blob/18c6b495/core/schema/src/main/resources/org/apache/isis/schema/common/common-1.0.xsd
----------------------------------------------------------------------
diff --git a/core/schema/src/main/resources/org/apache/isis/schema/common/common-1.0.xsd b/core/schema/src/main/resources/org/apache/isis/schema/common/common-1.0.xsd
index acab2cd..6ab8ae6 100644
--- a/core/schema/src/main/resources/org/apache/isis/schema/common/common-1.0.xsd
+++ b/core/schema/src/main/resources/org/apache/isis/schema/common/common-1.0.xsd
@@ -39,6 +39,7 @@
             <xs:element name="localDate" type="xs:date"/>
             <xs:element name="localDateTime" type="xs:dateTime"/>
             <xs:element name="localTime" type="xs:time"/>
+            <xs:element name="timestamp" type="xs:dateTime"/>
             <xs:element name="enum" type="enumDto"/>
             <xs:element name="reference" type="oidDto"/>
         </xs:choice>
@@ -80,7 +81,7 @@
             <xs:enumeration value="char"/>
             <xs:enumeration value="bigInteger"/>
             <xs:enumeration value="bigDecimal"/>
-            <xs:enumeration value="javaUtilDate"/>
+            <xs:enumeration value="javaSqlTimestamp"/>
             <xs:enumeration value="jodaDateTime"/>
             <xs:enumeration value="jodaLocalDate"/>
             <xs:enumeration value="jodaLocalTime"/>
@@ -103,13 +104,13 @@
             </xs:documentation>
         </xs:annotation>
         <xs:sequence>
-            <xs:element name="start" type="xs:dateTime">
+            <xs:element name="startedAt" type="xs:dateTime">
                 <xs:annotation>
                     <xs:documentation>The point in time that this period of time started.
                     </xs:documentation>
                 </xs:annotation>
             </xs:element>
-            <xs:element name="complete" type="xs:dateTime" minOccurs="0" maxOccurs="1">
+            <xs:element name="completedAt" type="xs:dateTime" minOccurs="0" maxOccurs="1">
                 <xs:annotation>
                     <xs:documentation>The point in time that this period of time completed.  The duration is the difference between 'start' and 'complete'.
                     </xs:documentation>
@@ -118,6 +119,19 @@
         </xs:sequence>
     </xs:complexType>
 
+    <xs:complexType name="valueWithTypeDto">
+        <xs:annotation>
+            <xs:documentation>Captures both a value and its corresponding type.  Used for the return value of action invocations, and for the new value in property edits.
+            </xs:documentation>
+        </xs:annotation>
+        <xs:sequence>
+            <xs:element name="value" type="valueDto"/>
+        </xs:sequence>
+        <xs:attribute name="type" use="required" type="valueType"/>
+        <xs:attribute name="null" use="optional" type="xs:boolean"/>
+    </xs:complexType>
+
+
     <xs:simpleType name="interactionType" >
         <xs:annotation>
             <xs:documentation>Whether this interaction with a member is invoking an action, or editing a property.</xs:documentation>

http://git-wip-us.apache.org/repos/asf/isis/blob/18c6b495/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd
----------------------------------------------------------------------
diff --git a/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd b/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd
index 968dd9e..6977fa5 100644
--- a/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd
+++ b/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd
@@ -53,13 +53,13 @@
                         </xs:documentation>
                     </xs:annotation>
                 </xs:element>
-                <xs:element name="execution" type="interactionExecutionDto"/>
+                <xs:element name="execution" type="memberExecutionDto"/>
             </xs:sequence>
         </xs:complexType>
 
     </xs:element>
 
-    <xs:complexType name="interactionExecutionDto" abstract="true">
+    <xs:complexType name="memberExecutionDto" abstract="true">
         <xs:annotation>
             <xs:documentation>Represents either an action invocation or a property edit.  Is subclassed by both.
             </xs:documentation>
@@ -122,7 +122,7 @@
             <xs:element name="childExecutions" minOccurs="1" maxOccurs="1">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element name="execution" type="interactionExecutionDto" minOccurs="0" maxOccurs="unbounded">
+                        <xs:element name="execution" type="memberExecutionDto" minOccurs="0" maxOccurs="unbounded">
                             <xs:annotation>
                                 <xs:documentation>Capture interactions with other members from this interaction, using the WrapperFactory service.  Typically this will be actions invoking other actions, but it is also possible for an action to perform a property edit, and - much rarer - for a property edit to invoke an action.  Whatever; these interactions nest together into a call/stack, more generally into a graph.
                                 </xs:documentation>
@@ -136,7 +136,7 @@
 
     <xs:complexType name="actionInvocationDto">
         <xs:complexContent>
-            <xs:extension base="interactionExecutionDto">
+            <xs:extension base="memberExecutionDto">
                 <xs:sequence>
                     <xs:element name="parameters" minOccurs="1" maxOccurs="1">
                         <xs:annotation>
@@ -150,7 +150,7 @@
                             </xs:sequence>
                         </xs:complexType>
                     </xs:element>
-                    <xs:element name="returned" type="valueWithTypeDto" minOccurs="0" maxOccurs="1">
+                    <xs:element name="returned" type="common:valueWithTypeDto" minOccurs="0" maxOccurs="1">
                         <xs:annotation>
                             <xs:documentation>The value returned by this action (including the type of that returned value).  Either the 'returned' or the 'threw' element (from 'memberInteractionDto') will be populated.
                             </xs:documentation>
@@ -163,26 +163,14 @@
 
     <xs:complexType name="propertyEditDto">
         <xs:complexContent>
-            <xs:extension base="interactionExecutionDto">
+            <xs:extension base="memberExecutionDto">
                 <xs:sequence>
-                    <xs:element name="newValue" type="valueWithTypeDto"/>
+                    <xs:element name="newValue" type="common:valueWithTypeDto"/>
                 </xs:sequence>
             </xs:extension>
         </xs:complexContent>
     </xs:complexType>
 
-    <xs:complexType name="valueWithTypeDto">
-        <xs:annotation>
-            <xs:documentation>Captures both a value and its corresponding type.  Used for the return value of action invocations, and for the new value in property edits.
-            </xs:documentation>
-        </xs:annotation>
-        <xs:sequence>
-            <xs:element name="value" type="common:valueDto"/>
-        </xs:sequence>
-        <xs:attribute name="type" use="required" type="common:valueType"/>
-        <xs:attribute name="null" use="optional" type="xs:boolean"/>
-    </xs:complexType>
-
     <xs:complexType name="exceptionDto">
         <xs:annotation>
             <xs:documentation>Captures any exception thrown by an action invocation.  Use as the xsd:type of the 'threw' element.


[5/8] isis git commit: ISIS-1389: renaming PropertyModification to PropertyEdit.

Posted by da...@apache.org.
ISIS-1389: renaming PropertyModification to PropertyEdit.


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

Branch: refs/heads/ISIS-1291
Commit: d08a4e18450e480779eee328de38d3c14088e357
Parents: 501fcb8
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed May 4 00:36:15 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed May 4 00:36:15 2016 +0100

----------------------------------------------------------------------
 .../isis/applib/services/iactn/Interaction.java | 16 ++++-----
 .../isis/schema/utils/InteractionDtoUtils.java  | 36 ++++++++++----------
 .../org/apache/isis/schema/utils/Roundtrip.java |  2 +-
 ...etterOrClearFacetForDomainEventAbstract.java |  8 ++---
 .../ixn/InteractionDtoServiceInternal.java      |  4 +--
 .../CommandDtoServiceInternalDefault.java       |  6 ++--
 .../InteractionDtoServiceInternalDefault.java   |  4 +--
 .../apache/isis/schema/common/common-1.0.xsd    |  4 +--
 .../org/apache/isis/schema/ixn/ixn-1.0.xsd      | 16 ++++-----
 9 files changed, 48 insertions(+), 48 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/d08a4e18/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 3479eaf..ea95a6c 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
@@ -43,7 +43,7 @@ import org.apache.isis.schema.common.v1.InteractionType;
 import org.apache.isis.schema.common.v1.PeriodDto;
 import org.apache.isis.schema.ixn.v1.ActionInvocationDto;
 import org.apache.isis.schema.ixn.v1.InteractionExecutionDto;
-import org.apache.isis.schema.ixn.v1.PropertyModificationDto;
+import org.apache.isis.schema.ixn.v1.PropertyEditDto;
 import org.apache.isis.schema.utils.jaxbadapters.JavaSqlTimestampXmlGregorianCalendarAdapter;
 
 /**
@@ -319,16 +319,16 @@ public class Interaction implements HasTransactionId {
 
         //region > fields, constructor
 
-        private final String memberId;
+        private final String memberIdentifier;
         private final Object target;
         private final InteractionType interactionType;
 
         public Execution(
                 final InteractionType interactionType,
-                final String memberId,
+                final String memberIdentifier,
                 final Object target) {
             this.interactionType = interactionType;
-            this.memberId = memberId;
+            this.memberIdentifier = memberIdentifier;
             this.target = target;
         }
         //endregion
@@ -339,8 +339,8 @@ public class Interaction implements HasTransactionId {
             return interactionType;
         }
 
-        public String getMemberId() {
-            return memberId;
+        public String getMemberIdentifier() {
+            return memberIdentifier;
         }
 
         public Object getTarget() {
@@ -543,7 +543,7 @@ public class Interaction implements HasTransactionId {
         }
     }
 
-    public static class PropertyModification extends Execution<PropertyModificationDto, PropertyDomainEvent<?,?>> {
+    public static class PropertyModification extends Execution<PropertyEditDto, PropertyDomainEvent<?,?>> {
 
         private final Object newValue;
 
@@ -551,7 +551,7 @@ public class Interaction implements HasTransactionId {
                 final String memberId,
                 final Object target,
                 final Object newValue) {
-            super(InteractionType.PROPERTY_MODIFICATION, memberId, target);
+            super(InteractionType.PROPERTY_EDIT, memberId, target);
             this.newValue = newValue;
         }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/d08a4e18/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java b/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
index 7572384..8c70cf2 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
@@ -57,7 +57,7 @@ import org.apache.isis.schema.common.v1.ValueType;
 import org.apache.isis.schema.ixn.v1.ActionInvocationDto;
 import org.apache.isis.schema.ixn.v1.InteractionDto;
 import org.apache.isis.schema.ixn.v1.InteractionExecutionDto;
-import org.apache.isis.schema.ixn.v1.PropertyModificationDto;
+import org.apache.isis.schema.ixn.v1.PropertyEditDto;
 import org.apache.isis.schema.ixn.v1.ValueWithTypeDto;
 import org.apache.isis.schema.utils.jaxbadapters.JavaSqlTimestampXmlGregorianCalendarAdapter;
 
@@ -161,7 +161,7 @@ public final class InteractionDtoUtils {
 
         final InteractionDto interactionDto = newInteractionDto(transactionId);
 
-        final InteractionExecutionDto executionDto = newPropertyModification(
+        final InteractionExecutionDto executionDto = newPropertyEdit(
                 sequence, targetBookmark, targetTitle,
                 propertyIdentifier, newValueDto,
                 user, transactionId);
@@ -191,7 +191,7 @@ public final class InteractionDtoUtils {
                 user);
     }
 
-    public static PropertyModificationDto newPropertyModification(
+    public static PropertyEditDto newPropertyEdit(
             final int sequence,
             final Bookmark targetBookmark,
             final String targetTitle,
@@ -199,8 +199,8 @@ public final class InteractionDtoUtils {
             final ValueWithTypeDto newValueDto,
             final String user,
             final String transactionId) {
-        return (PropertyModificationDto) newInteractionExecutionDto(
-                InteractionType.PROPERTY_MODIFICATION, transactionId, sequence,
+        return (PropertyEditDto) newInteractionExecutionDto(
+                InteractionType.PROPERTY_EDIT, transactionId, sequence,
                 targetBookmark, targetTitle, propertyIdentifier,
                 null, newValueDto,
                 user);
@@ -212,7 +212,7 @@ public final class InteractionDtoUtils {
             final int sequence,
             final Bookmark targetBookmark,
             final String targetTitle,
-            final String memberIdentifier,
+            final String memberId,
             final List<ParamDto> parameterDtos,
             final ValueWithTypeDto newValueDto,
             final String user) {
@@ -227,10 +227,10 @@ public final class InteractionDtoUtils {
 
             executionDto = invocation;
         } else {
-            final PropertyModificationDto modification = new PropertyModificationDto();
-            modification.setNewValue(newValueDto);
+            final PropertyEditDto edit = new PropertyEditDto();
+            edit.setNewValue(newValueDto);
 
-            executionDto = modification;
+            executionDto = edit;
         }
 
         executionDto.setSequence(sequence);
@@ -244,7 +244,7 @@ public final class InteractionDtoUtils {
         executionDto.setTitle(targetTitle);
         executionDto.setUser(user);
 
-        executionDto.setMemberIdentifier(memberIdentifier);
+        executionDto.setMemberId(memberId);
         return executionDto;
     }
 
@@ -258,7 +258,7 @@ public final class InteractionDtoUtils {
         interactionDto.setInteractionType(
                 executionDto instanceof ActionInvocationDto
                         ? InteractionType.ACTION_INVOCATION
-                        : InteractionType.PROPERTY_MODIFICATION);
+                        : InteractionType.PROPERTY_EDIT);
     }
 
 
@@ -288,14 +288,14 @@ public final class InteractionDtoUtils {
         return invocation;
     }
 
-    private static PropertyModificationDto propertyModificationFor(final InteractionDto interactionDto) {
-        PropertyModificationDto modification = (PropertyModificationDto) interactionDto.getExecution();
-        if(modification == null) {
-            modification = new PropertyModificationDto();
-            interactionDto.setExecution(modification);
-            interactionDto.setInteractionType(InteractionType.PROPERTY_MODIFICATION);
+    private static PropertyEditDto propertyEditFor(final InteractionDto interactionDto) {
+        PropertyEditDto edit = (PropertyEditDto) interactionDto.getExecution();
+        if(edit == null) {
+            edit = new PropertyEditDto();
+            interactionDto.setExecution(edit);
+            interactionDto.setInteractionType(InteractionType.PROPERTY_EDIT);
         }
-        return modification;
+        return edit;
     }
 
     private static List<ParamDto> parametersFor(final InteractionDto ixnDto) {

http://git-wip-us.apache.org/repos/asf/isis/blob/d08a4e18/core/applib/src/test/java/org/apache/isis/schema/utils/Roundtrip.java
----------------------------------------------------------------------
diff --git a/core/applib/src/test/java/org/apache/isis/schema/utils/Roundtrip.java b/core/applib/src/test/java/org/apache/isis/schema/utils/Roundtrip.java
index 91c8a2b..a0aa7e1 100644
--- a/core/applib/src/test/java/org/apache/isis/schema/utils/Roundtrip.java
+++ b/core/applib/src/test/java/org/apache/isis/schema/utils/Roundtrip.java
@@ -131,7 +131,7 @@ public class Roundtrip {
 
 
         // then
-        assertThat(recreated.getExecution().getMemberIdentifier(), Matchers.is(interactionDto.getExecution().getMemberIdentifier()));
+        assertThat(recreated.getExecution().getMemberId(), Matchers.is(interactionDto.getExecution().getMemberId()));
         assertThat(recreated.getExecution().getTarget().getObjectType(), Matchers.is(interactionDto.getExecution().getTarget().getObjectType()));
         assertThat(recreated.getExecution().getTarget().getObjectIdentifier(), Matchers.is(interactionDto.getExecution().getTarget().getObjectIdentifier()));
 

http://git-wip-us.apache.org/repos/asf/isis/blob/d08a4e18/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
index 83c8fbe..982b852 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
@@ -42,7 +42,7 @@ import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySe
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.services.ixn.InteractionDtoServiceInternal;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.isis.schema.ixn.v1.PropertyModificationDto;
+import org.apache.isis.schema.ixn.v1.PropertyEditDto;
 
 public abstract class PropertySetterOrClearFacetForDomainEventAbstract
         extends SingleValueFacetAbstract<Class<? extends PropertyDomainEvent<?,?>>> {
@@ -200,10 +200,10 @@ public abstract class PropertySetterOrClearFacetForDomainEventAbstract
                             try {
 
                                 // update the current execution with the DTO (memento)
-                                final PropertyModificationDto invocationDto =
-                                        getInteractionDtoServiceInternal().asPropertyModificationDto(
+                                final PropertyEditDto editDto =
+                                        getInteractionDtoServiceInternal().asPropertyEditDto(
                                                 owningProperty, targetAdapter, newValueAdapter);
-                                currentExecution.setDto(invocationDto);
+                                currentExecution.setDto(editDto);
 
 
                                 // ... post the executing event

http://git-wip-us.apache.org/repos/asf/isis/blob/d08a4e18/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ixn/InteractionDtoServiceInternal.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ixn/InteractionDtoServiceInternal.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ixn/InteractionDtoServiceInternal.java
index 80f89ae..6b5fe90 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ixn/InteractionDtoServiceInternal.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ixn/InteractionDtoServiceInternal.java
@@ -25,7 +25,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.schema.ixn.v1.ActionInvocationDto;
-import org.apache.isis.schema.ixn.v1.PropertyModificationDto;
+import org.apache.isis.schema.ixn.v1.PropertyEditDto;
 
 public interface InteractionDtoServiceInternal {
 
@@ -42,7 +42,7 @@ public interface InteractionDtoServiceInternal {
             Object resultPojo);
 
     @Programmatic
-    PropertyModificationDto asPropertyModificationDto(
+    PropertyEditDto asPropertyEditDto(
             OneToOneAssociation property,
             ObjectAdapter targetAdapter,
             ObjectAdapter newValueAdapterIfAny);

http://git-wip-us.apache.org/repos/asf/isis/blob/d08a4e18/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
index 9511faf..1d8a7ed 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
@@ -162,7 +162,7 @@ public class CommandDtoServiceInternalDefault implements CommandDtoServiceIntern
 
         final CommandDto dto = asCommandDto(targetAdapters);
 
-        dto.setInteractionType(InteractionType.PROPERTY_MODIFICATION);
+        dto.setInteractionType(InteractionType.PROPERTY_EDIT);
         final PropertyDto propertyDto = new PropertyDto();
         dto.setMember(propertyDto);
 
@@ -192,8 +192,8 @@ public class CommandDtoServiceInternalDefault implements CommandDtoServiceIntern
             final ObjectAction objectAction,
             final ActionDto actionDto,
             final ObjectAdapter[] argAdapters) {
-        final String actionIdentifier = CommandUtil.memberIdentifierFor(objectAction);
-        actionDto.setMemberIdentifier(actionIdentifier);
+        final String actionId = CommandUtil.memberIdentifierFor(objectAction);
+        actionDto.setMemberIdentifier(actionId);
 
         List<ObjectActionParameter> actionParameters = objectAction.getParameters();
         for (int paramNum = 0; paramNum < actionParameters.size(); paramNum++) {

http://git-wip-us.apache.org/repos/asf/isis/blob/d08a4e18/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
index 733a252..14b096f 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
@@ -42,7 +42,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.schema.cmd.v1.ActionDto;
 import org.apache.isis.schema.ixn.v1.ActionInvocationDto;
-import org.apache.isis.schema.ixn.v1.PropertyModificationDto;
+import org.apache.isis.schema.ixn.v1.PropertyEditDto;
 import org.apache.isis.schema.ixn.v1.ValueWithTypeDto;
 import org.apache.isis.schema.utils.InteractionDtoUtils;
 
@@ -102,7 +102,7 @@ public class InteractionDtoServiceInternalDefault implements InteractionDtoServi
     }
 
     @Override @Programmatic
-    public PropertyModificationDto asPropertyModificationDto(
+    public PropertyEditDto asPropertyEditDto(
             final OneToOneAssociation property,
             final ObjectAdapter targetAdapter,
             final ObjectAdapter newValueAdapterIfAny) {

http://git-wip-us.apache.org/repos/asf/isis/blob/d08a4e18/core/schema/src/main/resources/org/apache/isis/schema/common/common-1.0.xsd
----------------------------------------------------------------------
diff --git a/core/schema/src/main/resources/org/apache/isis/schema/common/common-1.0.xsd b/core/schema/src/main/resources/org/apache/isis/schema/common/common-1.0.xsd
index 013a42e..acab2cd 100644
--- a/core/schema/src/main/resources/org/apache/isis/schema/common/common-1.0.xsd
+++ b/core/schema/src/main/resources/org/apache/isis/schema/common/common-1.0.xsd
@@ -120,11 +120,11 @@
 
     <xs:simpleType name="interactionType" >
         <xs:annotation>
-            <xs:documentation>Whether this interaction with a member is invoking an action, or modifying a property.</xs:documentation>
+            <xs:documentation>Whether this interaction with a member is invoking an action, or editing a property.</xs:documentation>
         </xs:annotation>
         <xs:restriction base="xs:string">
             <xs:enumeration value="action_invocation" />
-            <xs:enumeration value="property_modification" />
+            <xs:enumeration value="property_edit" />
         </xs:restriction>
     </xs:simpleType>
 

http://git-wip-us.apache.org/repos/asf/isis/blob/d08a4e18/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd
----------------------------------------------------------------------
diff --git a/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd b/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd
index 071365b..c7e651a 100644
--- a/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd
+++ b/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd
@@ -49,7 +49,7 @@
                 </xs:element>
                 <xs:element name="transactionId" type="xs:string">
                     <xs:annotation>
-                        <xs:documentation>Transaction id within which this member was interacted with (action invoked/property modified); can be used to locate the corresponding Command object (which may have been persisted).
+                        <xs:documentation>Transaction id within which this member was interacted with (action invoked/property edited); can be used to locate the corresponding Command object (which may have been persisted).
                         </xs:documentation>
                     </xs:annotation>
                 </xs:element>
@@ -62,7 +62,7 @@
 
     <xs:complexType name="interactionExecutionDto" abstract="true">
         <xs:annotation>
-            <xs:documentation>Represents either an action invocation or a property modification.  Is subclassed by both.
+            <xs:documentation>Represents either an action invocation or a property edit.  Is subclassed by both.
             </xs:documentation>
         </xs:annotation>
         <xs:sequence>
@@ -80,11 +80,11 @@
             </xs:element>
             <xs:element name="target" type="common:oidDto" minOccurs="1" maxOccurs="1">
                 <xs:annotation>
-                    <xs:documentation>For target domain object being interacted with.  For regular actions/properties, represents the entity or view model upon which the action is to be invoked/property modified.  For mixin actions/properties, is the object being mixed-into (the constructor arg to the mixin).  For contributed actions/properties, is the domain service (the contributee object will be one of the action arguments within the payload).
+                    <xs:documentation>For target domain object being interacted with.  For regular actions/properties, represents the entity or view model upon which the action is to be invoked/property edited.  For mixin actions/properties, is the object being mixed-into (the constructor arg to the mixin).  For contributed actions/properties, is the domain service (the contributee object will be one of the action arguments within the payload).
                     </xs:documentation>
                 </xs:annotation>
             </xs:element>
-            <xs:element name="memberIdentifier" type="xs:string">
+            <xs:element name="memberId" type="xs:string">
                 <xs:annotation>
                     <xs:documentation>Formal identifier of the member being interacted with (action or property).
                     </xs:documentation>
@@ -104,7 +104,7 @@
             </xs:element>
             <xs:element name="timings" type="common:periodDto">
                 <xs:annotation>
-                    <xs:documentation>Captures the time taken to perform the member interaction (invoke the action, or modify the property).
+                    <xs:documentation>Captures the time taken to perform the member interaction (invoke the action, or edit the property).
                     </xs:documentation>
                 </xs:annotation>
             </xs:element>
@@ -119,7 +119,7 @@
                     <xs:sequence>
                         <xs:element name="execution" type="interactionExecutionDto" minOccurs="0" maxOccurs="unbounded">
                             <xs:annotation>
-                                <xs:documentation>Capture interactions with other members from this interaction, using the WrapperFactory service.  Typically this will be actions invoking other actions, but it is also possible for an action to perform a property modification, and - much rarer - for a property modification to invoke an action.  Whatever; these interactions nest together into a call/stack, more generally into a graph.
+                                <xs:documentation>Capture interactions with other members from this interaction, using the WrapperFactory service.  Typically this will be actions invoking other actions, but it is also possible for an action to perform a property edit, and - much rarer - for a property edit to invoke an action.  Whatever; these interactions nest together into a call/stack, more generally into a graph.
                                 </xs:documentation>
                             </xs:annotation>
                         </xs:element>
@@ -156,7 +156,7 @@
         </xs:complexContent>
     </xs:complexType>
 
-    <xs:complexType name="propertyModificationDto">
+    <xs:complexType name="propertyEditDto">
         <xs:complexContent>
             <xs:extension base="interactionExecutionDto">
                 <xs:sequence>
@@ -168,7 +168,7 @@
 
     <xs:complexType name="valueWithTypeDto">
         <xs:annotation>
-            <xs:documentation>Captures both a value and its corresponding type.  Used for the return value of action invocations, and for the new value in property modifications.
+            <xs:documentation>Captures both a value and its corresponding type.  Used for the return value of action invocations, and for the new value in property edits.
             </xs:documentation>
         </xs:annotation>
         <xs:sequence>


[6/8] isis git commit: ISIS-1389: further standardization of DTOs to Interaction.

Posted by da...@apache.org.
ISIS-1389: further standardization of DTOs to Interaction.


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

Branch: refs/heads/ISIS-1291
Commit: 3e199c9f75770e1ef8f5a525d075d9b6b606e554
Parents: d08a4e1
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed May 4 00:49:37 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed May 4 00:49:37 2016 +0100

----------------------------------------------------------------------
 .../org/apache/isis/schema/utils/InteractionDtoUtils.java | 10 ++++++----
 .../services/background/BackgroundCommandExecution.java   |  2 +-
 .../command/CommandDtoServiceInternalDefault.java         |  4 ++--
 .../main/resources/org/apache/isis/schema/cmd/cmd-1.0.xsd |  7 ++++++-
 .../main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd |  7 ++++++-
 5 files changed, 21 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/3e199c9f/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java b/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
index 8c70cf2..883ab8d 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
@@ -252,10 +252,12 @@ public final class InteractionDtoUtils {
 
     //region > addExecution
 
-    public static void addExecution(final InteractionDto interactionDto, final InteractionExecutionDto executionDto) {
+    public static void addExecution(
+            final InteractionDto interactionDto,
+            final InteractionExecutionDto executionDto) {
         interactionDto.setExecution(executionDto);
 
-        interactionDto.setInteractionType(
+        executionDto.setInteractionType(
                 executionDto instanceof ActionInvocationDto
                         ? InteractionType.ACTION_INVOCATION
                         : InteractionType.PROPERTY_EDIT);
@@ -283,7 +285,7 @@ public final class InteractionDtoUtils {
         if(invocation == null) {
             invocation = new ActionInvocationDto();
             interactionDto.setExecution(invocation);
-            interactionDto.setInteractionType(InteractionType.ACTION_INVOCATION);
+            invocation.setInteractionType(InteractionType.ACTION_INVOCATION);
         }
         return invocation;
     }
@@ -293,7 +295,7 @@ public final class InteractionDtoUtils {
         if(edit == null) {
             edit = new PropertyEditDto();
             interactionDto.setExecution(edit);
-            interactionDto.setInteractionType(InteractionType.PROPERTY_EDIT);
+            edit.setInteractionType(InteractionType.PROPERTY_EDIT);
         }
         return edit;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/3e199c9f/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
index 923aac4..2eb5b4e 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
@@ -166,7 +166,7 @@ public abstract class BackgroundCommandExecution extends AbstractIsisSessionTemp
                         final MemberDto memberDto = dto.getMember();
                         final String memberId = memberDto.getMemberIdentifier();
 
-                        final InteractionType interactionType = dto.getInteractionType();
+                        final InteractionType interactionType = memberDto.getInteractionType();
                         if(interactionType == InteractionType.ACTION_INVOCATION) {
 
                             final ActionDto actionDto = (ActionDto) memberDto;

http://git-wip-us.apache.org/repos/asf/isis/blob/3e199c9f/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
index 1d8a7ed..c64c18f 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceInternalDefault.java
@@ -145,8 +145,8 @@ public class CommandDtoServiceInternalDefault implements CommandDtoServiceIntern
 
         final CommandDto dto = asCommandDto(targetAdapters);
 
-        dto.setInteractionType(InteractionType.ACTION_INVOCATION);
         final ActionDto actionDto = new ActionDto();
+        actionDto.setInteractionType(InteractionType.ACTION_INVOCATION);
         dto.setMember(actionDto);
 
         addActionArgs(objectAction, actionDto, argAdapters);
@@ -162,8 +162,8 @@ public class CommandDtoServiceInternalDefault implements CommandDtoServiceIntern
 
         final CommandDto dto = asCommandDto(targetAdapters);
 
-        dto.setInteractionType(InteractionType.PROPERTY_EDIT);
         final PropertyDto propertyDto = new PropertyDto();
+        propertyDto.setInteractionType(InteractionType.PROPERTY_EDIT);
         dto.setMember(propertyDto);
 
         addPropertyValue(property, propertyDto, valueAdapterOrNull);

http://git-wip-us.apache.org/repos/asf/isis/blob/3e199c9f/core/schema/src/main/resources/org/apache/isis/schema/cmd/cmd-1.0.xsd
----------------------------------------------------------------------
diff --git a/core/schema/src/main/resources/org/apache/isis/schema/cmd/cmd-1.0.xsd b/core/schema/src/main/resources/org/apache/isis/schema/cmd/cmd-1.0.xsd
index a5c02cf..4be3695 100644
--- a/core/schema/src/main/resources/org/apache/isis/schema/cmd/cmd-1.0.xsd
+++ b/core/schema/src/main/resources/org/apache/isis/schema/cmd/cmd-1.0.xsd
@@ -56,7 +56,6 @@
                         </xs:documentation>
                     </xs:annotation>
                 </xs:element>
-                <xs:element name="interactionType" type="common:interactionType"/>
                 <xs:element name="member" type="memberDto">
                     <xs:annotation>
                         <xs:documentation>The action or property (identifier and parameter arguments) to be invoked on the target object(s).</xs:documentation>
@@ -84,6 +83,12 @@
                     </xs:documentation>
                 </xs:annotation>
             </xs:element>
+            <xs:element name="interactionType" type="common:interactionType">
+                <xs:annotation>
+                    <xs:documentation>Indicates whether this is an intention to invoke an action, or edit a property.
+                    </xs:documentation>
+                </xs:annotation>
+            </xs:element>
         </xs:sequence>
     </xs:complexType>
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3e199c9f/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd
----------------------------------------------------------------------
diff --git a/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd b/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd
index c7e651a..968dd9e 100644
--- a/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd
+++ b/core/schema/src/main/resources/org/apache/isis/schema/ixn/ixn-1.0.xsd
@@ -54,7 +54,6 @@
                     </xs:annotation>
                 </xs:element>
                 <xs:element name="execution" type="interactionExecutionDto"/>
-                <xs:element name="interactionType" type="common:interactionType"/>
             </xs:sequence>
         </xs:complexType>
 
@@ -84,6 +83,12 @@
                     </xs:documentation>
                 </xs:annotation>
             </xs:element>
+            <xs:element name="interactionType" type="common:interactionType">
+                <xs:annotation>
+                    <xs:documentation>Indicates whether this is an intention to invoke an action, or edit a property.
+                    </xs:documentation>
+                </xs:annotation>
+            </xs:element>
             <xs:element name="memberId" type="xs:string">
                 <xs:annotation>
                     <xs:documentation>Formal identifier of the member being interacted with (action or property).