package org.jbpm.jpdl.el; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import org.jbpm.AbstractJbpmTestCase; import org.jbpm.graph.def.ProcessDefinition; import org.jbpm.graph.exe.ProcessInstance; import org.jbpm.taskmgmt.exe.PooledActor; import org.jbpm.taskmgmt.exe.TaskInstance; public class TaskExpressionTest extends AbstractJbpmTestCase { public static class Customer { String salesRepresentative; public Customer() {} public Customer(String salesRepresentative) { this.salesRepresentative = salesRepresentative; } public String getSalesRepresentative() { return salesRepresentative; } public String toString() { return "coca cola"; } } public void testTaskDecriptionExpression() { ProcessDefinition processDefinition = ProcessDefinition.parseXmlString( "<process-definition>" + " <start-state>" + " <transition to='t'/>" + " </start-state>" + " <task-node name='t'>" + " <task description='screen #{customer} credit rating' />" + " </task-node>" + "</process-definition>" ); ProcessInstance processInstance = new ProcessInstance(processDefinition); processInstance.getContextInstance().setVariable("customer", new Customer()); processInstance.signal(); TaskInstance taskInstance = (TaskInstance) processInstance.getTaskMgmtInstance().getTaskInstances().iterator().next(); assertEquals("screen coca cola credit rating", taskInstance.getDescription()); } public void testTaskActorIdExpression() { ProcessDefinition processDefinition = ProcessDefinition.parseXmlString( "<process-definition>" + " <start-state>" + " <transition to='t'/>" + " </start-state>" + " <task-node name='t'>" + " <task>" + " <assignment actor-id='#{customer.salesRepresentative}' />" + " </task>" + " </task-node>" + "</process-definition>" ); ProcessInstance processInstance = new ProcessInstance(processDefinition); processInstance.getContextInstance().setVariable("customer", new Customer("jerry")); processInstance.signal(); TaskInstance taskInstance = (TaskInstance) processInstance.getTaskMgmtInstance().getTaskInstances().iterator().next(); assertEquals("jerry", taskInstance.getActorId()); } public void testPooledActorsExpression() { ProcessDefinition processDefinition = ProcessDefinition.parseXmlString( "<process-definition>" + " <start-state>" + " <transition to='t'/>" + " </start-state>" + " <task-node name='t'>" + " <task>" + " <assignment pooled-actors='#{sales}, #{marketing}, maggie' />" + " </task>" + " </task-node>" + "</process-definition>" ); ProcessInstance processInstance = new ProcessInstance(processDefinition); processInstance.getContextInstance().setVariable("sales", "homer, marge"); processInstance.getContextInstance().setVariable("marketing", "bart, lisa"); processInstance.signal(); TaskInstance taskInstance = (TaskInstance) processInstance.getTaskMgmtInstance().getTaskInstances().iterator().next(); Set expected = new HashSet(); expected.add("homer"); expected.add("marge"); expected.add("bart"); expected.add("lisa"); expected.add("maggie"); Set pooledActorIds = new HashSet(); Iterator iter = taskInstance.getPooledActors().iterator(); while (iter.hasNext()) { pooledActorIds.add(((PooledActor)iter.next()).getActorId()); } assertEquals(expected, pooledActorIds); } }