[jboss-svn-commits] JBL Code SVN: r22364 - 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
Wed Sep 3 21:06:45 EDT 2008
Author: mark.proctor at jboss.com
Date: 2008-09-03 21:06:44 -0400 (Wed, 03 Sep 2008)
New Revision: 22364
Modified:
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/CommandName.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskClient.java
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/TaskService.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceLifeCycleTest.java
Log:
JBRULES-1745 WS-Human-Task
-Added client/server stuff for start
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/CommandName.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/CommandName.java 2008-09-04 00:17:35 UTC (rev 22363)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/CommandName.java 2008-09-04 01:06:44 UTC (rev 22364)
@@ -4,8 +4,11 @@
public enum CommandName {
ClaimRequest,
ClaimResponse,
+ StartRequest,
+ StartResponse,
+ CompleteRequest,
+ CompleteResponse,
-
GetTaskRequest,
GetTaskResponse,
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskClient.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskClient.java 2008-09-04 00:17:35 UTC (rev 22363)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskClient.java 2008-09-04 01:06:44 UTC (rev 22364)
@@ -186,6 +186,24 @@
session.write( cmd );
}
+ public void start(long taskId, long userId) {
+ List args = new ArrayList( 1 );
+ args.add( taskId );
+ args.add( userId );
+ Command cmd = new Command( counter.getAndIncrement(), CommandName.StartRequest, args);
+
+ session.write( cmd );
+ }
+
+ public void complete(long taskId, long userId) {
+ List args = new ArrayList( 1 );
+ args.add( taskId );
+ args.add( userId );
+ Command cmd = new Command( counter.getAndIncrement(), CommandName.CompleteRequest, args);
+
+ session.write( cmd );
+ }
+
public void getTasksOwned(long userId, String language, TaskSummaryResponseHandler responseHandler) {
List args = new ArrayList( 2 );
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 2008-09-04 00:17:35 UTC (rev 22363)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServerHandler.java 2008-09-04 01:06:44 UTC (rev 22364)
@@ -36,8 +36,15 @@
case ClaimRequest : {
long taskId = ( Long ) cmd.getArguments().get( 0 );
long userId = ( Long ) cmd.getArguments().get( 1 );
- service.claim( taskId, userId );
- }
+ service.claim( taskId, userId );
+ break;
+ }
+ case StartRequest : {
+ long taskId = ( Long ) cmd.getArguments().get( 0 );
+ long userId = ( Long ) cmd.getArguments().get( 1 );
+ service.start( taskId, userId );
+ break;
+ }
case GetTaskRequest : {
long taskId = ( Long ) cmd.getArguments().get( 0 );
Task task = service.getTask( taskId );
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskService.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskService.java 2008-09-04 00:17:35 UTC (rev 22363)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskService.java 2008-09-04 01:06:44 UTC (rev 22364)
@@ -209,7 +209,7 @@
PeopleAssignments people = task.getPeopleAssignments();
if ( isAllowed( user, new List[] { people.getPotentialOwners(), people.getBusinessAdministrators() } ) ) {
em.getTransaction().begin();
- // only potential onwers and business admin can claim a task
+ // only potential owners and business admin can claim a task
taskData.setStatus( Status.Reserved );
taskData.setActualOwner( user );
em.getTransaction().commit();
@@ -219,35 +219,44 @@
} else {
// @TODO Error
}
- }
+ }
public void start(long taskId,
- User user) {
+ long userId) {
Task task = em.find( Task.class,
taskId );
+
+ User user = em.find( User.class, userId );
+
TaskData taskData = task.getTaskData();
+
- em.getTransaction().begin();
-
- //task must be in status Ready or Reserved Status
+ // Status must be Read or Reserved
if ( taskData.getStatus() == Status.Ready ) {
- // if Ready make sure is a potentialOwner
- boolean allowed = task.getPeopleAssignments().getPotentialOwners().contains( user ) && !task.getPeopleAssignments().getExcludedOwners().contains( user );
- if ( allowed ) {
+ // if Ready must be potentialOwner
+ PeopleAssignments people = task.getPeopleAssignments();
+ if ( isAllowed( user, new List[] { people.getPotentialOwners() } ) ) {
+ em.getTransaction().begin();
+ taskData.setActualOwner( user );
taskData.setStatus( Status.InProgress );
+ em.getTransaction().commit();
} else {
- //@TODO Error
+ // @TODO Error
}
} else if ( taskData.getStatus() == Status.Reserved ) {
- // make sure the user us the owner
+ // if Reserved must be actual owner
if ( taskData.getActualOwner().equals( user ) ) {
+ em.getTransaction().begin();
taskData.setStatus( Status.InProgress );
+ em.getTransaction().commit();
+
} else {
- //@TODO Error
+ // @TODO Error
}
- }
-
- em.getTransaction().commit();
+ } else {
+ // @TODO Error
+ return;
+ }
}
public void stop(long taskId,
@@ -278,7 +287,7 @@
}
}
- public void complete(long taskId) {
+ public void complete(long taskId, long userId) {
}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceLifeCycleTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceLifeCycleTest.java 2008-09-04 00:17:35 UTC (rev 22363)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceLifeCycleTest.java 2008-09-04 01:06:44 UTC (rev 22364)
@@ -83,8 +83,6 @@
BlockingGetTaskResponseHandler getTaskResponseHandler = new BlockingGetTaskResponseHandler();
client.getTask( taskId, getTaskResponseHandler );
Task task1 = getTaskResponseHandler.getTask();
- assertNotSame(task, task1);
- assertFalse( task.equals( task1) );
assertEquals( task1.getTaskData().getStatus(), Status.Created );
assertNull( task1.getTaskData().getActualOwner() );
}
@@ -110,9 +108,7 @@
BlockingGetTaskResponseHandler getTaskResponseHandler = new BlockingGetTaskResponseHandler();
client.getTask( taskId, getTaskResponseHandler );
Task task1 = getTaskResponseHandler.getTask();
- assertNotSame(task, task1);
- assertFalse( task.equals( task1) );
- assertEquals( task1.getTaskData().getStatus(), Status.Reserved );
+ assertEquals( Status.Reserved, task1.getTaskData().getStatus() );
assertEquals( users.get( "bobba" ), task1.getTaskData().getActualOwner() );
}
@@ -145,7 +141,140 @@
client.getTask( taskId, getTaskResponseHandler );
Task task2 = getTaskResponseHandler.getTask();
assertEquals( Status.Reserved, task2.getTaskData().getStatus() );
- assertEquals( task2.getTaskData().getActualOwner(), users.get( "darth" ) );
+ assertEquals( users.get( "darth" ), task2.getTaskData().getActualOwner() );
}
+ public void testStartFromReadyStateWithPotentialOwner() {
+ 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 = [users['bobba' ], users['darth'] ], }),";
+ 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, 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() );
+
+ // Go straight from Ready to Inprogress
+ client.start( taskId, users.get( "darth" ).getId() );
+
+ getTaskResponseHandler = new BlockingGetTaskResponseHandler();
+ client.getTask( taskId, getTaskResponseHandler );
+ Task task2 = getTaskResponseHandler.getTask();
+ assertEquals( Status.InProgress, task2.getTaskData().getStatus() );
+ assertEquals( users.get( "darth" ), task2.getTaskData().getActualOwner() );
+ }
+
+ public void testStartFromReadyStateWithIncorrectPotentialOwner() {
+ 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 = [users['bobba' ], users['darth'] ], }),";
+ 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, 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() );
+
+ // State should not change as user isn't potential owner
+ client.start( taskId, users.get( "tony" ).getId() );
+
+ getTaskResponseHandler = new BlockingGetTaskResponseHandler();
+ client.getTask( taskId, getTaskResponseHandler );
+ Task task2 = getTaskResponseHandler.getTask();
+ assertEquals( Status.Ready, task2.getTaskData().getStatus() );
+ assertNull( task2.getTaskData().getActualOwner() );
+ }
+
+ public void testStartFromReserved() {
+ 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 = [users['bobba' ] ], }),";
+ 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, addTaskResponseHandler );
+
+ long taskId = addTaskResponseHandler.getTaskId();
+
+ // Task should be assigned to the single potential owner and state set to Reserved
+ BlockingGetTaskResponseHandler getTaskResponseHandler = new BlockingGetTaskResponseHandler();
+ client.getTask( taskId, getTaskResponseHandler );
+ Task task1 = getTaskResponseHandler.getTask();
+ assertEquals( Status.Reserved, task1.getTaskData().getStatus());
+ assertEquals( users.get( "bobba" ), task1.getTaskData().getActualOwner() );
+
+ // Should change to InProgress
+ client.start( taskId, users.get( "bobba" ).getId() );
+ getTaskResponseHandler = new BlockingGetTaskResponseHandler();
+ client.getTask( taskId, getTaskResponseHandler );
+ Task task2 = getTaskResponseHandler.getTask();
+ assertEquals( Status.InProgress, task2.getTaskData().getStatus() );
+ assertEquals( users.get( "bobba" ), task1.getTaskData().getActualOwner() );
+ }
+
+ public void testStartFromReservedWithIncorrectUser() {
+ 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 = [users['bobba' ] ], }),";
+ 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, addTaskResponseHandler );
+
+ long taskId = addTaskResponseHandler.getTaskId();
+
+ // Task should be assigned to the single potential owner and state set to Reserved
+ BlockingGetTaskResponseHandler getTaskResponseHandler = new BlockingGetTaskResponseHandler();
+ client.getTask( taskId, getTaskResponseHandler );
+ Task task1 = getTaskResponseHandler.getTask();
+ assertEquals( Status.Reserved , task1.getTaskData().getStatus());
+ assertEquals( users.get( "bobba" ), task1.getTaskData().getActualOwner() );
+
+ // Should change not change
+ client.start( taskId, users.get( "tony" ).getId() );
+ getTaskResponseHandler = new BlockingGetTaskResponseHandler();
+ client.getTask( taskId, getTaskResponseHandler );
+ Task task2 = getTaskResponseHandler.getTask();
+ assertEquals( Status.Reserved, task2.getTaskData().getStatus() );
+ assertEquals( users.get( "bobba" ), task1.getTaskData().getActualOwner() );
+ }
+
+
}
More information about the jboss-svn-commits
mailing list