[jbpm-commits] JBoss JBPM SVN: r6837 - in jbpm4/trunk/modules: pvm/src/main/java/org/jbpm/pvm/internal/util and 2 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Sun Nov 21 08:43:03 EST 2010


Author: rebody
Date: 2010-11-21 08:43:03 -0500 (Sun, 21 Nov 2010)
New Revision: 6837

Added:
   jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/bpmn/test/task/UserTaskTest.java
   jbpm4/trunk/modules/test-db/src/test/resources/org/jbpm/bpmn/userTask.bpmn.xml
Modified:
   jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/AbstractTaskBinding.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/ReflectUtil.java
Log:
JBPM-2921 provide assignment-handler in BPMN

Modified: jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/AbstractTaskBinding.java
===================================================================
--- jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/AbstractTaskBinding.java	2010-11-21 12:55:19 UTC (rev 6836)
+++ jbpm4/trunk/modules/bpmn/src/main/java/org/jbpm/bpmn/flownodes/AbstractTaskBinding.java	2010-11-21 13:43:03 UTC (rev 6837)
@@ -7,6 +7,8 @@
 import org.jbpm.pvm.internal.el.Expression;
 import org.jbpm.pvm.internal.task.TaskDefinitionImpl;
 import org.jbpm.pvm.internal.util.XmlUtil;
+import org.jbpm.pvm.internal.wire.descriptor.ObjectDescriptor;
+import org.jbpm.pvm.internal.wire.usercode.UserCodeReference;
 import org.jbpm.pvm.internal.xml.Parse;
 import org.w3c.dom.Element;
 
@@ -72,6 +74,12 @@
         taskDefinition.setAssigneeExpression(expression);
       } else if (POTENTIAL_OWNER.equals(type) && "user".equals(scope)) { // default is group
         taskDefinition.setCandidateUsersExpression(expression);
+      } else if ("assignment-handler".equals(scope)) {
+        UserCodeReference assignmentHandlerReference = new UserCodeReference();
+
+        ObjectDescriptor objectDescriptor = new ObjectDescriptor(formalExpression);
+        assignmentHandlerReference.setDescriptor(objectDescriptor);
+        taskDefinition.setAssignmentHandlerReference(assignmentHandlerReference);
       } else {
         taskDefinition.setCandidateGroupsExpression(expression);
       }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/ReflectUtil.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/ReflectUtil.java	2010-11-21 12:55:19 UTC (rev 6836)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/ReflectUtil.java	2010-11-21 13:43:03 UTC (rev 6837)
@@ -199,7 +199,7 @@
   }
 
   public static Method findMethod(Class<?> clazz, String methodName, List<ArgDescriptor> argDescriptors, Object[] args) {
-    if (log.isTraceEnabled()) log.trace("searching for method "+methodName+" in "+clazz.getName());
+    if (log.isTraceEnabled()) log.trace("searching for method " + methodName + " in " + clazz.getName());
     Method[] candidates = clazz.getDeclaredMethods();
     for (int i=0; i<candidates.length; i++) {
       Method candidate = candidates[i];
@@ -208,13 +208,13 @@
          ) {
 
         if (log.isTraceEnabled()) {
-          if (log.isTraceEnabled()) log.trace("found matching method "+clazz.getName()+"."+methodName);
+          if (log.isTraceEnabled()) log.trace("found matching method " + clazz.getName() + "." + methodName);
         }
 
         return candidate;
       }
     }
-    if (clazz.getSuperclass()!=null) {
+    if (clazz.getSuperclass() != null) {
       return findMethod(clazz.getSuperclass(), methodName, argDescriptors, args);
     }
     return null;
@@ -222,7 +222,7 @@
 
   public static Constructor<?> findConstructor(Class<?> clazz, List<ArgDescriptor> argDescriptors, Object[] args) {
     Constructor<?>[] constructors = clazz.getDeclaredConstructors();
-    for (int i=0; i<constructors.length; i++) {
+    for (int i = 0; i < constructors.length; i++) {
       if (isArgumentMatch(constructors[i].getParameterTypes(), argDescriptors, args)) {
         return constructors[i];
       }
@@ -231,18 +231,18 @@
   }
 
   public static boolean isArgumentMatch(Class<?>[] parameterTypes, List<ArgDescriptor> argDescriptors, Object[] args) {
-    int nbrOfArgs = args!=null ? args.length : 0;
-    int nbrOfParameterTypes = parameterTypes!=null ? parameterTypes.length : 0;
+    int nbrOfArgs = args != null ? args.length : 0;
+    int nbrOfParameterTypes = parameterTypes != null ? parameterTypes.length : 0;
 
-    if (nbrOfArgs!=nbrOfParameterTypes) {
+    if (nbrOfArgs != nbrOfParameterTypes) {
       return false;
     }
 
-    if (nbrOfArgs==0) {
+    if (nbrOfArgs == 0) {
       return true;
     }
 
-    for (int i=0; i<parameterTypes.length; i++) {
+    for (int i = 0; i < parameterTypes.length; i++) {
       Class<?> parameterType = parameterTypes[i];
       String argTypeName;
       if (argDescriptors == null || (argTypeName = argDescriptors.get(i).getTypeName()) == null) {

Added: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/bpmn/test/task/UserTaskTest.java
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/bpmn/test/task/UserTaskTest.java	                        (rev 0)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/bpmn/test/task/UserTaskTest.java	2010-11-21 13:43:03 UTC (rev 6837)
@@ -0,0 +1,42 @@
+package org.jbpm.bpmn.test.task;
+
+import java.util.List;
+
+import org.jbpm.api.NewDeployment;
+import org.jbpm.api.ProcessInstance;
+import org.jbpm.api.model.OpenExecution;
+import org.jbpm.api.task.Assignable;
+import org.jbpm.api.task.AssignmentHandler;
+import org.jbpm.api.task.Task;
+import org.jbpm.test.JbpmTestCase;
+
+
+public class UserTaskTest  extends JbpmTestCase {
+
+  @Override
+  protected void setUp() throws Exception {
+      super.setUp();
+      NewDeployment deployment = repositoryService.createDeployment();
+      deployment.addResourceFromClasspath("org/jbpm/bpmn/userTask.bpmn.xml");
+      registerDeployment(deployment.deploy());
+  }
+
+  public void testAssignmentHandler() {
+      ProcessInstance pi = executionService.startProcessInstanceByKey("userTaskProcess");
+
+      assertNotNull(pi.getId());
+
+      List<Task> allTasks = taskService.findPersonalTasks("johndoe");
+      assertEquals(1, allTasks.size());
+
+      taskService.completeTask(allTasks.get(0).getId());
+      assertProcessInstanceEnded(pi);
+  }
+
+  public static class TaskHandler implements AssignmentHandler {
+      public void assign(Assignable assignable, OpenExecution execution) {
+          assignable.setAssignee("johndoe");
+      }
+  }
+
+}

Added: jbpm4/trunk/modules/test-db/src/test/resources/org/jbpm/bpmn/userTask.bpmn.xml
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/resources/org/jbpm/bpmn/userTask.bpmn.xml	                        (rev 0)
+++ jbpm4/trunk/modules/test-db/src/test/resources/org/jbpm/bpmn/userTask.bpmn.xml	2010-11-21 13:43:03 UTC (rev 6837)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<definitions id="sid-e471f2be-74cc-4f20-a201-09327449efdf"
+    typeLanguage="http://www.w3.org/2001/XMLSchema"
+    expressionLanguage="http://www.w3.org/1999/XPath"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    targetNamespace="http://www.omg.org/bpmn20"
+    xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
+    xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
+    xmlns:jbpm="http://jbpm.org/bpmn2">
+    <process id="userTaskProcess" name="userTaskProcess">
+        <startEvent name="Process start" id="start"/>
+        <sequenceFlow targetRef="userTask" sourceRef="start" name="flow2Manual" id="flow1"/>
+        <userTask implementation="other" name="Sales operation" id="userTask">
+            <potentialOwner jbpm:type="assignment-handler">
+                <resourceRef>sales</resourceRef>
+                <resourceAssignmentExpression>
+                    <formalExpression>org.jbpm.bpmn.test.task.UserTaskTest$TaskHandler</formalExpression>
+                </resourceAssignmentExpression>
+            </potentialOwner>
+        </userTask>
+        <sequenceFlow targetRef="end" sourceRef="userTask" name="flow2End" id="flow3"/>
+        <endEvent name="Process end" id="end"/>
+    </process>
+</definitions>



More information about the jbpm-commits mailing list