[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