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).