Author: sb
Date: Mon Jan 21 18:06:25 2008
New Revision: 7217

Log:
- Cancel execution on activation of Cancel node.
# Code Coverage is now slightly below 100%, will add missing test(s) later.

Modified:
    trunk/Workflow/src/interfaces/execution.php
    trunk/Workflow/src/nodes/cancel.php
    
trunk/WorkflowEventLogTiein/tests/data/ParallelSplitActionActionCancelCaseSynchronization.log
    
trunk/WorkflowEventLogTiein/tests/data/ParallelSplitCancelCaseActionActionSynchronization.log

Modified: trunk/Workflow/src/interfaces/execution.php
==============================================================================
--- trunk/Workflow/src/interfaces/execution.php [iso-8859-1] (original)
+++ trunk/Workflow/src/interfaces/execution.php [iso-8859-1] Mon Jan 21 
18:06:25 2008
@@ -556,14 +556,15 @@
      */
     public function activate( ezcWorkflowNode $node, $notifyListeners = true )
     {
-        // Check whether the node is ready to be activated
-        // and not yet activated.
-        if ( !$node->isExecutable() ||
+        // Only activate the node when
+        //  - the execution of the workflow has not been cancelled,
+        //  - the node is ready to be activated,
+        //  - and the node is not already activated.
+        if ( $this->isCancelled() ||
+             !$node->isExecutable() ||
              ezcWorkflowUtil::findObject( $this->activatedNodes, $node ) !== 
false )
         {
-            // @codeCoverageIgnoreStart
             return false;
-            // @codeCoverageIgnoreEnd
         }
 
         // Add node to list of activated nodes.
@@ -649,26 +650,31 @@
      */
     public function startThread( $parentId = null, $numSiblings = 1 )
     {
-        $this->threads[$this->nextThreadId] = array(
-          'parentId' => $parentId,
-          'numSiblings' => $numSiblings
-        );
-
-        $this->notifyListeners(
-          sprintf(
-            'Started thread #%d (%s%d sibling(s)) for execution #%d of 
workflow "%s" (version %d).',
-
-            $this->nextThreadId,
-            $parentId != null ? 'parent: ' . $parentId . ', ' : '',
-            $numSiblings,
-            $this->id,
-            $this->workflow->name,
-            $this->workflow->version
-          ),
-          ezcWorkflowExecutionListener::DEBUG
-        );
-
-        return $this->nextThreadId++;
+        if ( !$this->isCancelled() )
+        {
+            $this->threads[$this->nextThreadId] = array(
+              'parentId' => $parentId,
+              'numSiblings' => $numSiblings
+            );
+
+            $this->notifyListeners(
+              sprintf(
+                'Started thread #%d (%s%d sibling(s)) for execution #%d of 
workflow "%s" (version %d).',
+
+                $this->nextThreadId,
+                $parentId != null ? 'parent: ' . $parentId . ', ' : '',
+                $numSiblings,
+                $this->id,
+                $this->workflow->name,
+                $this->workflow->version
+              ),
+              ezcWorkflowExecutionListener::DEBUG
+            );
+
+            return $this->nextThreadId++;
+        }
+
+        return false;
     }
 
     /**

Modified: trunk/Workflow/src/nodes/cancel.php
==============================================================================
--- trunk/Workflow/src/nodes/cancel.php [iso-8859-1] (original)
+++ trunk/Workflow/src/nodes/cancel.php [iso-8859-1] Mon Jan 21 18:06:25 2008
@@ -43,9 +43,11 @@
      * Cancels the execution of this workflow.
      *
      * @param ezcWorkflowExecution $execution
+     * @param ezcWorkflowNode      $activatedFrom
+     * @param int                  $threadId
      * @ignore
      */
-    public function execute( ezcWorkflowExecution $execution )
+    public function activate( ezcWorkflowExecution $execution, ezcWorkflowNode 
$activatedFrom = null, $threadId = 0 )
     {
         $execution->cancel( $this );
     }

Modified: 
trunk/WorkflowEventLogTiein/tests/data/ParallelSplitActionActionCancelCaseSynchronization.log
==============================================================================
--- 
trunk/WorkflowEventLogTiein/tests/data/ParallelSplitActionActionCancelCaseSynchronization.log
 [iso-8859-1] (original)
+++ 
trunk/WorkflowEventLogTiein/tests/data/ParallelSplitActionActionCancelCaseSynchronization.log
 [iso-8859-1] Mon Jan 21 18:06:25 2008
@@ -8,12 +8,5 @@
 MMM DD HH:MM:SS [Debug] [default] [default] Started thread #2 (3 sibling(s)) 
for execution #1 of workflow 
"ParallelSplitActionActionCancelCaseSynchronization" (version 1).
 MMM DD HH:MM:SS [Debug] [default] [default] Activated node 
#6(ezcWorkflowNodeAction) for instance #1 of workflow 
"ParallelSplitActionActionCancelCaseSynchronization" (version 1).
 MMM DD HH:MM:SS [Debug] [default] [default] Started thread #3 (3 sibling(s)) 
for execution #1 of workflow 
"ParallelSplitActionActionCancelCaseSynchronization" (version 1).
-MMM DD HH:MM:SS [Debug] [default] [default] Activated node 
#7(ezcWorkflowNodeCancel) for instance #1 of workflow 
"ParallelSplitActionActionCancelCaseSynchronization" (version 1).
-MMM DD HH:MM:SS [Debug] [default] [default] Executed node 
#2(ezcWorkflowNodeParallelSplit) for instance #1 of workflow 
"ParallelSplitActionActionCancelCaseSynchronization" (version 1).
-MMM DD HH:MM:SS [Debug] [default] [default] Activated node 
#4(ezcWorkflowNodeSynchronization) for instance #1 of workflow 
"ParallelSplitActionActionCancelCaseSynchronization" (version 1).
-MMM DD HH:MM:SS [Debug] [default] [default] Executed node 
#3(ezcWorkflowNodeAction) for instance #1 of workflow 
"ParallelSplitActionActionCancelCaseSynchronization" (version 1).
-MMM DD HH:MM:SS [Debug] [default] [default] Executed node 
#6(ezcWorkflowNodeAction) for instance #1 of workflow 
"ParallelSplitActionActionCancelCaseSynchronization" (version 1).
-MMM DD HH:MM:SS [Debug] [default] [default] Could not roll back service object 
"ServiceObject" of node #3 for instance #1 of workflow 
"ParallelSplitActionActionCancelCaseSynchronization" (version 1).
-MMM DD HH:MM:SS [Debug] [default] [default] Could not roll back service object 
"ServiceObject" of node #6 for instance #1 of workflow 
"ParallelSplitActionActionCancelCaseSynchronization" (version 1).
 MMM DD HH:MM:SS [Debug] [default] [default] Executed node 
#7(ezcWorkflowNodeCancel) for instance #1 of workflow 
"ParallelSplitActionActionCancelCaseSynchronization" (version 1).
 MMM DD HH:MM:SS [Info] [default] [default] Cancelled execution #1 of workflow 
"ParallelSplitActionActionCancelCaseSynchronization" (version 1).

Modified: 
trunk/WorkflowEventLogTiein/tests/data/ParallelSplitCancelCaseActionActionSynchronization.log
==============================================================================
--- 
trunk/WorkflowEventLogTiein/tests/data/ParallelSplitCancelCaseActionActionSynchronization.log
 [iso-8859-1] (original)
+++ 
trunk/WorkflowEventLogTiein/tests/data/ParallelSplitCancelCaseActionActionSynchronization.log
 [iso-8859-1] Mon Jan 21 18:06:25 2008
@@ -4,11 +4,5 @@
 MMM DD HH:MM:SS [Debug] [default] [default] Activated node 
#2(ezcWorkflowNodeParallelSplit) for instance #1 of workflow 
"ParallelSplitCancelCaseActionActionSynchronization" (version 1).
 MMM DD HH:MM:SS [Debug] [default] [default] Executed node 
#1(ezcWorkflowNodeStart) for instance #1 of workflow 
"ParallelSplitCancelCaseActionActionSynchronization" (version 1).
 MMM DD HH:MM:SS [Debug] [default] [default] Started thread #1 (3 sibling(s)) 
for execution #1 of workflow 
"ParallelSplitCancelCaseActionActionSynchronization" (version 1).
-MMM DD HH:MM:SS [Debug] [default] [default] Activated node 
#3(ezcWorkflowNodeCancel) for instance #1 of workflow 
"ParallelSplitCancelCaseActionActionSynchronization" (version 1).
-MMM DD HH:MM:SS [Debug] [default] [default] Started thread #2 (3 sibling(s)) 
for execution #1 of workflow 
"ParallelSplitCancelCaseActionActionSynchronization" (version 1).
-MMM DD HH:MM:SS [Debug] [default] [default] Activated node 
#6(ezcWorkflowNodeAction) for instance #1 of workflow 
"ParallelSplitCancelCaseActionActionSynchronization" (version 1).
-MMM DD HH:MM:SS [Debug] [default] [default] Started thread #3 (3 sibling(s)) 
for execution #1 of workflow 
"ParallelSplitCancelCaseActionActionSynchronization" (version 1).
-MMM DD HH:MM:SS [Debug] [default] [default] Activated node 
#7(ezcWorkflowNodeAction) for instance #1 of workflow 
"ParallelSplitCancelCaseActionActionSynchronization" (version 1).
-MMM DD HH:MM:SS [Debug] [default] [default] Executed node 
#2(ezcWorkflowNodeParallelSplit) for instance #1 of workflow 
"ParallelSplitCancelCaseActionActionSynchronization" (version 1).
 MMM DD HH:MM:SS [Debug] [default] [default] Executed node 
#3(ezcWorkflowNodeCancel) for instance #1 of workflow 
"ParallelSplitCancelCaseActionActionSynchronization" (version 1).
 MMM DD HH:MM:SS [Info] [default] [default] Cancelled execution #1 of workflow 
"ParallelSplitCancelCaseActionActionSynchronization" (version 1).


-- 
svn-components mailing list
svn-components@lists.ez.no
http://lists.ez.no/mailman/listinfo/svn-components

Reply via email to