Skip to content

Commit

Permalink
BZ893196 - Please provide way to set 'createdBy' with arbitrary value…
Browse files Browse the repository at this point in the history
…s at process creation time (PRODMGT-307)
  • Loading branch information
mswiderski committed Feb 7, 2013
1 parent b11691f commit a2fabec
Show file tree
Hide file tree
Showing 8 changed files with 472 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import org.jbpm.task.SubTasksStrategyFactory;
import org.jbpm.task.Task;
import org.jbpm.task.TaskData;
import org.jbpm.task.User;
import org.jbpm.task.event.TaskEventKey;
import org.jbpm.task.service.ContentData;
import org.jbpm.task.utils.ContentMarshallerHelper;
Expand Down Expand Up @@ -123,6 +124,11 @@ protected Task createTaskBasedOnWorkItemParams(WorkItem workItem) {
task.setSubTaskStrategies(strategies);
}

String createdBy = (String) workItem.getParameter("CreatedBy");
if (createdBy != null && createdBy.trim().length() > 0) {
taskData.setCreatedBy(new User(createdBy));
}

task.setTaskData(taskData);

PeopleAssignmentHelper peopleAssignmentHelper = new PeopleAssignmentHelper();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ protected void assignActors(WorkItem workItem, PeopleAssignments peopleAssignmen
processPeopleAssignments(actorIds, potentialOwners, true);

// Set the first user as creator ID??? hmmm might be wrong
if (potentialOwners.size() > 0) {
if (potentialOwners.size() > 0 && taskData.getCreatedBy() == null) {

OrganizationalEntity firstPotentialOwner = potentialOwners.get(0);
taskData.setCreatedBy((User) firstPotentialOwner);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -521,7 +521,82 @@ public void testTaskWithCustomLocale() throws Exception {
operationResponseHandler.waitTillDone(15000);

assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME));
}
}

public void testTaskWithCreatedBy() throws Exception {
TestWorkItemManager manager = new TestWorkItemManager();
WorkItemImpl workItem = new WorkItemImpl();
workItem.setName("Human Task");
workItem.setParameter("TaskName", "TaskName");
workItem.setParameter("Comment", "Comment");
workItem.setParameter("Priority", "10");
workItem.setParameter("ActorId", "Darth Vader");
workItem.setParameter("CreatedBy", "john");
workItem.setProcessInstanceId(10);
handler.executeWorkItem(workItem, manager);

Thread.sleep(500);

BlockingTaskSummaryResponseHandler responseHandler = new BlockingTaskSummaryResponseHandler();
client.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
List<TaskSummary> tasks = responseHandler.getResults();
assertEquals(1, tasks.size());
TaskSummary task = tasks.get(0);
assertEquals("TaskName", task.getName());
assertEquals(10, task.getPriority());
assertEquals("Comment", task.getDescription());
assertEquals(Status.Reserved, task.getStatus());
assertEquals("Darth Vader", task.getActualOwner().getId());
assertEquals("john", task.getCreatedBy().getId());
assertEquals(10, task.getProcessInstanceId());

BlockingTaskOperationResponseHandler operationResponseHandler = new BlockingTaskOperationResponseHandler();
client.start(task.getId(), "Darth Vader", operationResponseHandler);
operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);

operationResponseHandler = new BlockingTaskOperationResponseHandler();
client.complete(task.getId(), "Darth Vader", null, operationResponseHandler);
operationResponseHandler.waitTillDone(15000);

assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME));
}

public void testTaskWithoutCreatedBy() throws Exception {
TestWorkItemManager manager = new TestWorkItemManager();
WorkItemImpl workItem = new WorkItemImpl();
workItem.setName("Human Task");
workItem.setParameter("TaskName", "TaskName");
workItem.setParameter("Comment", "Comment");
workItem.setParameter("Priority", "10");
workItem.setParameter("ActorId", "Darth Vader");
workItem.setProcessInstanceId(10);
handler.executeWorkItem(workItem, manager);

Thread.sleep(500);

BlockingTaskSummaryResponseHandler responseHandler = new BlockingTaskSummaryResponseHandler();
client.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
List<TaskSummary> tasks = responseHandler.getResults();
assertEquals(1, tasks.size());
TaskSummary task = tasks.get(0);
assertEquals("TaskName", task.getName());
assertEquals(10, task.getPriority());
assertEquals("Comment", task.getDescription());
assertEquals(Status.Reserved, task.getStatus());
assertEquals("Darth Vader", task.getActualOwner().getId());
assertEquals("Darth Vader", task.getCreatedBy().getId());
assertEquals(10, task.getProcessInstanceId());

BlockingTaskOperationResponseHandler operationResponseHandler = new BlockingTaskOperationResponseHandler();
client.start(task.getId(), "Darth Vader", operationResponseHandler);
operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);

operationResponseHandler = new BlockingTaskOperationResponseHandler();
client.complete(task.getId(), "Darth Vader", null, operationResponseHandler);
operationResponseHandler.waitTillDone(15000);

assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME));
}

public void TODOtestOnAllSubTasksEndParentEndStrategy() throws Exception {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -546,6 +546,75 @@ public void testTaskWithCustomLocale() throws Exception {
assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME));
}

public void testTaskWithCreatedBy() throws Exception {
TestWorkItemManager manager = new TestWorkItemManager();
ksession.setWorkItemManager(manager);
WorkItemImpl workItem = new WorkItemImpl();
workItem.setName("Human Task");
workItem.setParameter("TaskName", "TaskName");
workItem.setParameter("Comment", "Comment");
workItem.setParameter("Priority", "10");
workItem.setParameter("ActorId", "Darth Vader");
workItem.setParameter("CreatedBy", "john");
workItem.setProcessInstanceId(10);
handler.executeWorkItem(workItem, manager);


List<TaskSummary> tasks = client.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK");
assertEquals(1, tasks.size());
TaskSummary task = tasks.get(0);
assertEquals("TaskName", task.getName());
assertEquals(10, task.getPriority());
assertEquals("Comment", task.getDescription());
assertEquals(Status.Reserved, task.getStatus());
assertEquals("Darth Vader", task.getActualOwner().getId());
assertEquals("john", task.getCreatedBy().getId());
assertEquals(10, task.getProcessInstanceId());

List<Long> taskIds = client.getTasksByProcessInstanceId(10);
assertEquals(1, taskIds.size());
assertEquals(task.getId(), (long) taskIds.get(0));

client.start(task.getId(), "Darth Vader");
client.complete(task.getId(), "Darth Vader", null);

assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME));
}

public void testTaskWithoutCreatedBy() throws Exception {
TestWorkItemManager manager = new TestWorkItemManager();
ksession.setWorkItemManager(manager);
WorkItemImpl workItem = new WorkItemImpl();
workItem.setName("Human Task");
workItem.setParameter("TaskName", "TaskName");
workItem.setParameter("Comment", "Comment");
workItem.setParameter("Priority", "10");
workItem.setParameter("ActorId", "Darth Vader");
workItem.setProcessInstanceId(10);
handler.executeWorkItem(workItem, manager);


List<TaskSummary> tasks = client.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK");
assertEquals(1, tasks.size());
TaskSummary task = tasks.get(0);
assertEquals("TaskName", task.getName());
assertEquals(10, task.getPriority());
assertEquals("Comment", task.getDescription());
assertEquals(Status.Reserved, task.getStatus());
assertEquals("Darth Vader", task.getActualOwner().getId());
assertEquals("Darth Vader", task.getCreatedBy().getId());
assertEquals(10, task.getProcessInstanceId());

List<Long> taskIds = client.getTasksByProcessInstanceId(10);
assertEquals(1, taskIds.size());
assertEquals(task.getId(), (long) taskIds.get(0));

client.start(task.getId(), "Darth Vader");
client.complete(task.getId(), "Darth Vader", null);

assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME));
}

public void TODOtestOnAllSubTasksEndParentEndStrategy() throws Exception {

TestWorkItemManager manager = new TestWorkItemManager();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,10 @@ protected Task createTaskBasedOnWorkItemParams(StatefulKnowledgeSession session,
if (parentId != null) {
taskData.setParentId(parentId);
}
String createdBy = (String) workItem.getParameter("CreatedBy");
if (createdBy != null && createdBy.trim().length() > 0) {
taskData.setCreatedBy(new User(createdBy));
}
PeopleAssignments assignments = new PeopleAssignments();
List<OrganizationalEntity> potentialOwners = new ArrayList<OrganizationalEntity>();
String actorId = (String) workItem.getParameter("ActorId");
Expand All @@ -111,7 +115,7 @@ protected Task createTaskBasedOnWorkItemParams(StatefulKnowledgeSession session,
potentialOwners.add(new User(id.trim()));
}
//Set the first user as creator ID??? hmmm might be wrong
if (potentialOwners.size() > 0) {
if (potentialOwners.size() > 0 && taskData.getCreatedBy() == null) {
taskData.setCreatedBy((User) potentialOwners.get(0));
}
}
Expand All @@ -122,6 +126,7 @@ protected Task createTaskBasedOnWorkItemParams(StatefulKnowledgeSession session,
potentialOwners.add(new Group(id.trim()));
}
}

assignments.setPotentialOwners(potentialOwners);
List<OrganizationalEntity> businessAdministrators = new ArrayList<OrganizationalEntity>();
businessAdministrators.add(new User("Administrator"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -509,6 +509,69 @@ public void testTaskDataAutomaticMapping() throws Exception {
// }
// }
//

@Test
public void testTaskWithCreatedBy() throws Exception {
TestWorkItemManager manager = new TestWorkItemManager();
ksession.setWorkItemManager(manager);
WorkItemImpl workItem = new WorkItemImpl();
workItem.setName("Human Task");
workItem.setParameter("TaskName", "TaskName");
workItem.setParameter("Comment", "Comment");
workItem.setParameter("Priority", "10");
workItem.setParameter("ActorId", "Darth Vader");
workItem.setParameter("CreatedBy", "john");
workItem.setProcessInstanceId(10);
handler.executeWorkItem(workItem, manager);


List<TaskSummary> tasks = taskService.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK");
assertEquals(1, tasks.size());
TaskSummary task = tasks.get(0);
assertEquals("TaskName", task.getName());
assertEquals(10, task.getPriority());
assertEquals("Comment", task.getDescription());
assertEquals(Status.Reserved, task.getStatus());
assertEquals("Darth Vader", task.getActualOwner().getId());
assertEquals("john", task.getCreatedBy().getId());
assertEquals(10, task.getProcessInstanceId());

taskService.start(task.getId(), "Darth Vader");
taskService.complete(task.getId(), "Darth Vader", null);

assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME));
}

@Test
public void testTaskWithoutCreatedBy() throws Exception {
TestWorkItemManager manager = new TestWorkItemManager();
ksession.setWorkItemManager(manager);
WorkItemImpl workItem = new WorkItemImpl();
workItem.setName("Human Task");
workItem.setParameter("TaskName", "TaskName");
workItem.setParameter("Comment", "Comment");
workItem.setParameter("Priority", "10");
workItem.setParameter("ActorId", "Darth Vader");
workItem.setProcessInstanceId(10);
handler.executeWorkItem(workItem, manager);


List<TaskSummary> tasks = taskService.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK");
assertEquals(1, tasks.size());
TaskSummary task = tasks.get(0);
assertEquals("TaskName", task.getName());
assertEquals(10, task.getPriority());
assertEquals("Comment", task.getDescription());
assertEquals(Status.Reserved, task.getStatus());
assertEquals("Darth Vader", task.getActualOwner().getId());
assertEquals("Darth Vader", task.getCreatedBy().getId());
assertEquals(10, task.getProcessInstanceId());

taskService.start(task.getId(), "Darth Vader");
taskService.complete(task.getId(), "Darth Vader", null);

assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME));
}

public void setHandler(WorkItemHandler handler) {
this.handler = handler;
Expand Down
35 changes: 35 additions & 0 deletions jbpm-test/src/test/java/org/jbpm/ProcessHumanTaskTest.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package org.jbpm;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.jbpm.task.TaskService;
import org.jbpm.task.query.TaskSummary;
Expand Down Expand Up @@ -47,5 +49,38 @@ public void testProcess() {
assertNodeTriggered(processInstance.getId(), "End");
assertProcessInstanceCompleted(processInstance.getId(), ksession);
}

@Test
public void testProcessWithCreatedBy() {
StatefulKnowledgeSession ksession = createKnowledgeSession("humantaskwithcreatedby.bpmn");
TaskService taskService = getTaskService(ksession);
Map<String, Object> params = new HashMap<String, Object>();
params.put("person", "krisv");
ProcessInstance processInstance = ksession.startProcess("com.sample.bpmn.hello.createdby", params);

assertProcessInstanceActive(processInstance.getId(), ksession);
assertNodeTriggered(processInstance.getId(), "Start", "Task 1");

// let john execute Task 1
List<TaskSummary> list = taskService.getTasksAssignedAsPotentialOwner("john", "en-UK");
TaskSummary task = list.get(0);
assertEquals("mary", task.getCreatedBy().getId());
System.out.println("John is executing task " + task.getName());
taskService.start(task.getId(), "john");
taskService.complete(task.getId(), "john", null);

assertNodeTriggered(processInstance.getId(), "Task 2");

// let mary execute Task 2
list = taskService.getTasksAssignedAsPotentialOwner("mary", "en-UK");
task = list.get(0);
assertEquals("krisv", task.getCreatedBy().getId());
System.out.println("Mary is executing task " + task.getName());
taskService.start(task.getId(), "mary");
taskService.complete(task.getId(), "mary", null);

assertNodeTriggered(processInstance.getId(), "End");
assertProcessInstanceCompleted(processInstance.getId(), ksession);
}

}
Loading

0 comments on commit a2fabec

Please sign in to comment.