[jboss-svn-commits] JBL Code SVN: r33270 - in labs/jbossrules/trunk/drools-process/drools-process-task/src: test/java/org/drools/task/service and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon May 31 18:25:44 EDT 2010


Author: KrisVerlaenen
Date: 2010-05-31 18:25:43 -0400 (Mon, 31 May 2010)
New Revision: 33270

Modified:
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServerHandler.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServiceSession.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/MockEventMessagingTest.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEventMessagingBaseTest.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceLifeCycleBaseTest.java
Log:
JBRULES-2520: Human task service should allow claiming tasks based on group assignment
 - added claim method that adds groupIds for group authorization

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServerHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServerHandler.java	2010-05-31 22:20:50 UTC (rev 33269)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServerHandler.java	2010-05-31 22:25:43 UTC (rev 33270)
@@ -53,14 +53,18 @@
                     long taskId = (Long) cmd.getArguments().get(1);
                     String userId = (String) cmd.getArguments().get(2);
                     String targetEntityId = null;
+                    ContentData data = null;
+                    List<String> groupIds = null;
                     if (cmd.getArguments().size() > 3) {
                         targetEntityId = (String) cmd.getArguments().get(3);
+                        if (cmd.getArguments().size() > 4) {
+                            data = (ContentData) cmd.getArguments().get(4);
+                            if (cmd.getArguments().size() > 5) {
+                                groupIds = (List<String>) cmd.getArguments().get(5);
+                            }
+                        }
                     }
-                    ContentData data = null;
-                    if (cmd.getArguments().size() > 4) {
-                        data = (ContentData) cmd.getArguments().get(4);
-                    }
-                    taskSession.taskOperation(operation, taskId, userId, targetEntityId, data);
+                    taskSession.taskOperation(operation, taskId, userId, targetEntityId, data, groupIds);
 
                     List args = Collections.emptyList();
 

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServiceSession.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServiceSession.java	2010-05-31 22:20:50 UTC (rev 33269)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServiceSession.java	2010-05-31 22:25:43 UTC (rev 33270)
@@ -170,7 +170,8 @@
     }
 
     void evalCommand(final Operation operation, final List<OperationCommand> commands, final Task task,
-                     final User user, final OrganizationalEntity targetEntity) throws PermissionDeniedException {
+                     final User user, final OrganizationalEntity targetEntity,
+                     List<String> groupIds) throws PermissionDeniedException {
 
         final TaskData taskData = task.getTaskData();
         boolean statusMatched = false;
@@ -183,7 +184,7 @@
                         statusMatched = true;
 
                         // next find out if the user can execute this doOperation
-                        if (!isAllowed(command, task, user)) {
+                        if (!isAllowed(command, task, user, groupIds)) {
                             String errorMessage = "User '" + user + "' does not have permissions to execution operation '" + operation + "' on task id " + task.getId();
 
                             throw new PermissionDeniedException(errorMessage);
@@ -200,7 +201,7 @@
                         statusMatched = true;
 
                         // next find out if the user can execute this doOperation
-                        if (!isAllowed(command, task, user)) {
+                        if (!isAllowed(command, task, user, groupIds)) {
                             String errorMessage = "User '" + user + "' does not have permissions to execution operation '" + operation + "' on task id " + task.getId();
                             throw new PermissionDeniedException(errorMessage);
                         }
@@ -216,7 +217,8 @@
         }
     }
 
-    private static boolean isAllowed(final OperationCommand command, final Task task, final User user) {
+    private static boolean isAllowed(final OperationCommand command, final Task task, final User user,
+    		                         final List<String> groupIds) {
         final PeopleAssignments people = task.getPeopleAssignments();
         final TaskData taskData = task.getTaskData();
 
@@ -231,15 +233,17 @@
                     break;
                 }
                 case Initiator: {
-                    operationAllowed = (taskData.getCreatedBy() != null && taskData.getCreatedBy().equals(user));
+                    operationAllowed = (taskData.getCreatedBy() != null && 
+                		(taskData.getCreatedBy().equals(user)) 
+                		 || (groupIds != null && groupIds.contains(taskData.getCreatedBy().getId())));
                     break;
                 }
                 case PotentialOwner: {
-                    operationAllowed = isAllowed(user, people.getPotentialOwners());
+                    operationAllowed = isAllowed(user, groupIds, people.getPotentialOwners());
                     break;
                 }
                 case BusinessAdministrator: {
-                    operationAllowed = isAllowed(user, people.getBusinessAdministrators());
+                    operationAllowed = isAllowed(user, groupIds, people.getBusinessAdministrators());
                     break;
                 }
             }
@@ -301,7 +305,8 @@
     }
 
     public void taskOperation(final Operation operation, final long taskId, final String userId,
-                              final String targetEntityId, final ContentData data) throws TaskException {
+                              final String targetEntityId, final ContentData data,
+                              List<String> groupIds) throws TaskException {
         OrganizationalEntity targetEntity = null;
 
         if (targetEntityId != null) {
@@ -316,7 +321,7 @@
 
             beginOrUseExistingTransaction();
 
-            evalCommand(operation, commands, task, user, targetEntity);
+            evalCommand(operation, commands, task, user, targetEntity, groupIds);
 
             switch (operation) {
                 case Claim: {
@@ -599,19 +604,22 @@
 
     public static boolean isAllowed(final User user, final List<OrganizationalEntity>[] people) {
         for (List<OrganizationalEntity> list : people) {
-            if (isAllowed(user, list)) {
+            if (isAllowed(user, null, list)) {
                 return true;
             }
         }
         return false;
     }
 
-    static boolean isAllowed(final User user, final List<OrganizationalEntity> entities) {
+    static boolean isAllowed(final User user, final List<String> groupIds, final List<OrganizationalEntity> entities) {
         // for now just do a contains, I'll figure out group membership later.
         for (OrganizationalEntity entity : entities) {
-            if (entity.equals(user)) {
+            if (entity instanceof User && entity.equals(user)) {
                 return true;
             }
+            if (entity instanceof Group && groupIds != null && groupIds.contains(entity.getId())) {
+                return true;
+            }
         }
         return false;
     }

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/MockEventMessagingTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/MockEventMessagingTest.java	2010-05-31 22:20:50 UTC (rev 33269)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/MockEventMessagingTest.java	2010-05-31 22:25:43 UTC (rev 33270)
@@ -37,7 +37,7 @@
         taskService.getEventKeys().register( key, transport );      
         
         
-        taskSession.taskOperation( Operation.Claim, taskId, users.get( "darth" ).getId(), null, null );        
+        taskSession.taskOperation( Operation.Claim, taskId, users.get( "darth" ).getId(), null, null, null );        
         
         assertEquals( 1, transport.list.size() );
         assertEquals( taskId, ((TaskClaimedEvent) ((Payload) transport.list.get(0)).get()).getTaskId() );

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEventMessagingBaseTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEventMessagingBaseTest.java	2010-05-31 22:20:50 UTC (rev 33269)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEventMessagingBaseTest.java	2010-05-31 22:25:43 UTC (rev 33270)
@@ -50,7 +50,7 @@
         client.registerForEvent( key, true, handler );
         Thread.sleep( 3000 );
         
-        taskSession.taskOperation( Operation.Claim, taskId, users.get( "darth" ).getId(), null, null );          
+        taskSession.taskOperation( Operation.Claim, taskId, users.get( "darth" ).getId(), null, null, null );          
         handler.waitTillDone( 5000 );
         
         Payload payload = handler.getPayload();

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceLifeCycleBaseTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceLifeCycleBaseTest.java	2010-05-31 22:20:50 UTC (rev 33269)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceLifeCycleBaseTest.java	2010-05-31 22:25:43 UTC (rev 33270)
@@ -1,7 +1,9 @@
 package org.drools.task.service;
 
 import java.io.StringReader;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.collections.map.HashedMap;
@@ -181,6 +183,43 @@
         assertEquals( users.get( "darth" ), task2.getTaskData().getActualOwner() );
     }
 
+    public void testClaimWithGroupAssignee() throws Exception {
+        Map  vars = new HashedMap();     
+        vars.put( "users", users );
+        vars.put( "groups", groups );        
+        vars.put( "now", new Date() );
+        
+        // One potential owner, should go straight to state Reserved
+        String str = "(with (new Task()) { priority = 55, taskData = (with( new TaskData()) { } ), ";
+        str += "peopleAssignments = (with ( new PeopleAssignments() ) { potentialOwners = [groups['knightsTempler' ]], }),";                        
+        str += "names = [ new I18NText( 'en-UK', 'This is my task name')] })";
+            
+        BlockingAddTaskResponseHandler addTaskResponseHandler = new BlockingAddTaskResponseHandler();
+        Task task = ( Task )  eval( new StringReader( str ), vars );
+        client.addTask( task, null, addTaskResponseHandler );
+        
+        long taskId = addTaskResponseHandler.getTaskId();
+        
+        // A Task with multiple potential owners moves to "Ready" state until someone claims it.
+        BlockingGetTaskResponseHandler getTaskResponseHandler = new BlockingGetTaskResponseHandler(); 
+        client.getTask( taskId, getTaskResponseHandler );
+        Task task1 = getTaskResponseHandler.getTask();
+        assertEquals( Status.Ready , task1.getTaskData().getStatus() );     
+        
+        BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
+        List<String> groupIds = new ArrayList<String>();
+        groupIds.add("Dummy Group");
+        groupIds.add("Knights Templer");
+        client.claim( taskId, users.get( "darth" ).getId(), groupIds, responseHandler );        
+        responseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        
+        getTaskResponseHandler = new BlockingGetTaskResponseHandler(); 
+        client.getTask( taskId, getTaskResponseHandler );
+        Task task2 = getTaskResponseHandler.getTask();
+        assertEquals(  Status.Reserved, task2.getTaskData().getStatus() );
+        assertEquals( users.get( "darth" ), task2.getTaskData().getActualOwner() );
+    }
+
     public void testStartFromReadyStateWithPotentialOwner() throws Exception {
         Map  vars = new HashedMap();     
         vars.put( "users", users );



More information about the jboss-svn-commits mailing list