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/02 17:49:37 UTC
[13/14] isis git commit: ISIS-1397: moving InteractionType into
common.xsd;
fleshing out BackgroundCommandExecution for props (still incomplete)
ISIS-1397: moving InteractionType into common.xsd; fleshing out BackgroundCommandExecution for props (still incomplete)
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/3f2711c5
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/3f2711c5
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/3f2711c5
Branch: refs/heads/ISIS-1291
Commit: 3f2711c5238a421bb400a01bc8577c54f1ce5bb7
Parents: a9d706b
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon May 2 16:24:46 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon May 2 16:24:46 2016 +0100
----------------------------------------------------------------------
.../src/main/asciidoc/schema/cmd/cmd-1.0.xsd | 6 +-
.../src/main/asciidoc/schema/common/common.xsd | 11 +++
.../src/main/asciidoc/schema/ixn/ixn-1.0.xsd | 1 +
.../isis/schema/utils/InteractionDtoUtils.java | 3 +
.../background/BackgroundCommandExecution.java | 75 ++++++++++++++++----
.../command/CommandDtoServiceDefault.java | 6 +-
.../org/apache/isis/schema/cmd/cmd-1.0.xsd | 12 +---
.../apache/isis/schema/common/common-1.0.xsd | 10 +++
.../org/apache/isis/schema/ixn/ixn-1.0.xsd | 1 +
9 files changed, 96 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/3f2711c5/adocs/documentation/src/main/asciidoc/schema/cmd/cmd-1.0.xsd
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/schema/cmd/cmd-1.0.xsd b/adocs/documentation/src/main/asciidoc/schema/cmd/cmd-1.0.xsd
index de71b26..e91efc8 100644
--- a/adocs/documentation/src/main/asciidoc/schema/cmd/cmd-1.0.xsd
+++ b/adocs/documentation/src/main/asciidoc/schema/cmd/cmd-1.0.xsd
@@ -56,9 +56,10 @@
</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 and arguments to be invoked on the target object(s).</xs:documentation>
+ <xs:documentation>The action or property (identifier and parameter arguments) to be invoked on the target object(s).</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="user" type="xs:string">
@@ -69,7 +70,6 @@
</xs:element>
</xs:sequence>
</xs:complexType>
-
</xs:element>
<xs:complexType name="memberDto" abstract="true">
@@ -111,7 +111,7 @@
<xs:complexContent>
<xs:extension base="memberDto">
<xs:sequence>
- <xs:element name="newValue" type="paramDto"/>
+ <xs:element name="newValue" type="common:valueDto"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
http://git-wip-us.apache.org/repos/asf/isis/blob/3f2711c5/adocs/documentation/src/main/asciidoc/schema/common/common.xsd
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/schema/common/common.xsd b/adocs/documentation/src/main/asciidoc/schema/common/common.xsd
index a52b8f5..013a42e 100644
--- a/adocs/documentation/src/main/asciidoc/schema/common/common.xsd
+++ b/adocs/documentation/src/main/asciidoc/schema/common/common.xsd
@@ -118,4 +118,15 @@
</xs:sequence>
</xs:complexType>
+ <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:annotation>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="action_invocation" />
+ <xs:enumeration value="property_modification" />
+ </xs:restriction>
+ </xs:simpleType>
+
+
</xs:schema>
http://git-wip-us.apache.org/repos/asf/isis/blob/3f2711c5/adocs/documentation/src/main/asciidoc/schema/ixn/ixn-1.0.xsd
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/schema/ixn/ixn-1.0.xsd b/adocs/documentation/src/main/asciidoc/schema/ixn/ixn-1.0.xsd
index 6706734..116d9ab 100644
--- a/adocs/documentation/src/main/asciidoc/schema/ixn/ixn-1.0.xsd
+++ b/adocs/documentation/src/main/asciidoc/schema/ixn/ixn-1.0.xsd
@@ -54,6 +54,7 @@
</xs:annotation>
</xs:element>
<xs:element name="execution" type="interactionExecutionDto"/>
+ <xs:element name="interactionType" type="common:interactionType"/>
</xs:sequence>
</xs:complexType>
http://git-wip-us.apache.org/repos/asf/isis/blob/3f2711c5/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 f5d3f87..1e7cb16 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
@@ -50,6 +50,7 @@ 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.InteractionType;
import org.apache.isis.schema.common.v1.OidDto;
import org.apache.isis.schema.common.v1.PeriodDto;
import org.apache.isis.schema.common.v1.ValueDto;
@@ -228,6 +229,7 @@ public final class InteractionDtoUtils {
if(invocation == null) {
invocation = new ActionInvocationDto();
interactionDto.setExecution(invocation);
+ interactionDto.setInteractionType(InteractionType.ACTION_INVOCATION);
}
return invocation;
}
@@ -237,6 +239,7 @@ public final class InteractionDtoUtils {
if(modification == null) {
modification = new PropertyModificationDto();
interactionDto.setExecution(modification);
+ interactionDto.setInteractionType(InteractionType.PROPERTY_MODIFICATION);
}
return modification;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/3f2711c5/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 30dcf67..c377f42 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
@@ -40,6 +40,8 @@ import org.apache.isis.core.metamodel.facets.actions.action.invocation.CommandUt
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.Contributed;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
import org.apache.isis.core.runtime.services.memento.MementoServiceDefault;
import org.apache.isis.core.runtime.sessiontemplate.AbstractIsisSessionTemplate;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
@@ -47,11 +49,12 @@ import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
import org.apache.isis.core.runtime.system.transaction.TransactionalClosure;
import org.apache.isis.schema.cmd.v1.ActionDto;
import org.apache.isis.schema.cmd.v1.CommandDto;
-import org.apache.isis.schema.cmd.v1.InteractionTypeDto;
import org.apache.isis.schema.cmd.v1.MemberDto;
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.common.v1.ValueDto;
import org.apache.isis.schema.utils.CommandDtoUtils;
/**
@@ -136,7 +139,7 @@ public abstract class BackgroundCommandExecution extends AbstractIsisSessionTemp
final ObjectAdapter targetAdapter = adapterFor(targetObject);
final ObjectSpecification specification = targetAdapter.getSpecification();
- final ObjectAction objectAction = findAction(specification, actionId);
+ final ObjectAction objectAction = findActionElseNull(specification, actionId);
if(objectAction == null) {
throw new RuntimeException(String.format("Unknown action '%s'", actionId));
}
@@ -164,8 +167,8 @@ public abstract class BackgroundCommandExecution extends AbstractIsisSessionTemp
final MemberDto memberDto = dto.getMember();
final String memberId = memberDto.getMemberIdentifier();
- final InteractionTypeDto interactionType = dto.getInteractionType();
- if(interactionType == InteractionTypeDto.ACTION_INVOCATION) {
+ final InteractionType interactionType = dto.getInteractionType();
+ if(interactionType == InteractionType.ACTION_INVOCATION) {
final ActionDto actionDto = (ActionDto) memberDto;
@@ -200,10 +203,21 @@ public abstract class BackgroundCommandExecution extends AbstractIsisSessionTemp
final PropertyDto propertyDto = (PropertyDto) memberDto;
- //
- // TODO: need equivalent logic if this is a property modification
- //
- throw new RuntimeException("Not yet implemented");
+ final List<OidDto> targetOidDtos = dto.getTargets();
+ for (OidDto targetOidDto : targetOidDtos) {
+
+ final Bookmark bookmark = Bookmark.from(targetOidDto);
+ final Object targetObject = bookmarkService.lookup(bookmark);
+
+ final ObjectAdapter targetAdapter = adapterFor(targetObject);
+
+ final OneToOneAssociation property = findOneToOneAssociation(targetAdapter, memberId);
+
+ final ObjectAdapter newValueAdapter = newValueAdapterFor(propertyDto);
+
+ property.set(targetAdapter, newValueAdapter, InteractionInitiatedBy.FRAMEWORK);
+ // there is no return value for property modifications.
+ }
}
}
@@ -227,20 +241,44 @@ public abstract class BackgroundCommandExecution extends AbstractIsisSessionTemp
final ObjectAdapter targetAdapter,
final String actionId) throws RuntimeException {
- final ObjectAction objectAction;
-
final ObjectSpecification specification = targetAdapter.getSpecification();
- objectAction = findAction(specification, actionId);
+ final ObjectAction objectAction = findActionElseNull(specification, actionId);
if(objectAction == null) {
throw new RuntimeException(String.format("Unknown action '%s'", actionId));
}
return objectAction;
}
+
+ private OneToOneAssociation findOneToOneAssociation(
+ final ObjectAdapter targetAdapter,
+ final String propertyId) throws RuntimeException {
+
+
+ final ObjectSpecification specification = targetAdapter.getSpecification();
+
+ final OneToOneAssociation property = findOneToOneAssociationElseNull(specification, propertyId);
+ if(property == null) {
+ throw new RuntimeException(String.format("Unknown property '%s'", propertyId));
+ }
+ return property;
+ }
});
}
- private ObjectAction findAction(final ObjectSpecification specification, final String actionId) {
+ protected ObjectAdapter newValueAdapterFor(final PropertyDto propertyDto) {
+
+ final ValueDto newValue = propertyDto.getNewValue();
+ if(newValue == null) {
+ return null;
+ } else {
+ throw new RuntimeException("NOT YET IMPLEMENTED; need to refactor cmd.xsd to take a paramDto for newValue");
+ }
+ }
+
+ private static ObjectAction findActionElseNull(
+ final ObjectSpecification specification,
+ final String actionId) {
final List<ObjectAction> objectActions = specification.getObjectActions(Contributed.INCLUDED);
for (final ObjectAction objectAction : objectActions) {
if(objectAction.getIdentifier().toClassAndNameIdentityString().equals(actionId)) {
@@ -250,6 +288,19 @@ public abstract class BackgroundCommandExecution extends AbstractIsisSessionTemp
return null;
}
+ private static OneToOneAssociation findOneToOneAssociationElseNull(
+ final ObjectSpecification specification,
+ final String propertyId) {
+ final List<ObjectAssociation> associations = specification.getAssociations(Contributed.INCLUDED);
+ for (final ObjectAssociation association : associations) {
+ if( association.getIdentifier().toClassAndNameIdentityString().equals(propertyId) &&
+ association instanceof OneToOneAssociation) {
+ return (OneToOneAssociation) association;
+ }
+ }
+ return null;
+ }
+
private ObjectAdapter[] argAdaptersFor(final ActionInvocationMemento aim) {
final int numArgs = aim.getNumArgs();
final List<ObjectAdapter> argumentAdapters = Lists.newArrayList();
http://git-wip-us.apache.org/repos/asf/isis/blob/3f2711c5/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceDefault.java
index 6741ae3..78adaba 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/command/CommandDtoServiceDefault.java
@@ -48,9 +48,9 @@ import org.apache.isis.core.runtime.services.memento.MementoServiceDefault;
import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.schema.cmd.v1.ActionDto;
import org.apache.isis.schema.cmd.v1.CommandDto;
-import org.apache.isis.schema.cmd.v1.InteractionTypeDto;
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.ValueDto;
import org.apache.isis.schema.utils.CommandDtoUtils;
import org.apache.isis.schema.utils.CommonDtoUtils;
@@ -152,7 +152,7 @@ public class CommandDtoServiceDefault implements CommandDtoService {
final CommandDto dto = asCommandDto(targetAdapters);
- dto.setInteractionType(InteractionTypeDto.ACTION_INVOCATION);
+ dto.setInteractionType(InteractionType.ACTION_INVOCATION);
final ActionDto actionDto = new ActionDto();
dto.setMember(actionDto);
@@ -169,7 +169,7 @@ public class CommandDtoServiceDefault implements CommandDtoService {
final CommandDto dto = asCommandDto(targetAdapters);
- dto.setInteractionType(InteractionTypeDto.PROPERTY_MODIFICATION);
+ dto.setInteractionType(InteractionType.PROPERTY_MODIFICATION);
final PropertyDto propertyDto = new PropertyDto();
dto.setMember(propertyDto);
http://git-wip-us.apache.org/repos/asf/isis/blob/3f2711c5/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 66185dd..e91efc8 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,7 @@
</xs:documentation>
</xs:annotation>
</xs:element>
- <xs:element name="interactionType" type="interactionTypeDto"/>
+ <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>
@@ -72,16 +72,6 @@
</xs:complexType>
</xs:element>
- <xs:simpleType name="interactionTypeDto" final="restriction" >
- <xs:annotation>
- <xs:documentation>Whether this interaction with a member is invoking an action, or modifying a property.</xs:documentation>
- </xs:annotation>
- <xs:restriction base="xs:NMTOKEN">
- <xs:enumeration value="ACTION_INVOCATION" />
- <xs:enumeration value="PROPERTY_MODIFICATION" />
- </xs:restriction>
- </xs:simpleType>
-
<xs:complexType name="memberDto" abstract="true">
<xs:annotation>
<xs:documentation>Represents the information required to be able to invoke an action or modify a property on the target(s). Specifically, is the identifier of the action/property, along with the parameter arguments. Is subclassed by 'actionDto' and 'propertyDto'.
http://git-wip-us.apache.org/repos/asf/isis/blob/3f2711c5/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 bfd25cb..013a42e 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
@@ -118,5 +118,15 @@
</xs:sequence>
</xs:complexType>
+ <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:annotation>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="action_invocation" />
+ <xs:enumeration value="property_modification" />
+ </xs:restriction>
+ </xs:simpleType>
+
</xs:schema>
http://git-wip-us.apache.org/repos/asf/isis/blob/3f2711c5/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 6706734..116d9ab 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,6 +54,7 @@
</xs:annotation>
</xs:element>
<xs:element name="execution" type="interactionExecutionDto"/>
+ <xs:element name="interactionType" type="common:interactionType"/>
</xs:sequence>
</xs:complexType>