[jbpm-commits] JBoss JBPM SVN: r5247 - in jbpm4/trunk/modules: pvm/src/main/java/org/jbpm/pvm/internal/history/events and 4 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Mon Jul 6 07:08:58 EDT 2009


Author: tom.baeyens at jboss.com
Date: 2009-07-06 07:08:58 -0400 (Mon, 06 Jul 2009)
New Revision: 5247

Added:
   jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/taskactivity/TaskReassignTest.java
Modified:
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/TaskActivity.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/history/events/TaskAssign.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/job/TimerImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskHandler.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskImpl.java
Log:
JBPM-2389 fixed history propagation of reassignment of tasks

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/TaskActivity.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/TaskActivity.java	2009-07-06 11:07:48 UTC (rev 5246)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/TaskActivity.java	2009-07-06 11:08:58 UTC (rev 5247)
@@ -51,13 +51,7 @@
   public void execute(ActivityExecution execution) {
     ExecutionImpl executionImpl = (ExecutionImpl) execution;
     TaskImpl task = executionImpl.createTask(taskDefinition);
-
-    TaskHandler taskHandler = task.getTaskHandler();
-    boolean wait = taskHandler.executionCreateTask(task);
-    
-    if (wait) {
-      execution.waitForSignal();
-    }
+    execution.waitForSignal();
   }
   
   public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) throws Exception {

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/history/events/TaskAssign.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/history/events/TaskAssign.java	2009-07-06 11:07:48 UTC (rev 5246)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/history/events/TaskAssign.java	2009-07-06 11:08:58 UTC (rev 5247)
@@ -21,7 +21,11 @@
  */
 package org.jbpm.pvm.internal.history.events;
 
+import org.jbpm.pvm.internal.env.Environment;
 import org.jbpm.pvm.internal.history.HistoryEvent;
+import org.jbpm.pvm.internal.history.model.HistoryTaskInstanceImpl;
+import org.jbpm.pvm.internal.session.DbSession;
+import org.jbpm.pvm.internal.task.TaskImpl;
 
 /**
  * @author Alejandro Guizar
@@ -30,15 +34,18 @@
 
   private static final long serialVersionUID = 1L;
 
-  protected String userId;
+  protected TaskImpl taskImpl;
+  protected String assignee;
 
-  public TaskAssign(String userId) {
-    this.userId = userId;
+  public TaskAssign(TaskImpl taskImpl, String assignee) {
+    this.assignee = assignee;
   }
 
-  @Override
   public void process() {
-    // TODO
+    DbSession dbSession = Environment.getFromCurrent(DbSession.class);
+    Long historyActivityInstanceDbId = execution.getHistoryActivityInstanceDbid();
+    HistoryTaskInstanceImpl historyTaskInstance = (HistoryTaskInstanceImpl) 
+        dbSession.get(HistoryTaskInstanceImpl.class, historyActivityInstanceDbId);
+    historyTaskInstance.setAssignee(assignee);
   }
-
 }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/job/TimerImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/job/TimerImpl.java	2009-07-06 11:07:48 UTC (rev 5246)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/job/TimerImpl.java	2009-07-06 11:08:58 UTC (rev 5247)
@@ -30,10 +30,12 @@
 import org.jbpm.pvm.internal.cal.BusinessCalendar;
 import org.jbpm.pvm.internal.cal.Duration;
 import org.jbpm.pvm.internal.env.Environment;
+import org.jbpm.pvm.internal.env.EnvironmentDefaults;
 import org.jbpm.pvm.internal.env.Transaction;
 import org.jbpm.pvm.internal.jobexecutor.JobAddedNotification;
 import org.jbpm.pvm.internal.jobexecutor.JobExecutor;
 import org.jbpm.pvm.internal.model.ObservableElement;
+import org.jbpm.pvm.internal.script.ScriptManager;
 import org.jbpm.pvm.internal.session.DbSession;
 import org.jbpm.pvm.internal.session.TimerSession;
 import org.jbpm.pvm.internal.util.Clock;
@@ -69,6 +71,10 @@
   }
 
   public void setDueDateDescription(String dueDateDescription) {
+
+    ScriptManager scriptManager = EnvironmentDefaults.getScriptManager();
+    dueDateDescription = (String) scriptManager.evaluateExpression(dueDateDescription, null);
+    
     Duration duration = new Duration(dueDateDescription);
     Date now = Clock.getCurrentTime();
     

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java	2009-07-06 11:07:48 UTC (rev 5246)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java	2009-07-06 11:08:58 UTC (rev 5247)
@@ -75,6 +75,7 @@
 import org.jbpm.pvm.internal.task.SwimlaneDefinitionImpl;
 import org.jbpm.pvm.internal.task.SwimlaneImpl;
 import org.jbpm.pvm.internal.task.TaskDefinitionImpl;
+import org.jbpm.pvm.internal.task.TaskHandler;
 import org.jbpm.pvm.internal.task.TaskImpl;
 import org.jbpm.pvm.internal.type.Variable;
 import org.jbpm.pvm.internal.util.EqualsUtil;
@@ -729,6 +730,9 @@
     
     // save task so that TaskDbSession.findTaskByExecution works for assign event listeners
     dbSession.saveTask(task);
+
+    TaskHandler taskHandler = task.getTaskHandler();
+    boolean wait = taskHandler.executionCreateTask(task);
     
     SwimlaneDefinitionImpl swimlaneDefinition = taskDefinition.getSwimlaneDefinition();
     if (swimlaneDefinition!=null) {

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskHandler.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskHandler.java	2009-07-06 11:07:48 UTC (rev 5246)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskHandler.java	2009-07-06 11:08:58 UTC (rev 5247)
@@ -53,8 +53,8 @@
   }
   
   /** called when the given task is assigned to an actor. */
-  public void taskAssign(TaskImpl task, String userId) {
-    task.historyTaskAssign(userId);
+  public void taskAssign(TaskImpl task, String assignee) {
+    task.historyTaskAssign(assignee);
   }
 
   /** called when the given task is cancelled. */ 

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskImpl.java	2009-07-06 11:07:48 UTC (rev 5246)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/task/TaskImpl.java	2009-07-06 11:08:58 UTC (rev 5247)
@@ -123,13 +123,14 @@
     setAssignee(userId, false);
   }
 
-  public void setAssignee(String userId, boolean propagateToSwimlane) {
-    this.assignee = userId;
+  public void setAssignee(String assignee, boolean propagateToSwimlane) {
+    this.assignee = assignee;
     if (propagateToSwimlane) {
       propagateAssigneeToSwimlane();
     }
     if (execution != null) {
       execution.fire(Event.ASSIGN, execution.getActivity());
+      getTaskHandler().taskAssign(this, assignee);
     }
   }
 
@@ -327,9 +328,9 @@
     }
   }
 
-  public void historyTaskAssign(String userId) {
+  public void historyTaskAssign(String assignee) {
     if (execution != null) {
-      execution.fireHistoryEvent(new TaskAssign(userId));
+      execution.fireHistoryEvent(new TaskAssign(this, assignee));
     }
   }
 

Added: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/taskactivity/TaskReassignTest.java
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/taskactivity/TaskReassignTest.java	                        (rev 0)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/taskactivity/TaskReassignTest.java	2009-07-06 11:08:58 UTC (rev 5247)
@@ -0,0 +1,77 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.test.taskactivity;
+
+import java.util.List;
+
+import org.jbpm.api.ProcessInstance;
+import org.jbpm.api.history.HistoryActivityInstance;
+import org.jbpm.api.task.Task;
+import org.jbpm.jpdl.internal.xml.JpdlParser;
+import org.jbpm.pvm.internal.history.model.HistoryTaskInstanceImpl;
+import org.jbpm.test.JbpmTestCase;
+
+/**
+ * @author Tom Baeyens
+ */
+public class TaskReassignTest extends JbpmTestCase {
+
+  public void testReassignHistory() {
+    deployJpdlXmlString(
+      "<process name='ReassignTest' xmlns='"+JpdlParser.JPDL_NAMESPACE+"'>" +
+      "  <start>" +
+      "    <transition to='write email'/>" +
+      "  </start>" +
+      "  <task name='write email' assignee='shekharv'>" +
+      "    <transition to='end'/>" +
+      "  </task>" +
+      "  <end name='end'/>" +
+      "</process>"
+    );
+    
+    ProcessInstance pi = executionService.startProcessInstanceByKey("ReassignTest");
+
+    List<Task> tasks = taskService.findPersonalTasks("shekharv");
+    assertTrue(tasks.size() == 1);
+
+    String taskId = tasks.get(0).getId();
+
+    taskService.assignTask(taskId, "johndoe");
+    
+    List<Task> tasksAfterReassignment = taskService.findPersonalTasks("shekharv");
+    assertTrue("shekharv should not have any tasks.", tasksAfterReassignment.size() == 0);
+
+    List<Task> tasksForNewAssignee = taskService.findPersonalTasks("johndoe");
+    assertTrue("johndoe should have 1 task.", tasksForNewAssignee.size() == 1);
+
+    assertEquals("johndoe", taskService.getTask(taskId).getAssignee());
+
+    taskService.completeTask(taskId);
+    List<HistoryActivityInstance> aiHistory = historyService
+      .createHistoryActivityInstanceQuery()
+      .executionId(pi.getId())
+      .list();
+    HistoryTaskInstanceImpl hai = (HistoryTaskInstanceImpl) aiHistory.get(0);
+
+    assertEquals("John Doe completed the Task, but someone else got the credit", "johndoe", hai.getAssignee());
+  }
+}


Property changes on: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/taskactivity/TaskReassignTest.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain




More information about the jbpm-commits mailing list