### Eclipse Workspace Patch 1.0 #P jbpm4 Index: modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/ForkBinding.java =================================================================== --- modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/ForkBinding.java (revision 6403) +++ modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/ForkBinding.java (working copy) @@ -21,13 +21,20 @@ */ package org.jbpm.jpdl.internal.activity; +import java.util.List; + import org.jbpm.jpdl.internal.xml.JpdlParser; +import org.jbpm.pvm.internal.model.ActivityImpl; +import org.jbpm.pvm.internal.model.ExpressionCondition; +import org.jbpm.pvm.internal.model.TransitionImpl; +import org.jbpm.pvm.internal.util.XmlUtil; import org.jbpm.pvm.internal.xml.Parse; import org.w3c.dom.Element; /** * @author Tom Baeyens + * @author Maciej Swiderski */ public class ForkBinding extends JpdlBinding { @@ -35,7 +42,30 @@ super("fork"); } + @SuppressWarnings("unchecked") public Object parseJpdl(Element element, Parse parse, JpdlParser parser) { + + List transitionElements = XmlUtil.elements(element, "transition"); + ActivityImpl activity = parse.contextStackFind(ActivityImpl.class); + List transitions = (List) activity.getOutgoingTransitions(); + + for (int i=0; i" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + ""; + + public void testForkConditionNotAllTrue() { + deployJpdlXmlString(PROCESS); + + ProcessInstance processInstance = executionService.startProcessInstanceByKey("ForkCondition", Collections.singletonMap("test", 3)); + + assertTrue(processInstance.getExecutions().size() == 2); + + Task taskAlex = taskService.createTaskQuery().assignee("alex").uniqueResult(); + assertNotNull(taskAlex); + assertEquals("task2", taskAlex.getActivityName()); + + taskService.completeTask(taskAlex.getId()); + + Task taskMike = taskService.createTaskQuery().assignee("mike").uniqueResult(); + assertNotNull(taskMike); + assertEquals("task1", taskMike.getActivityName()); + + taskService.completeTask(taskMike.getId()); + + processInstance = executionService.findProcessInstanceById(processInstance.getId()); + + + executionService.signalExecutionById(processInstance.getId()); + + + HistoryProcessInstance history = historyService + .createHistoryProcessInstanceQuery() + .processInstanceId(processInstance.getId()) + .uniqueResult(); + + assertNotNull(history); + assertEquals(ProcessInstance.STATE_ENDED, history.getState()); + assertEquals("end1", history.getEndActivityName()); + } + + public void testForkConditionAllTrue() { + deployJpdlXmlString(PROCESS); + + ProcessInstance processInstance = executionService.startProcessInstanceByKey("ForkCondition", Collections.singletonMap("test", 4)); + + assertTrue(processInstance.getExecutions().size() == 3); + + Task taskAlex = taskService.createTaskQuery().assignee("alex").uniqueResult(); + assertNotNull(taskAlex); + assertEquals("task2", taskAlex.getActivityName()); + + taskService.completeTask(taskAlex.getId()); + + Task taskMike = taskService.createTaskQuery().assignee("mike").uniqueResult(); + assertNotNull(taskMike); + assertEquals("task1", taskMike.getActivityName()); + + taskService.completeTask(taskMike.getId()); + + processInstance = executionService.findProcessInstanceById(processInstance.getId()); + executionService.signalExecutionById(processInstance.getId()); + + HistoryProcessInstance history = historyService + .createHistoryProcessInstanceQuery() + .processInstanceId(processInstance.getId()) + .uniqueResult(); + + assertNotNull(history); + assertEquals(ProcessInstance.STATE_ENDED, history.getState()); + assertEquals("end1", history.getEndActivityName()); + } + +} Property changes on: modules\test-db\src\test\java\org\jbpm\test\activity\forkjoin\ForkWithConditionTest.java ___________________________________________________________________ Added: svn:keywords + Id Revision Added: svn:eol-style + LF