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/13 18:14:10 UTC

[28/50] [abbrv] isis git commit: ISIS-1389: completing up making CommandDto / InteractionDto and Interaction consistent.

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/master
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.