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>