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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Sep 3 10:38:50 EDT 2008


Author: mark.proctor at jboss.com
Date: 2008-09-03 10:38:50 -0400 (Wed, 03 Sep 2008)
New Revision: 22353

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/TaskService.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceTaskUpdate.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/FullyPopulatedTask.mvel
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/QueryResults_PeopleAssignmentQuerries.mvel
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/QueryResults_TasksOwnedInEnglish.mvel
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/QueryResults_TasksOwnedInGerman.mvel
Log:
JBRULES-1745 WS-Human-Task
-First parts of operation controls go in for claim, start, stop, release.

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-03 12:46:48 UTC (rev 22352)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskClient.java	2008-09-03 14:38:50 UTC (rev 22353)
@@ -173,7 +173,10 @@
         
         handler.addResponseHandler( cmd.getId(), responseHandler );   
         
-        session.write( cmd );        
+        session.write( cmd );                
+    }
+    
+    public void claim(long 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-03 12:46:48 UTC (rev 22352)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskService.java	2008-09-03 14:38:50 UTC (rev 22353)
@@ -24,7 +24,9 @@
 import org.drools.task.Comment;
 import org.drools.task.Deadline;
 import org.drools.task.Group;
+import org.drools.task.Status;
 import org.drools.task.Task;
+import org.drools.task.TaskData;
 import org.drools.task.User;
 import org.drools.task.query.DeadlineSummary;
 import org.drools.task.query.TaskSummary;
@@ -123,6 +125,37 @@
     }
 
     public void addTask(Task task) {
+
+        TaskData taskData = task.getTaskData();
+        // new tasks start off with status created
+        taskData.setStatus( Status.Created );
+
+        if ( task.getPeopleAssignments() != null ) {
+            List potentialOwners = task.getPeopleAssignments().getPotentialOwners();
+            if ( potentialOwners.size() == 1 ) {
+                // if there is a single potential owner, assign and set status to Reserved
+                taskData.setActualOwner( (User) potentialOwners.get( 0 ) );
+                taskData.setStatus( Status.Reserved );
+            } else if ( potentialOwners.size() > 1 ) {
+                // multiple potential owners, so set to Ready so one can claim.
+                taskData.setStatus( Status.Ready );
+            } else {
+                //@TODO we have no potential owners
+            }
+        } else {
+            //@TODO we have no potential owners
+        }
+
+        // set the CreatedOn date if it's not already set
+        if ( taskData.getCreatedOn() == null ) {
+            taskData.setCreatedOn( new Date() );
+        }
+
+        //@FIXME for now we activate on creation, unless date is supplied
+        if ( taskData.getActivationTime() == null ) {
+            taskData.setActivationTime( taskData.getCreatedOn() );
+        }
+
         em.getTransaction().begin();
         em.persist( task );
         em.getTransaction().commit();
@@ -159,63 +192,156 @@
                 }
             }
         }
-    }    
-    
-    public void addComment(long taskId, Comment comment) {
-        Task task = em.find( Task.class, taskId );
+    }
+
+    public void claim(long taskId,
+                      User user) {
+        Task task = em.find( Task.class,
+                             taskId );
+        TaskData taskData = task.getTaskData();
+
+        em.getTransaction().begin();
+
+        //task must be in status Ready
+        if ( taskData.getStatus() == Status.Ready ) {
+            taskData.setStatus( Status.Reserved );
+            taskData.setActualOwner( user );
+        } else {
+            // @TODO Error
+        }
+
+        em.getTransaction().commit();
+    }
+
+    public void start(long taskId,
+                      User user) {
+        Task task = em.find( Task.class,
+                             taskId );
+        TaskData taskData = task.getTaskData();
+
+        em.getTransaction().begin();
+
+        //task must be in status Ready or Reserved Status
+        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 ) {
+                taskData.setStatus( Status.InProgress );
+            } else {
+                //@TODO Error
+            }
+        } else if ( taskData.getStatus() == Status.Reserved ) {
+            // make sure the user us the owner
+            if ( taskData.getActualOwner().equals( user ) ) {
+                taskData.setStatus( Status.InProgress );
+            } else {
+                //@TODO Error
+            }
+        }
+
+        em.getTransaction().commit();
+    }
+
+    public void stop(long taskId,
+                     User user) {
+        Task task = em.find( Task.class,
+                             taskId );
+        TaskData taskData = task.getTaskData();
+
+        // make sure user is owner, then change state to Reserved
+        if ( taskData.getActualOwner().equals( user ) ) {
+            taskData.setStatus( Status.Reserved );
+        } else {
+            //@TODO Error
+        }
+    }
+
+    public void release(long taskId,
+                        User user) {
+        Task task = em.find( Task.class,
+                             taskId );
+        TaskData taskData = task.getTaskData();
+
+        // task must be reserved or in progress and owned by user
+        if ( (taskData.getStatus() == Status.Reserved || taskData.getStatus() == Status.InProgress) && taskData.getActualOwner().equals( user ) ) {
+            taskData.setStatus( Status.Ready );
+        } else {
+            //@TODO Error
+        }
+    }
+
+    public void complete(long taskId) {
+
+    }
+
+    public void fail(long taskId) {
+
+    }
+
+    public void addComment(long taskId,
+                           Comment comment) {
+        Task task = em.find( Task.class,
+                             taskId );
         if ( task == null ) {
             // throw some exception
-        }  
-        
+        }
+
         em.getTransaction().begin();
-        
+
         List<Comment> list = task.getTaskData().getComments();
-        if ( list == null || list == Collections.<Comment>emptyList() ) {
+        if ( list == null || list == Collections.<Comment> emptyList() ) {
             list = new ArrayList<Comment>( 1 );
             task.getTaskData().setComments( list );
         }
-        
-        list.add ( comment );   
-        
+
+        list.add( comment );
+
         em.getTransaction().commit();
     }
-    
-    public void addAttachment(long taskId,  Attachment attachment, AttachmentContent content) {
-        Task task = em.find( Task.class, taskId );
-        
+
+    public void addAttachment(long taskId,
+                              Attachment attachment,
+                              AttachmentContent content) {
+        Task task = em.find( Task.class,
+                             taskId );
+
         if ( task == null ) {
             // throw some exception
         }
-        
-        em.getTransaction().begin();        
-        
+
+        em.getTransaction().begin();
+
         em.persist( content );
         attachment.setSize( content.getContent().length );
         attachment.setContentId( content.getId() );
-        
+
         List<Attachment> list = task.getTaskData().getAttachments();
-        if ( list == null || list == Collections.<Attachment>emptyList() ) {
+        if ( list == null || list == Collections.<Attachment> emptyList() ) {
             list = new ArrayList<Attachment>( 1 );
             task.getTaskData().setAttachments( list );
         }
-        
-        list.add ( attachment );          
+
+        list.add( attachment );
         em.getTransaction().commit();
-    }  
-    
+    }
+
     public AttachmentContent getAttachmentContent(long contentId) {
-        AttachmentContent content = em.find( AttachmentContent.class, contentId );
+        AttachmentContent content = em.find( AttachmentContent.class,
+                                             contentId );
         return content;
-    }      
-    
-    public void deleteAttachment(long taskId, long attachmentId, long attachmentContentId) {
+    }
+
+    public void deleteAttachment(long taskId,
+                                 long attachmentId,
+                                 long attachmentContentId) {
         // @TODO I can't get this to work with HQL deleting the Attachment. Hibernate needs both the item removed from the collection
         // and also the item deleted, so for now have to load the entire Task, I suspect that this is due to using the same EM which 
         // is caching things.
-        Task task = em.find( Task.class, taskId );
-        
+        Task task = em.find( Task.class,
+                             taskId );
+
         em.getTransaction().begin();
-        for( Iterator<Attachment> it = task.getTaskData().getAttachments().iterator(); it.hasNext(); ) {
+        for ( Iterator<Attachment> it = task.getTaskData().getAttachments().iterator(); it.hasNext(); ) {
             Attachment attachment = it.next();
             if ( attachment.getId() == attachmentId ) {
                 it.remove();
@@ -223,39 +349,42 @@
                 break;
             }
         }
-        
+
         // we do this as HQL to avoid streaming in the entire HQL
         String deleteContent = "delete from AttachmentContent where id = :id";
-        em.createQuery( deleteContent ).setParameter( "id", attachmentContentId ).executeUpdate();
-        
-        em.getTransaction().commit();       
+        em.createQuery( deleteContent ).setParameter( "id",
+                                                      attachmentContentId ).executeUpdate();
+
+        em.getTransaction().commit();
     }
-    
-    public void deleteComment(long taskId, long commentId) {
+
+    public void deleteComment(long taskId,
+                              long commentId) {
         // @TODO I can't get this to work with HQL deleting the Comment. Hibernate needs both the item removed from the collection
         // and also the item deleted, so for now have to load the entire Task, I suspect that this is due to using the same EM which 
         // is caching things.
-        Task task = em.find( Task.class, taskId );
+        Task task = em.find( Task.class,
+                             taskId );
         em.getTransaction().begin();
-        for( Iterator<Comment> it = task.getTaskData().getComments().iterator(); it.hasNext(); ) {
+        for ( Iterator<Comment> it = task.getTaskData().getComments().iterator(); it.hasNext(); ) {
             Comment comment = it.next();
             if ( comment.getId() == commentId ) {
                 it.remove();
                 em.remove( comment ); // need to do this otherwise it just removes the link id, without removing the comment
                 break;
             }
-        }        
+        }
         em.getTransaction().commit();
     }
 
     public Task getTask(long taskId) {
         Task task = em.find( Task.class,
                              taskId );
-        return task;                                                                                                                                                                                
+        return task;
     }
 
     public List<DeadlineSummary> getUnescalatedDeadlines() {
-        return ( List<DeadlineSummary> ) unescalatedDeadlines.getResultList();
+        return (List<DeadlineSummary>) unescalatedDeadlines.getResultList();
     }
 
     public List<TaskSummary> getTasksOwned(long userId,

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceTaskUpdate.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceTaskUpdate.java	2008-09-03 12:46:48 UTC (rev 22352)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceTaskUpdate.java	2008-09-03 14:38:50 UTC (rev 22353)
@@ -65,8 +65,9 @@
         Map  vars = new HashedMap();     
         vars.put( "users", users );
         vars.put( "groups", groups );        
+        vars.put( "now", new Date() );
         
-        String str = "(with (new Task()) { priority = 55, taskData = new TaskData(),";
+        String str = "(with (new Task()) { priority = 55, taskData = (with( new TaskData()) { createdOn = now, activationTime = now}), ";
         str += "names = [ new I18NText( 'en-UK', 'This is my task name')] })";
             
         BlockingAddTaskResponseHandler addTaskResponseHandler = new BlockingAddTaskResponseHandler();
@@ -137,9 +138,10 @@
     public void testAddRemoveAttachment() throws Exception {
         Map  vars = new HashedMap();     
         vars.put( "users", users );
-        vars.put( "groups", groups );        
+        vars.put( "groups", groups );
+        vars.put( "now", new Date() );        
         
-        String str = "(with (new Task()) { priority = 55, taskData = new TaskData(),";
+        String str = "(with (new Task()) { priority = 55, taskData = (with( new TaskData()) { createdOn = now, activationTime = now}), ";
         str += "names = [ new I18NText( 'en-UK', 'This is my task name')] })";
             
         BlockingAddTaskResponseHandler addTaskResponseHandler = new BlockingAddTaskResponseHandler();

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/FullyPopulatedTask.mvel
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/FullyPopulatedTask.mvel	2008-09-03 12:46:48 UTC (rev 22352)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/FullyPopulatedTask.mvel	2008-09-03 14:38:50 UTC (rev 22353)
@@ -14,7 +14,7 @@
         activationTime = new Date( 10000000 ),
         createdOn = new Date( 10000000 ),
         expirationTime = new Date( 10000000 ),
-        status = Status.Created,
+        status = Status.Ready,
         attachments = [ 
             (with ( new Attachment() ) {
                 accessType = AccessType.Inline,

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/QueryResults_PeopleAssignmentQuerries.mvel
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/QueryResults_PeopleAssignmentQuerries.mvel	2008-09-03 12:46:48 UTC (rev 22352)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/QueryResults_PeopleAssignmentQuerries.mvel	2008-09-03 14:38:50 UTC (rev 22353)
@@ -1,27 +1,27 @@
 format = new java.text.SimpleDateFormat( "dd/MMM/yyyy" );
         
 [ 'darth' : [ new TaskSummary( 1, 'This is my task name Jan', 'This is my task subject Jan', 'This is my task description Jan',
-                               Status.Created, 20, false, users[ 'peter' ], users[ 'sly' ],
+                               Status.Ready, 20, false, users[ 'peter' ], users[ 'sly' ],
                                format.parse( "15/Jan/2008" ), format.parse( "20/Jan/2008" ), null ) ],
   'bobba' : [ new TaskSummary( 1, 'This is my task name Jan', 'This is my task subject Jan', 'This is my task description Jan',
-                               Status.Created, 20, false, users[ 'peter' ], users[ 'sly' ],
+                               Status.Ready, 20, false, users[ 'peter' ], users[ 'sly' ],
                                format.parse( "15/Jan/2008" ), format.parse( "20/Jan/2008" ), null ),
               new TaskSummary( 1, 'This is my task name Feb', 'This is my task subject Feb', 'This is my task description Feb',
-                               Status.Created, 150, false, users[ 'steve' ], users[ 'tony' ], 
+                               Status.Ready, 150, false, users[ 'steve' ], users[ 'tony' ], 
                                format.parse( "15/Feb/2008" ), format.parse( "20/Feb/2008" ), null ),  
               new TaskSummary( 1, 'This is my task name Mar', 'This is my task subject Mar', 'This is my task description Mar',
-                               Status.Created, 90, false, users[ 'peter' ], users[ 'steve' ], 
+                               Status.Ready, 90, false, users[ 'peter' ], users[ 'steve' ], 
                                format.parse( "15/Mar/2008" ), format.parse( "20/Mar/2008" ), null ) ],
    'steve' : [ new TaskSummary( 1, 'This is my task name Feb', 'This is my task subject Feb', 'This is my task description Feb',
-                                Status.Created, 150, false, users[ 'steve' ], users[ 'tony' ], 
+                                Status.Ready, 150, false, users[ 'steve' ], users[ 'tony' ], 
                                 format.parse( "15/Feb/2008" ), format.parse( "20/Feb/2008" ), null  ) ],
    'liz' : [ new TaskSummary( 1, 'This is my task name Jan', 'This is my task subject Jan', 'This is my task description Jan',
-                              Status.Created, 20, false, users[ 'peter' ], users[ 'sly' ],
+                              Status.Ready, 20, false, users[ 'peter' ], users[ 'sly' ],
                               format.parse( "15/Jan/2008" ), format.parse( "20/Jan/2008" ), null ),
             new TaskSummary( 1, 'This is my task name Feb', 'This is my task subject Feb', 'This is my task description Feb',
-                             Status.Created, 150, false, users[ 'steve' ], users[ 'tony' ], 
+                             Status.Ready, 150, false, users[ 'steve' ], users[ 'tony' ], 
                              format.parse( "15/Feb/2008" ), format.parse( "20/Feb/2008" ), null ) ],
    'sly' : [ new TaskSummary( 1, 'This is my task name Feb', 'This is my task subject Feb', 'This is my task description Feb',
-                                Status.Created, 150, false, users[ 'steve' ], users[ 'tony' ], 
+                                Status.Ready, 150, false, users[ 'steve' ], users[ 'tony' ], 
                                 format.parse( "15/Feb/2008" ), format.parse( "20/Feb/2008" ), null  ) ]                                                 
 ]
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/QueryResults_TasksOwnedInEnglish.mvel
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/QueryResults_TasksOwnedInEnglish.mvel	2008-09-03 12:46:48 UTC (rev 22352)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/QueryResults_TasksOwnedInEnglish.mvel	2008-09-03 14:38:50 UTC (rev 22353)
@@ -1,16 +1,16 @@
 format = new java.text.SimpleDateFormat( "dd/MMM/yyyy" );
         
 [ 'peter' : [ new TaskSummary( 1, 'This is my task name Jan', 'This is my task subject Jan', 'This is my task description Jan',
-                               Status.Created, 20, false, users[ 'peter' ], users[ 'sly' ], 
+                               Status.Ready, 20, false, users[ 'peter' ], users[ 'sly' ], 
                                format.parse( "15/Jan/2008" ), format.parse( "20/Jan/2008" ), null ),
               new TaskSummary( 1, 'This is my task name May', 'This is my task subject May', 'This is my task description May',
                                Status.Created, 20, false, users[ 'peter' ], users[ 'steve' ], 
                                format.parse( "15/May/2008" ), format.parse( "20/May/2008" ), null ),
               new TaskSummary( 1, 'This is my task name Mar', 'This is my task subject Mar', 'This is my task description Mar',
-                               Status.Created, 90, false, users[ 'peter' ], users[ 'steve' ], 
+                               Status.Ready, 90, false, users[ 'peter' ], users[ 'steve' ], 
                                format.parse( "15/Mar/2008" ), format.parse( "20/Mar/2008" ), null ) ],                                                                     
   'steve' : [new TaskSummary( 1, 'This is my task name Feb', 'This is my task subject Feb', 'This is my task description Feb',
-                              Status.Created, 150, false, users[ 'steve' ], users[ 'tony' ], 
+                              Status.Ready, 150, false, users[ 'steve' ], users[ 'tony' ], 
                               format.parse( "15/Feb/2008" ), format.parse( "20/Feb/2008" ), null ),
              new TaskSummary( 1, 'This is my task name Jun', 'This is my task subject Jun', 'This is my task description Jun',
                               Status.Created, 15, false, users[ 'steve' ], users[ 'steve' ], 

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/QueryResults_TasksOwnedInGerman.mvel
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/QueryResults_TasksOwnedInGerman.mvel	2008-09-03 12:46:48 UTC (rev 22352)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/QueryResults_TasksOwnedInGerman.mvel	2008-09-03 14:38:50 UTC (rev 22353)
@@ -1,16 +1,16 @@
 format = new java.text.SimpleDateFormat( "dd/MMM/yyyy" );
         
 [ 'peter' : [ new TaskSummary( 1, 'Dies ist mein task Name Jan', 'Das ist mein task Thema Jan', 'Das ist mein task Beschreibung Jan',
-                               Status.Created, 20, false, users[ 'peter' ], users[ 'sly' ], 
+                               Status.Ready, 20, false, users[ 'peter' ], users[ 'sly' ], 
                                format.parse( "15/Jan/2008" ), format.parse( "20/Jan/2008" ), null ),
               new TaskSummary( 1, 'Dies ist mein task Name May', 'Das ist mein task Thema May', 'Das ist mein task Beschreibung May',
                                Status.Created, 20, false, users[ 'peter' ], users[ 'steve' ], 
                                format.parse( "15/May/2008" ), format.parse( "20/May/2008" ),null ),
               new TaskSummary( 1, 'Dies ist mein task Name Mar', 'Das ist mein task Thema Mar', 'Das ist mein task Beschreibung Mar',
-                               Status.Created, 90, false, users[ 'peter' ], users[ 'steve' ], 
+                               Status.Ready, 90, false, users[ 'peter' ], users[ 'steve' ], 
                                format.parse( "15/Mar/2008" ), format.parse( "20/Mar/2008" ), null ) ],                                                                     
   'steve' : [ new TaskSummary( 1, 'Dies ist mein task Name Feb', 'Das ist mein task Thema Feb', 'Das ist mein task Beschreibung Feb',
-                               Status.Created, 150, false, users[ 'steve' ], users[ 'tony' ], 
+                               Status.Ready, 150, false, users[ 'steve' ], users[ 'tony' ], 
                                format.parse( "15/Feb/2008" ), format.parse( "20/Feb/2008" ), null ),
               new TaskSummary( 1, 'Dies ist mein task Name Jun', 'Das ist mein task Thema Jun', 'Das ist mein task Beschreibung Jun',
                                Status.Created, 15, false, users[ 'steve' ], users[ 'steve' ], 




More information about the jboss-svn-commits mailing list