[jboss-svn-commits] JBL Code SVN: r22819 - in labs/jbossrules/trunk/drools-process/drools-process-task/src: main/java/org/drools/client and 7 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Sep 16 11:19:07 EDT 2008


Author: mark.proctor at jboss.com
Date: 2008-09-16 11:19:06 -0400 (Tue, 16 Sep 2008)
New Revision: 22819

Added:
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/KnowledgeBaseCommand.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/KnowledgeBaseCommandName.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/KnowledgeBaseHandler.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/MinaKnowledgeBaseClient.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/main/resources/META-INF/orm.xml
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceDeadlinesTest.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/DeadlineWithNotification.mvel
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/DeadlineWithReassignment.mvel
Removed:
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsBusinessAdministrator.txt
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsExcludedOwner.txt
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsPotentialOwner.txt
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsRecipient.txt
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsTaskInitiator.txt
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsTaskStakeholder.txt
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksOwned.txt
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/UnescalatedDeadlines.txt
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEmailNotificationTest.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/Notification1.mvel
Modified:
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Deadlines.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Task.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/DefaultEscalatedDeadlineHandler.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/SendIcal.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/BaseTest.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/ModelPersistenceTest.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/QueryTest.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingEventResponseHandler.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/DemoTaskService.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/TaskServiceCommentsAndAttachmentsTest.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEscalationTest.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEventMessagingTest.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceTest.java
Log:
JBRULES-1745 WS-Human-Task
-TaskService is now thread safe using TaskServiceSession
-Querries now use named querries.

Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/KnowledgeBaseCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/KnowledgeBaseCommand.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/KnowledgeBaseCommand.java	2008-09-16 15:19:06 UTC (rev 22819)
@@ -0,0 +1,42 @@
+package org.drools.client;
+
+import java.io.Serializable;
+import java.util.List;
+
+public class KnowledgeBaseCommand implements Serializable {
+    
+    private int id;
+    
+    private KnowledgeBaseCommandName name;    
+    
+    private List<Object> arguments;
+    
+    public KnowledgeBaseCommand(int id, KnowledgeBaseCommandName name, List<Object> arguments) {
+        super();
+        this.id = id;
+        this.arguments = arguments;
+        this.name = name;
+    }        
+    
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public KnowledgeBaseCommandName getName() {
+        return name;
+    }
+    public void setName(KnowledgeBaseCommandName name) {
+        this.name = name;
+    }
+    public List<Object> getArguments() {
+        return arguments;
+    }
+    public void setArguments(List<Object> arguments) {
+        this.arguments = arguments;
+    }
+            
+}

Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/KnowledgeBaseCommandName.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/KnowledgeBaseCommandName.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/KnowledgeBaseCommandName.java	2008-09-16 15:19:06 UTC (rev 22819)
@@ -0,0 +1,6 @@
+package org.drools.client;
+
+
+public enum KnowledgeBaseCommandName {   
+    
+}

Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/KnowledgeBaseHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/KnowledgeBaseHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/KnowledgeBaseHandler.java	2008-09-16 15:19:06 UTC (rev 22819)
@@ -0,0 +1,48 @@
+package org.drools.client;
+
+import org.apache.mina.core.session.IoSession;
+import org.drools.task.service.BaseMinaHandler;
+import org.drools.task.service.MinaTaskClient;
+
+public class KnowledgeBaseHandler extends BaseMinaHandler {
+    private MinaTaskClient    client;
+  
+
+    public MinaTaskClient getClient() {
+        return client;
+    }
+
+    public void setClient(MinaTaskClient client) {
+        this.client = client;
+    }
+
+    @Override
+    public void exceptionCaught(IoSession session,
+                                Throwable cause) throws Exception {
+        //cause.printStackTrace();
+        if ( !session.isConnected() ) {
+            client.connect();
+        }
+    }
+
+    @Override
+    public void messageReceived(IoSession session,
+                                Object message) throws Exception {
+        KnowledgeBaseCommand cmd = (KnowledgeBaseCommand) message;
+        switch ( cmd.getName() ) {
+//            case  : {
+//                Task task = (Task) cmd.getArguments().get( 0 );
+//                AddPackageResponseHandler responseHandler = (AddPackageResponseHandler) responseHandlers.remove( cmd.getId() );
+//                if ( responseHandler != null ) {
+//                    responseHandler.execute( task );
+//                }
+//                break;
+//            }
+            default : {
+                
+            }            
+        }
+    }
+
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/MinaKnowledgeBaseClient.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/MinaKnowledgeBaseClient.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/MinaKnowledgeBaseClient.java	2008-09-16 15:19:06 UTC (rev 22819)
@@ -0,0 +1,64 @@
+package org.drools.client;
+
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.mina.core.future.ConnectFuture;
+import org.apache.mina.core.service.IoHandler;
+import org.apache.mina.core.session.IoSession;
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
+import org.apache.mina.filter.codec.serialization.ObjectSerializationEncoder;
+import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
+import org.apache.mina.transport.socket.SocketConnector;
+import org.apache.mina.transport.socket.nio.NioSocketConnector;
+import org.drools.eventmessaging.EventKey;
+import org.drools.eventmessaging.EventResponseHandler;
+import org.drools.task.AccessType;
+import org.drools.task.Attachment;
+import org.drools.task.Content;
+import org.drools.task.Comment;
+import org.drools.task.Task;
+import org.drools.task.User;
+import org.drools.task.service.BaseMinaClient;
+import org.drools.task.service.Command;
+import org.drools.task.service.CommandName;
+import org.drools.task.service.TaskClientHandler;
+import org.drools.task.service.TaskClientHandler.AddAttachmentResponseHandler;
+import org.drools.task.service.TaskClientHandler.AddCommentResponseHandler;
+import org.drools.task.service.TaskClientHandler.AddTaskResponseHandler;
+import org.drools.task.service.TaskClientHandler.GetContentResponseHandler;
+import org.drools.task.service.TaskClientHandler.GetTaskResponseHandler;
+import org.drools.task.service.TaskClientHandler.SetDocumentResponseHandler;
+import org.drools.task.service.TaskClientHandler.TaskSummaryResponseHandler;
+
+public class MinaKnowledgeBaseClient extends BaseMinaClient {
+    
+    public MinaKnowledgeBaseClient(String name,
+                          TaskClientHandler handler) {
+        super( name,
+               handler );
+    }            
+
+    public void addPackage(Task task,
+                        AddTaskResponseHandler responseHandler) {
+        List args = new ArrayList( 1 );
+        args.add( task );
+        Command cmd = new Command( counter.getAndIncrement(),
+                                   CommandName.AddTaskRequest,
+                                   args );
+
+        handler.addResponseHandler( cmd.getId(),
+                                    responseHandler );
+
+        session.write( cmd );
+    }
+
+
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Deadlines.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Deadlines.java	2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Deadlines.java	2008-09-16 15:19:06 UTC (rev 22819)
@@ -44,7 +44,7 @@
         this.startDeadlines = startDeadlines;
     }
     
-    public List<Deadline> getEndDeadLines() {
+    public List<Deadline> getEndDeadlines() {
         return endDeadlines;
     }
     

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Task.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Task.java	2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Task.java	2008-09-16 15:19:06 UTC (rev 22819)
@@ -45,7 +45,6 @@
     
     @OneToMany(cascade = CascadeType.ALL)
     @JoinColumn(name = "Task_Descriptions_Id", nullable = true)
-    @Lob
     private List<I18NText> descriptions = Collections.emptyList();      
     
 
@@ -226,7 +225,9 @@
         if ( !(obj instanceof Task) ) return false;
         Task other = (Task) obj;
         if ( deadlines == null ) {
-            if ( other.deadlines != null ) return false;
+            if ( other.deadlines != null ) {
+                
+            }
         } else if ( !deadlines.equals( other.deadlines ) ) return false;
         if ( delegation == null ) {
             if ( other.delegation != null ) return false;

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/DefaultEscalatedDeadlineHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/DefaultEscalatedDeadlineHandler.java	2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/DefaultEscalatedDeadlineHandler.java	2008-09-16 15:19:06 UTC (rev 22819)
@@ -26,6 +26,7 @@
 import org.drools.task.NotificationType;
 import org.drools.task.OrganizationalEntity;
 import org.drools.task.Reassignment;
+import org.drools.task.Status;
 import org.drools.task.Task;
 import org.drools.task.TaskData;
 import org.drools.task.User;
@@ -115,34 +116,20 @@
             for ( Notification notification : escalation.getNotifications() ) {
                 if ( notification.getNotificationType() == NotificationType.Email) {
                     executeEmailNotification( (EmailNotification) notification, task, em );
-                }
-                //                I18NText name = null;
-                //                I18NText subject = null;
-                //                I18NText description = null;
-                //                for ( I18NText item : notification.getNames() ) {
-                //                    if ( item.getLanguage().equals( language ) ) {
-                //                        name = item;
-                //                        break;
-                //                    }
-                //                }
-                //                for ( I18NText item : notification.getSubjects() ) {
-                //                    if ( item.getLanguage().equals( language ) ) {
-                //                        subject = item;
-                //                        break;
-                //                    }
-                //                }
-                //                for ( I18NText item : notification.getDescriptions() ) {
-                //                    if ( item.getLanguage().equals( language ) ) {
-                //                        description = item;
-                //                        break;
-                //                    }
-                //                }                
-
+                }        
             }
 
-            for ( Reassignment reassignment : escalation.getReassignments() ) {
-                //reassignment.g
-            }
+
+            if ( !escalation.getReassignments().isEmpty()) {
+                // get first and ignore the rest.
+                Reassignment reassignment = escalation.getReassignments().get( 0 );
+                em.getTransaction().begin();
+                task.getTaskData().setStatus( Status.Ready );
+                List potentialOwners = new ArrayList( reassignment.getPotentialOwners() );
+                System.out.println( potentialOwners );
+                task.getPeopleAssignments().setPotentialOwners( potentialOwners );
+                em.getTransaction().commit();
+            }            
         }
         em.getTransaction().begin();
         deadline.setEscalated( true );

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/SendIcal.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/SendIcal.java	2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/SendIcal.java	2008-09-16 15:19:06 UTC (rev 22819)
@@ -105,7 +105,7 @@
         }
 
         // get latest end deadline
-        List<Deadline> endDeadlines = task.getDeadlines().getEndDeadLines();
+        List<Deadline> endDeadlines = task.getDeadlines().getEndDeadlines();
         Deadline end = null;
         for ( Deadline deadline : endDeadlines ) {
             if ( end == null || end.getDate().getTime() < deadline.getDate().getTime() ) {

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-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServerHandler.java	2008-09-16 15:19:06 UTC (rev 22819)
@@ -8,6 +8,8 @@
 import java.util.List;
 import java.util.Map;
 
+import javax.persistence.EntityManager;
+
 import org.apache.mina.core.session.IdleStatus;
 import org.apache.mina.core.service.IoHandlerAdapter;
 import org.apache.mina.core.session.IoSession;
@@ -20,7 +22,7 @@
 import org.drools.task.query.TaskSummary;
 
 public class TaskServerHandler extends IoHandlerAdapter {
-    private TaskService service;
+    private TaskService            service;
     private Map<String, IoSession> clients;
 
     public TaskServerHandler(TaskService service) {
@@ -38,245 +40,277 @@
     public void messageReceived(IoSession session,
                                 Object message) throws Exception {
         Command cmd = (Command) message;
-        switch ( cmd.getName() ) {
-            case ClaimRequest : {
-                long taskId = ( Long ) cmd.getArguments().get( 0 );
-                String userId = ( String ) cmd.getArguments().get( 1 );
-                service.claim( taskId, userId );          
-                break;
-            }           
-            case StartRequest : {
-                long taskId = ( Long ) cmd.getArguments().get( 0 );
-                String userId = ( String ) cmd.getArguments().get( 1 );
-                service.start( taskId, userId );   
-                break;
-            }         
-            case StopRequest : {
-                long taskId = ( Long ) cmd.getArguments().get( 0 );
-                String userId = ( String ) cmd.getArguments().get( 1 );
-                service.stop( taskId, userId );   
-                break;
-            }
-            case ReleaseRequest : {
-                long taskId = ( Long ) cmd.getArguments().get( 0 );
-                String userId = ( String ) cmd.getArguments().get( 1 );
-                service.release( taskId, userId );   
-                break;
-            }               
-            case SuspendRequest : {
-                long taskId = ( Long ) cmd.getArguments().get( 0 );
-                String userId = ( String ) cmd.getArguments().get( 1 );
-                service.suspend( taskId, userId );   
-                break;
-            }        
-            case ResumeRequest : {
-                long taskId = ( Long ) cmd.getArguments().get( 0 );
-                String userId = ( String ) cmd.getArguments().get( 1 );
-                service.resume( taskId, userId );   
-                break;
-            }   
-            case SkipRequest : {
-                long taskId = ( Long ) cmd.getArguments().get( 0 );
-                String userId = ( String ) cmd.getArguments().get( 1 );
-                service.skip( taskId, userId );   
-                break;
-            }             
-            case CompleteRequest : {
-                long taskId = ( Long ) cmd.getArguments().get( 0 );
-                String userId = ( String ) cmd.getArguments().get( 1 );
-                service.complete( taskId, userId );   
-                break;
-            }   
-            case FailRequest : {
-                long taskId = ( Long ) cmd.getArguments().get( 0 );
-                String userId = ( String ) cmd.getArguments().get( 1 );
-                service.fail( taskId, userId );   
-                break;
-            }             
-            case GetTaskRequest : {
-                long taskId = ( Long ) cmd.getArguments().get( 0 );
-                Task task = service.getTask( taskId );
-                List args = new ArrayList( 1 );
-                args.add( task );
-                Command resultsCmnd = new Command( cmd.getId(),
-                                                   CommandName.GetTaskResponse,
-                                                   args );
-                session.write( resultsCmnd );                                
-                break;                
-            }
-            case AddTaskRequest : {
-                Task task = (Task) cmd.getArguments().get( 0 ) ;
-                service.addTask( task );
-                
-                List args = new ArrayList( 1 );
-                args.add( task.getId() );
-                Command resultsCmnd = new Command( cmd.getId(),
-                                                   CommandName.AddTaskResponse,
-                                                   args );
-                session.write( resultsCmnd );                                
-                break;
-            }
-            case AddCommentRequest : {      
-                Comment comment = ( Comment ) cmd.getArguments().get( 1 );
-                service.addComment( (Long) cmd.getArguments().get( 0 ), comment );
-                
-                List args = new ArrayList( 1 );
-                args.add( comment.getId() );
-                Command resultsCmnd = new Command( cmd.getId(),
-                                                   CommandName.AddCommentResponse,
-                                                   args );
-                session.write( resultsCmnd );                       
-                break;
-            }
-            case DeleteCommentRequest : {
-                long taskId = ( Long ) cmd.getArguments().get( 0 );
-                long commentId = ( Long ) cmd.getArguments().get( 1 );
-                service.deleteComment( taskId, commentId );
-                break;
-            }
-            case  AddAttachmentRequest : {
-                Attachment attachment = ( Attachment ) cmd.getArguments().get( 1 );
-                Content content = ( Content ) cmd.getArguments().get( 2 ); 
-                service.addAttachment( (Long) cmd.getArguments().get( 0 ), attachment, content );
-                
-                List args = new ArrayList( 2 );
-                args.add( attachment.getId() );
-                args.add( content.getId() );
-                Command resultsCmnd = new Command( cmd.getId(),
-                                                   CommandName.AddAttachmentResponse,
-                                                   args );
-                session.write( resultsCmnd );                    
-                break;
-            }
-            case DeleteAttachmentRequest : {
-                long taskId = ( Long ) cmd.getArguments().get( 0 );
-                long attachmentId = ( Long ) cmd.getArguments().get( 1 );
-                long contentId = ( Long ) cmd.getArguments().get( 2 );
-                service.deleteAttachment( taskId, attachmentId, contentId );
-                break;
-            }
-            case  SetDocumentContentRequest : {
-                long taskId = ( Long ) cmd.getArguments().get( 0 );
-                Content content = ( Content ) cmd.getArguments().get( 1 ); 
-                service.setDocumentContent( taskId, content );
-                
-                List args = new ArrayList( 1 );
-                args.add( content.getId() );
-                Command resultsCmnd = new Command( cmd.getId(),
-                                                   CommandName.SetDocumentContentResponse,
-                                                   args );
-                session.write( resultsCmnd );                    
-                break;
-            }            
-            case GetContentRequest : {
-                long contentId = ( Long ) cmd.getArguments().get( 0 );
-                Content content = service.getContent( contentId );
-                List args = new ArrayList( 1 );
-                args.add( content );
-                Command resultsCmnd = new Command( cmd.getId(),
-                                                   CommandName.GetContentResponse,
-                                                   args );
-                session.write( resultsCmnd );                                
-                break;                
-            }            
-            case QueryTasksOwned : {
-                List<TaskSummary> results = service.getTasksOwned( (String) cmd.getArguments().get( 0 ),
-                                                                   (String) cmd.getArguments().get( 1 ) );
-                List args = new ArrayList( 1 );
-                args.add( results );
-                Command resultsCmnd = new Command( cmd.getId(),
-                                                   CommandName.QueryTaskSummaryResponse,
-                                                   args );
-                session.write( resultsCmnd );
-                break;
-            }
-            case QueryTasksAssignedAsBusinessAdministrator : {
-                List<TaskSummary> results = service.getTasksAssignedAsBusinessAdministrator( (String) cmd.getArguments().get( 0 ),
+        TaskServiceSession taskSession = service.createSession();
+        try {
+            switch ( cmd.getName() ) {
+                case ClaimRequest : {
+                    long taskId = (Long) cmd.getArguments().get( 0 );
+                    String userId = (String) cmd.getArguments().get( 1 );
+                    taskSession.claim( taskId,
+                                       userId );
+                    break;
+                }
+                case StartRequest : {
+                    long taskId = (Long) cmd.getArguments().get( 0 );
+                    String userId = (String) cmd.getArguments().get( 1 );
+                    taskSession.start( taskId,
+                                       userId );
+                    break;
+                }
+                case StopRequest : {
+                    long taskId = (Long) cmd.getArguments().get( 0 );
+                    String userId = (String) cmd.getArguments().get( 1 );
+                    taskSession.stop( taskId,
+                                      userId );
+                    break;
+                }
+                case ReleaseRequest : {
+                    long taskId = (Long) cmd.getArguments().get( 0 );
+                    String userId = (String) cmd.getArguments().get( 1 );
+                    taskSession.release( taskId,
+                                         userId );
+                    break;
+                }
+                case SuspendRequest : {
+                    long taskId = (Long) cmd.getArguments().get( 0 );
+                    String userId = (String) cmd.getArguments().get( 1 );
+                    taskSession.suspend( taskId,
+                                         userId );
+                    break;
+                }
+                case ResumeRequest : {
+                    long taskId = (Long) cmd.getArguments().get( 0 );
+                    String userId = (String) cmd.getArguments().get( 1 );
+                    taskSession.resume( taskId,
+                                        userId );
+                    break;
+                }
+                case SkipRequest : {
+                    long taskId = (Long) cmd.getArguments().get( 0 );
+                    String userId = (String) cmd.getArguments().get( 1 );
+                    taskSession.skip( taskId,
+                                      userId );
+                    break;
+                }
+                case CompleteRequest : {
+                    long taskId = (Long) cmd.getArguments().get( 0 );
+                    String userId = (String) cmd.getArguments().get( 1 );
+                    taskSession.complete( taskId,
+                                          userId );
+                    break;
+                }
+                case FailRequest : {
+                    long taskId = (Long) cmd.getArguments().get( 0 );
+                    String userId = (String) cmd.getArguments().get( 1 );
+                    taskSession.fail( taskId,
+                                      userId );
+                    break;
+                }
+                case GetTaskRequest : {
+                    long taskId = (Long) cmd.getArguments().get( 0 );
+                    EntityManager em = service.getEntityManagerFactory().createEntityManager();
+                    try {
+                        Task task = taskSession.getTask( taskId );
+                        List args = new ArrayList( 1 );
+                        args.add( task );
+                        Command resultsCmnd = new Command( cmd.getId(),
+                                                           CommandName.GetTaskResponse,
+                                                           args );
+                        session.write( resultsCmnd );
+                    } finally {
+                        em.close();
+                    }
+                    break;
+                }
+                case AddTaskRequest : {
+                    Task task = (Task) cmd.getArguments().get( 0 );
+                    taskSession.addTask( task );
+
+                    List args = new ArrayList( 1 );
+                    args.add( task.getId() );
+                    Command resultsCmnd = new Command( cmd.getId(),
+                                                       CommandName.AddTaskResponse,
+                                                       args );
+                    session.write( resultsCmnd );
+                    break;
+                }
+                case AddCommentRequest : {
+                    Comment comment = (Comment) cmd.getArguments().get( 1 );
+                    taskSession.addComment( (Long) cmd.getArguments().get( 0 ),
+                                            comment );
+
+                    List args = new ArrayList( 1 );
+                    args.add( comment.getId() );
+                    Command resultsCmnd = new Command( cmd.getId(),
+                                                       CommandName.AddCommentResponse,
+                                                       args );
+                    session.write( resultsCmnd );
+                    break;
+                }
+                case DeleteCommentRequest : {
+                    long taskId = (Long) cmd.getArguments().get( 0 );
+                    long commentId = (Long) cmd.getArguments().get( 1 );
+                    taskSession.deleteComment( taskId,
+                                               commentId );
+                    break;
+                }
+                case AddAttachmentRequest : {
+                    Attachment attachment = (Attachment) cmd.getArguments().get( 1 );
+                    Content content = (Content) cmd.getArguments().get( 2 );
+                    taskSession.addAttachment( (Long) cmd.getArguments().get( 0 ),
+                                               attachment,
+                                               content );
+
+                    List args = new ArrayList( 2 );
+                    args.add( attachment.getId() );
+                    args.add( content.getId() );
+                    Command resultsCmnd = new Command( cmd.getId(),
+                                                       CommandName.AddAttachmentResponse,
+                                                       args );
+                    session.write( resultsCmnd );
+                    break;
+                }
+                case DeleteAttachmentRequest : {
+                    long taskId = (Long) cmd.getArguments().get( 0 );
+                    long attachmentId = (Long) cmd.getArguments().get( 1 );
+                    long contentId = (Long) cmd.getArguments().get( 2 );
+                    taskSession.deleteAttachment( taskId,
+                                                  attachmentId,
+                                                  contentId );
+                    break;
+                }
+                case SetDocumentContentRequest : {
+                    long taskId = (Long) cmd.getArguments().get( 0 );
+                    Content content = (Content) cmd.getArguments().get( 1 );
+                    taskSession.setDocumentContent( taskId,
+                                                    content );
+
+                    List args = new ArrayList( 1 );
+                    args.add( content.getId() );
+                    Command resultsCmnd = new Command( cmd.getId(),
+                                                       CommandName.SetDocumentContentResponse,
+                                                       args );
+                    session.write( resultsCmnd );
+                    break;
+                }
+                case GetContentRequest : {
+                    long contentId = (Long) cmd.getArguments().get( 0 );
+                    Content content = taskSession.getContent( contentId );
+                    List args = new ArrayList( 1 );
+                    args.add( content );
+                    Command resultsCmnd = new Command( cmd.getId(),
+                                                       CommandName.GetContentResponse,
+                                                       args );
+                    session.write( resultsCmnd );
+                    break;
+                }
+                case QueryTasksOwned : {
+                    List<TaskSummary> results = taskSession.getTasksOwned( (String) cmd.getArguments().get( 0 ),
+                                                                           (String) cmd.getArguments().get( 1 ) );
+                    List args = new ArrayList( 1 );
+                    args.add( results );
+                    Command resultsCmnd = new Command( cmd.getId(),
+                                                       CommandName.QueryTaskSummaryResponse,
+                                                       args );
+                    session.write( resultsCmnd );
+                    break;
+                }
+                case QueryTasksAssignedAsBusinessAdministrator : {
+                    List<TaskSummary> results = taskSession.getTasksAssignedAsBusinessAdministrator( (String) cmd.getArguments().get( 0 ),
+                                                                                                     (String) cmd.getArguments().get( 1 ) );
+                    List args = new ArrayList( 1 );
+                    args.add( results );
+                    Command resultsCmnd = new Command( cmd.getId(),
+                                                       CommandName.QueryTaskSummaryResponse,
+                                                       args );
+                    session.write( resultsCmnd );
+                    break;
+                }
+                case QueryTasksAssignedAsPotentialOwner : {
+                    List<TaskSummary> results = taskSession.getTasksAssignedAsPotentialOwner( (String) cmd.getArguments().get( 0 ),
+                                                                                              (String) cmd.getArguments().get( 1 ) );
+                    List args = new ArrayList( 1 );
+                    args.add( results );
+                    Command resultsCmnd = new Command( cmd.getId(),
+                                                       CommandName.QueryTaskSummaryResponse,
+                                                       args );
+                    session.write( resultsCmnd );
+                    break;
+                }
+                case QueryTasksAssignedAsTaskInitiator : {
+                    List<TaskSummary> results = taskSession.getTasksAssignedAsTaskInitiator( (String) cmd.getArguments().get( 0 ),
                                                                                              (String) cmd.getArguments().get( 1 ) );
-                List args = new ArrayList( 1 );
-                args.add( results );
-                Command resultsCmnd = new Command( cmd.getId(),
-                                                   CommandName.QueryTaskSummaryResponse,
-                                                   args );
-                session.write( resultsCmnd );
-                break;
+                    List args = new ArrayList( 1 );
+                    args.add( results );
+                    Command resultsCmnd = new Command( cmd.getId(),
+                                                       CommandName.QueryTaskSummaryResponse,
+                                                       args );
+                    session.write( resultsCmnd );
+                    break;
+                }
+                case QueryTasksAssignedAsExcludedOwner : {
+                    List<TaskSummary> results = taskSession.getTasksAssignedAsExcludedOwner( (String) cmd.getArguments().get( 0 ),
+                                                                                             (String) cmd.getArguments().get( 1 ) );
+                    List args = new ArrayList( 1 );
+                    args.add( results );
+                    Command resultsCmnd = new Command( cmd.getId(),
+                                                       CommandName.QueryTaskSummaryResponse,
+                                                       args );
+                    session.write( resultsCmnd );
+                    break;
+                }
+                case QueryTasksAssignedAsRecipient : {
+                    List<TaskSummary> results = taskSession.getTasksAssignedAsRecipient( (String) cmd.getArguments().get( 0 ),
+                                                                                         (String) cmd.getArguments().get( 1 ) );
+                    List args = new ArrayList( 1 );
+                    args.add( results );
+                    Command resultsCmnd = new Command( cmd.getId(),
+                                                       CommandName.QueryTaskSummaryResponse,
+                                                       args );
+                    session.write( resultsCmnd );
+                    break;
+                }
+                case QueryTasksAssignedAsTaskStakeholder : {
+                    List<TaskSummary> results = taskSession.getTasksAssignedAsTaskStakeholder( (String) cmd.getArguments().get( 0 ),
+                                                                                               (String) cmd.getArguments().get( 1 ) );
+                    List args = new ArrayList( 1 );
+                    args.add( results );
+                    Command resultsCmnd = new Command( cmd.getId(),
+                                                       CommandName.QueryTaskSummaryResponse,
+                                                       args );
+                    session.write( resultsCmnd );
+                    break;
+                }
+                case RegisterForEventRequest : {
+                    EventKey key = (EventKey) cmd.getArguments().get( 0 );
+                    boolean remove = (Boolean) cmd.getArguments().get( 1 );
+                    String uuid = (String) cmd.getArguments().get( 2 );
+                    clients.put( uuid,
+                                 session );
+                    MinaEventTransport transport = new MinaEventTransport( uuid,
+                                                                           cmd.getId(),
+                                                                           clients,
+                                                                           remove );
+                    service.getEventKeys().register( key,
+                                                     transport );
+                    break;
+                }
+                case RegisterClient : {
+                    String uuid = (String) cmd.getArguments().get( 0 );
+                    clients.put( uuid,
+                                 session );
+                    break;
+                }
+                default : {
+                    // unknown command
+                }
             }
-            case QueryTasksAssignedAsPotentialOwner : {
-                List<TaskSummary> results = service.getTasksAssignedAsPotentialOwner( (String) cmd.getArguments().get( 0 ),
-                                                                                      (String) cmd.getArguments().get( 1 ) );
-                List args = new ArrayList( 1 );
-                args.add( results );
-                Command resultsCmnd = new Command( cmd.getId(),
-                                                   CommandName.QueryTaskSummaryResponse,
-                                                   args );
-                session.write( resultsCmnd );
-                break;
-            }
-            case QueryTasksAssignedAsTaskInitiator : {
-                List<TaskSummary> results = service.getTasksAssignedAsTaskInitiator( (String) cmd.getArguments().get( 0 ),
-                                                                                     (String) cmd.getArguments().get( 1 ) );
-                List args = new ArrayList( 1 );
-                args.add( results );
-                Command resultsCmnd = new Command( cmd.getId(),
-                                                   CommandName.QueryTaskSummaryResponse,
-                                                   args );
-                session.write( resultsCmnd );
-                break;
-            }
-            case QueryTasksAssignedAsExcludedOwner : {
-                List<TaskSummary> results = service.getTasksAssignedAsExcludedOwner( (String) cmd.getArguments().get( 0 ),
-                                                                                     (String) cmd.getArguments().get( 1 ) );
-                List args = new ArrayList( 1 );
-                args.add( results );
-                Command resultsCmnd = new Command( cmd.getId(),
-                                                   CommandName.QueryTaskSummaryResponse,
-                                                   args );
-                session.write( resultsCmnd );
-                break;
-            }
-            case QueryTasksAssignedAsRecipient : {
-                List<TaskSummary> results = service.getTasksAssignedAsRecipient( (String) cmd.getArguments().get( 0 ),
-                                                                                 (String) cmd.getArguments().get( 1 ) );
-                List args = new ArrayList( 1 );
-                args.add( results );
-                Command resultsCmnd = new Command( cmd.getId(),
-                                                   CommandName.QueryTaskSummaryResponse,
-                                                   args );
-                session.write( resultsCmnd );
-                break;
-            }
-            case QueryTasksAssignedAsTaskStakeholder : {
-                List<TaskSummary> results = service.getTasksAssignedAsTaskStakeholder( (String) cmd.getArguments().get( 0 ),
-                                                                                       (String) cmd.getArguments().get( 1 ) );
-                List args = new ArrayList( 1 );
-                args.add( results );
-                Command resultsCmnd = new Command( cmd.getId(),
-                                                   CommandName.QueryTaskSummaryResponse,
-                                                   args );
-                session.write( resultsCmnd );
-                break;
-            }
-            case RegisterForEventRequest : {
-                EventKey key = ( EventKey ) cmd.getArguments().get( 0 );
-                boolean remove = ( Boolean ) cmd.getArguments().get( 1 );
-                String uuid = ( String ) cmd.getArguments().get(  2 );
-                clients.put( uuid, session );
-                MinaEventTransport transport = new MinaEventTransport(uuid, cmd.getId(), clients, remove );
-                service.getEventKeys().register( key, transport );
-                break;
-            }
-            case RegisterClient : {
-                String uuid = ( String ) cmd.getArguments().get( 0 );
-                clients.put( uuid, session );
-                break;
-            }
-            default : {
-                // unknown command
-            }
+
+            Date date = new Date();
+            System.out.println( "Message written : " + cmd.getName() + " : " + date );
+        } finally {
+            taskSession.dispose();
         }
-
-        Date date = new Date();
-        System.out.println( "Message written : " + cmd.getName() + " : " + date );
     }
 
     @Override

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-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskService.java	2008-09-16 15:19:06 UTC (rev 22819)
@@ -1,12 +1,7 @@
 package org.drools.task.service;
 
 import java.io.IOException;
-import java.io.InputStreamReader;
 import java.io.Reader;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Iterator;
 import java.util.List;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ScheduledThreadPoolExecutor;
@@ -14,47 +9,20 @@
 
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
-import javax.persistence.Query;
 
-import org.drools.event.WorkingMemoryEventListener;
 import org.drools.eventmessaging.EventKeys;
-import org.drools.task.AccessType;
-import org.drools.task.Attachment;
-import org.drools.task.Content;
-import org.drools.task.Comment;
 import org.drools.task.Deadline;
-import org.drools.task.Group;
-import org.drools.task.OrganizationalEntity;
-import org.drools.task.PeopleAssignments;
-import org.drools.task.Status;
 import org.drools.task.Task;
-import org.drools.task.TaskData;
-import org.drools.task.User;
 import org.drools.task.UserInfo;
 import org.drools.task.event.MessagingTaskEventListener;
 import org.drools.task.event.TaskEventListener;
 import org.drools.task.event.TaskEventSupport;
 import org.drools.task.query.DeadlineSummary;
-import org.drools.task.query.TaskSummary;
 
-import sun.misc.resources.Messages_zh_TW;
-
 public class TaskService {
     EntityManagerFactory             emf;
-
-    //@TODO we should not be re-using the same em, create as needed (but have issues with closing the em while returned objects are still in use
     EntityManager                    em;
 
-    //@TODO these should all be named querries
-    Query                            tasksAssignedAsBusinessAdministrator;
-    Query                            tasksAssignedAsExcludedOwner;
-    Query                            tasksAssignedAsPotentialOwner;
-    Query                            tasksAssignedAsRecipient;
-    Query                            tasksAssignedAsTaskInitiator;
-    Query                            tasksAssignedAsTaskStakeholder;
-    Query                            tasksOwned;
-    Query                            unescalatedDeadlines;
-
     ScheduledThreadPoolExecutor      scheduler;
 
     private EscalatedDeadlineHandler escalatedDeadlineHandler;
@@ -66,57 +34,35 @@
 
     public TaskService(EntityManagerFactory emf) {
         this.emf = emf;
-        em = emf.createEntityManager();
+        this.em = emf.createEntityManager();
 
         eventSupport = new TaskEventSupport();
         eventKeys = new EventKeys();
         eventSupport.addEventListener( new MessagingTaskEventListener( eventKeys ) );
-
-        try {
-            Reader reader = new InputStreamReader( getClass().getResourceAsStream( "TasksOwned.txt" ) );
-            tasksOwned = em.createQuery( toString( reader ) );
-
-            reader = new InputStreamReader( getClass().getResourceAsStream( "TasksAssignedAsBusinessAdministrator.txt" ) );
-            tasksAssignedAsBusinessAdministrator = em.createQuery( toString( reader ) );
-
-            reader = new InputStreamReader( getClass().getResourceAsStream( "TasksAssignedAsExcludedOwner.txt" ) );
-            tasksAssignedAsExcludedOwner = em.createQuery( toString( reader ) );
-
-            reader = new InputStreamReader( getClass().getResourceAsStream( "TasksAssignedAsPotentialOwner.txt" ) );
-            tasksAssignedAsPotentialOwner = em.createQuery( toString( reader ) );
-
-            reader = new InputStreamReader( getClass().getResourceAsStream( "TasksAssignedAsRecipient.txt" ) );
-            tasksAssignedAsRecipient = em.createQuery( toString( reader ) );
-
-            reader = new InputStreamReader( getClass().getResourceAsStream( "TasksAssignedAsTaskInitiator.txt" ) );
-            tasksAssignedAsTaskInitiator = em.createQuery( toString( reader ) );
-
-            reader = new InputStreamReader( getClass().getResourceAsStream( "TasksAssignedAsTaskStakeholder.txt" ) );
-            tasksAssignedAsTaskStakeholder = em.createQuery( toString( reader ) );
-        } catch ( IOException e ) {
-            throw new RuntimeException( "Unable to inialize TaskService.",
-                                        e );
-        }
         scheduler = new ScheduledThreadPoolExecutor( 3 );
 
-        try {
-            Reader reader = new InputStreamReader( getClass().getResourceAsStream( "UnescalatedDeadlines.txt" ) );
-            unescalatedDeadlines = em.createQuery( toString( reader ) );
-            long now = System.currentTimeMillis();
-            for ( Object object : unescalatedDeadlines.getResultList() ) {
-                DeadlineSummary summary = (DeadlineSummary) object;
-                scheduler.schedule( new ScheduledTaskDeadline( summary.getTaskId(),
-                                                               summary.getDeadlineId(),
-                                                               this ),
-                                    summary.getDate().getTime() - now,
-                                    TimeUnit.MILLISECONDS );
-            }
-        } catch ( IOException e ) {
-            throw new RuntimeException( "Unable to inialize TaskService, could not load and schedule oustanding deadlines",
-                                        e );
+        long now = System.currentTimeMillis();
+        for ( Object object : em.createNamedQuery( "UnescalatedDeadlines" ).getResultList() ) {
+            DeadlineSummary summary = (DeadlineSummary) object;
+            schedule( new ScheduledTaskDeadline( summary.getTaskId(),
+                                                 summary.getDeadlineId(),
+                                                 this ),
+                      summary.getDate().getTime() - now );
         }
     }
 
+    public TaskServiceSession createSession() {
+        return new TaskServiceSession( this,
+                                       emf.createEntityManager() );
+    }
+
+    public void schedule(ScheduledTaskDeadline deadline,
+                         long delay) {
+        scheduler.schedule( deadline,
+                            delay,
+                            TimeUnit.MILLISECONDS );
+    }
+
     public EventKeys getEventKeys() {
         return eventKeys;
     }
@@ -133,6 +79,10 @@
         return this.eventSupport.getEventListeners();
     }
 
+    public TaskEventSupport getEventSupport() {
+        return eventSupport;
+    }
+
     public UserInfo getUserinfo() {
         return userInfo;
     }
@@ -153,546 +103,6 @@
         this.escalatedDeadlineHandler = escalatedDeadlineHandler;
     }
 
-    public void addUser(User user) {
-        em.getTransaction().begin();
-        em.persist( user );
-        em.getTransaction().commit();
-    }
-
-    public void addGroup(Group group) {
-        em.getTransaction().begin();
-        em.persist( group );
-        em.getTransaction().commit();
-    }
-
-    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();
-        long now = System.currentTimeMillis();
-        // schedule after it's been persisted, otherwise the id's won't be assigned
-        if ( task.getDeadlines() != null ) {
-            if ( task.getDeadlines().getStartDeadlines() != null ) {
-                for ( Deadline deadline : task.getDeadlines().getStartDeadlines() ) {
-                    if ( !deadline.isEscalated() ) {
-                        // only escalate when true - typically this would only be true
-                        // if the user is requested that the notification should never be escalated
-                        Date date = deadline.getDate();
-                        scheduler.schedule( new ScheduledTaskDeadline( task.getId(),
-                                                                       deadline.getId(),
-                                                                       this ),
-                                            date.getTime() - now,
-                                            TimeUnit.MILLISECONDS );
-                    }
-                }
-            }
-
-            if ( task.getDeadlines().getEndDeadLines() != null ) {
-                for ( Deadline deadline : task.getDeadlines().getEndDeadLines() ) {
-                    // only escalate when true - typically this would only be true
-                    // if the user is requested that the notification should never be escalated
-                    if ( !deadline.isEscalated() ) {
-                        Date date = deadline.getDate();
-                        scheduler.schedule( new ScheduledTaskDeadline( task.getId(),
-                                                                       deadline.getId(),
-                                                                       this ),
-                                            date.getTime() - now,
-                                            TimeUnit.MILLISECONDS );
-                    }
-                }
-            }
-        }
-
-        if ( task.getTaskData().getStatus() == Status.Reserved ) {
-            // Task was reserved so owner should get icals
-            SendIcal.getInstance().sendIcalForTask( task,
-                                                    userInfo );
-
-            // trigger event support
-            eventSupport.fireTaskClaimed( task.getId(),
-                                          task.getTaskData().getActualOwner().getId() );
-        }
-    }
-
-    public void claim(long taskId,
-                      String userId) {
-        Task task = em.find( Task.class,
-                             taskId );
-
-        User user = em.find( User.class,
-                             userId );
-
-        TaskData taskData = task.getTaskData();
-
-        //task must be in status Ready
-        if ( taskData.getStatus() == Status.Ready ) {
-            // check permissions
-            PeopleAssignments people = task.getPeopleAssignments();
-            if ( isAllowed( user,
-                            new List[]{people.getPotentialOwners(), people.getBusinessAdministrators()} ) ) {
-                em.getTransaction().begin();
-                // only potential owners and business admin can claim a task
-                taskData.setStatus( Status.Reserved );
-                taskData.setActualOwner( user );
-                em.getTransaction().commit();
-
-                // Task was reserved so owner should get icals
-                SendIcal.getInstance().sendIcalForTask( task,
-                                                        userInfo );
-
-                // trigger event support
-                eventSupport.fireTaskClaimed( task.getId(),
-                                              task.getTaskData().getActualOwner().getId() );
-            } else {
-                // @TODO Error
-            }
-        } else {
-            // @TODO Error
-        }
-    }
-
-    public void start(long taskId,
-                      String userId) {
-        Task task = em.find( Task.class,
-                             taskId );
-
-        User user = em.find( User.class,
-                             userId );
-
-        TaskData taskData = task.getTaskData();
-
-        // Status must be Read or Reserved
-        if ( taskData.getStatus() == Status.Ready ) {
-            // 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
-            }
-        } else if ( taskData.getStatus() == Status.Reserved ) {
-            // if Reserved must be actual owner
-            if ( taskData.getActualOwner().getId().equals( user.getId() ) ) {
-                em.getTransaction().begin();
-                taskData.setStatus( Status.InProgress );
-                em.getTransaction().commit();
-            } else {
-                // @TODO Error
-            }
-        } else {
-            // @TODO Error
-            return;
-        }
-    }
-
-    public void stop(long taskId,
-                     String userId) {
-        Task task = em.find( Task.class,
-                             taskId );
-
-        User user = em.find( User.class,
-                             userId );
-
-        TaskData taskData = task.getTaskData();
-
-        PeopleAssignments people = task.getPeopleAssignments();
-        if ( taskData.getStatus() == Status.InProgress && (taskData.getActualOwner().getId().equals( user.getId() ) || isAllowed( user,
-                                                                                                                           new List[]{people.getBusinessAdministrators()} )) ) {
-            // Status must be InProgress and actual owner, switch to Reserved
-            em.getTransaction().begin();
-            taskData.setStatus( Status.Reserved );
-            em.getTransaction().commit();
-        } else {
-            // @TODO Error
-            return;
-        }
-    }
-
-    public void release(long taskId,
-                        String userId) {
-        Task task = em.find( Task.class,
-                             taskId );
-
-        User user = em.find( User.class,
-                             userId );
-
-        TaskData taskData = task.getTaskData();
-
-        // task must be reserved or in progress and owned by user
-        PeopleAssignments people = task.getPeopleAssignments();
-        if ( (taskData.getStatus() == Status.Reserved || taskData.getStatus() == Status.InProgress) && (taskData.getActualOwner().getId().equals( user.getId() ) || isAllowed( user,
-                                                                                                                                                                        new List[]{people.getBusinessAdministrators()} )) ) {
-            em.getTransaction().begin();
-            taskData.setStatus( Status.Ready );
-            taskData.setActualOwner( null );
-            em.getTransaction().commit();
-        } else {
-            //@TODO Error
-        }
-    }
-
-    public void suspend(long taskId,
-                        String userId) {
-        Task task = em.find( Task.class,
-                             taskId );
-
-        User user = em.find( User.class,
-                             userId );
-
-        TaskData taskData = task.getTaskData();
-
-        List[] allowed;
-        PeopleAssignments people = task.getPeopleAssignments();
-        if ( taskData.getStatus() == Status.Ready ) {
-            // If it's ready then potential owners can suspect too
-            allowed = new List[]{people.getPotentialOwners(), people.getBusinessAdministrators()};
-        } else {
-            allowed = new List[]{people.getBusinessAdministrators()};
-        }
-
-        if ( (taskData.getStatus() == Status.Ready || taskData.getStatus() == Status.Reserved || taskData.getStatus() == Status.InProgress)
-             && ((taskData.getActualOwner() != null && taskData.getActualOwner().getId().equals( user.getId()) ) || isAllowed( user,
-                                                                                                                        allowed )) ) {
-            em.getTransaction().begin();
-            taskData.setStatus( Status.Suspended );
-            em.getTransaction().commit();
-        } else {
-            //@TODO Error            
-        }
-    }
-
-    public void resume(long taskId,
-                       String userId) {
-        Task task = em.find( Task.class,
-                             taskId );
-
-        User user = em.find( User.class,
-                             userId );
-
-        TaskData taskData = task.getTaskData();
-
-        List[] allowed;
-        PeopleAssignments people = task.getPeopleAssignments();
-        if ( taskData.getPreviousStatus() == Status.Ready ) {
-            // If it's ready then potential owners can suspect too
-            allowed = new List[]{people.getPotentialOwners(), people.getBusinessAdministrators()};
-        } else {
-            allowed = new List[]{people.getBusinessAdministrators()};
-        }
-
-        if ( (taskData.getStatus() == Status.Suspended) && ((taskData.getActualOwner() != null && taskData.getActualOwner().getId().equals( user.getId()) ) || isAllowed( user,
-                                                                                                                                                                   allowed )) ) {
-            em.getTransaction().begin();
-            taskData.setStatus( taskData.getPreviousStatus() );
-            em.getTransaction().commit();
-        } else {
-            //@TODO Error            
-        }
-    }
-
-    public void skip(long taskId,
-                     String userId) {
-        Task task = em.find( Task.class,
-                             taskId );
-
-        User user = em.find( User.class,
-                             userId );
-
-        TaskData taskData = task.getTaskData();
-
-        List[] allowed;
-        PeopleAssignments people = task.getPeopleAssignments();
-        if ( taskData.getStatus() == Status.Ready ) {
-            // If it's ready then potential owners can skip too
-            allowed = new List[]{people.getPotentialOwners(), people.getBusinessAdministrators()};
-        } else {
-            allowed = new List[]{people.getBusinessAdministrators()};
-        }
-
-        if ( task.getTaskData().isSkipable() && (taskData.getStatus() != Status.Completed && taskData.getStatus() != Status.Failed) && ((taskData.getActualOwner() != null && taskData.getActualOwner().getId().equals( user.getId()) ) || isAllowed( user,
-                                                                                                                                                                                                                                               allowed )) ) {
-            em.getTransaction().begin();
-            taskData.setStatus( Status.Obselete );
-            em.getTransaction().commit();
-        } else {
-            //@TODO Error            
-        }
-    }
-
-    public void complete(long taskId,
-                         String userId) {
-        Task task = em.find( Task.class,
-                             taskId );
-
-        User user = em.find( User.class,
-                             userId );
-
-        TaskData taskData = task.getTaskData();
-
-        if ( taskData.getStatus() == Status.InProgress && taskData.getActualOwner().getId().equals( user.getId() ) ) {
-            // Status must be InProgress and actual owner, switch to Reserved
-            em.getTransaction().begin();
-            taskData.setStatus( Status.Completed );
-            em.getTransaction().commit();
-        } else {
-            // @TODO Error
-            return;
-        }
-    }
-
-    public void fail(long taskId,
-                     String userId) {
-        Task task = em.find( Task.class,
-                             taskId );
-
-        User user = em.find( User.class,
-                             userId );
-
-        TaskData taskData = task.getTaskData();
-
-        if ( taskData.getStatus() == Status.InProgress && taskData.getActualOwner().getId().equals( user.getId() ) ) {
-            // Status must be InProgress and actual owner, switch to Reserved
-            em.getTransaction().begin();
-            taskData.setStatus( Status.Failed );
-            em.getTransaction().commit();
-        } else {
-            // @TODO Error
-            return;
-        }
-    }
-
-    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() ) {
-            list = new ArrayList<Comment>( 1 );
-            task.getTaskData().setComments( list );
-        }
-
-        list.add( comment );
-
-        em.getTransaction().commit();
-    }
-
-    public void addAttachment(long taskId,
-                              Attachment attachment,
-                              Content content) {
-        Task task = em.find( Task.class,
-                             taskId );
-
-        if ( task == null ) {
-            // throw some exception
-        }
-
-        em.getTransaction().begin();
-
-        em.persist( content );
-        attachment.setSize( content.getContent().length );
-        attachment.setAttachmentContentId( content.getId() );
-
-        List<Attachment> list = task.getTaskData().getAttachments();
-        if ( list == null || list == Collections.<Attachment> emptyList() ) {
-            list = new ArrayList<Attachment>( 1 );
-            task.getTaskData().setAttachments( list );
-        }
-
-        list.add( attachment );
-        em.getTransaction().commit();
-    }
-
-    public void setDocumentContent(long taskId,
-                                   Content content) {
-        Task task = em.find( Task.class,
-                             taskId );
-
-        if ( task == null ) {
-            // throw some exception
-        }
-
-        em.getTransaction().begin();
-
-        em.persist( content );
-
-        task.getTaskData().setDocumentContentId( content.getId() );
-
-        em.getTransaction().commit();
-    }
-
-    public Content getContent(long contentId) {
-        Content content = em.find( Content.class,
-                                   contentId );
-        return content;
-    }
-
-    public void deleteAttachment(long taskId,
-                                 long attachmentId,
-                                 long contentId) {
-        // @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 );
-
-        em.getTransaction().begin();
-        for ( Iterator<Attachment> it = task.getTaskData().getAttachments().iterator(); it.hasNext(); ) {
-            Attachment attachment = it.next();
-            if ( attachment.getId() == attachmentId ) {
-                it.remove();
-                em.remove( attachment ); // need to do this otherwise it just removes the link id, without removing the attachment
-                break;
-            }
-        }
-
-        // we do this as HQL to avoid streaming in the entire HQL
-        String deleteContent = "delete from Content where id = :id";
-        em.createQuery( deleteContent ).setParameter( "id",
-                                                      contentId ).executeUpdate();
-
-        em.getTransaction().commit();
-    }
-
-    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 );
-        em.getTransaction().begin();
-        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;
-    }
-
-    public List<DeadlineSummary> getUnescalatedDeadlines() {
-        return (List<DeadlineSummary>) unescalatedDeadlines.getResultList();
-    }
-
-    public List<TaskSummary> getTasksOwned(String userId,
-                                           String language) {
-        tasksOwned.setParameter( "userId",
-                                 userId );
-        tasksOwned.setParameter( "language",
-                                 language );
-        List<TaskSummary> list = (List<TaskSummary>) tasksOwned.getResultList();
-        return list;
-    }
-
-    public List<TaskSummary> getTasksAssignedAsBusinessAdministrator(String userId,
-                                                                     String language) {
-        tasksAssignedAsBusinessAdministrator.setParameter( "userId",
-                                                           userId );
-        tasksAssignedAsBusinessAdministrator.setParameter( "language",
-                                                           language );
-        List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsBusinessAdministrator.getResultList();
-        return list;
-    }
-
-    public List<TaskSummary> getTasksAssignedAsExcludedOwner(String userId,
-                                                             String language) {
-        tasksAssignedAsExcludedOwner.setParameter( "userId",
-                                                   userId );
-        tasksAssignedAsExcludedOwner.setParameter( "language",
-                                                   language );
-        List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsExcludedOwner.getResultList();
-        return list;
-    }
-
-    public List<TaskSummary> getTasksAssignedAsPotentialOwner(String userId,
-                                                              String language) {
-        tasksAssignedAsPotentialOwner.setParameter( "userId",
-                                                    userId );
-        tasksAssignedAsPotentialOwner.setParameter( "language",
-                                                    language );
-        List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsPotentialOwner.getResultList();
-        return list;
-    }
-
-    public List<TaskSummary> getTasksAssignedAsRecipient(String userId,
-                                                         String language) {
-        tasksAssignedAsRecipient.setParameter( "userId",
-                                               userId );
-        tasksAssignedAsRecipient.setParameter( "language",
-                                               language );
-        List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsRecipient.getResultList();
-        return list;
-    }
-
-    public List<TaskSummary> getTasksAssignedAsTaskInitiator(String userId,
-                                                             String language) {
-        tasksAssignedAsTaskInitiator.setParameter( "userId",
-                                                   userId );
-        tasksAssignedAsTaskInitiator.setParameter( "language",
-                                                   language );
-        List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsTaskInitiator.getResultList();
-        return list;
-    }
-
-    public List<TaskSummary> getTasksAssignedAsTaskStakeholder(String userId,
-                                                               String language) {
-        tasksAssignedAsTaskStakeholder.setParameter( "userId",
-                                                     userId );
-        tasksAssignedAsTaskStakeholder.setParameter( "language",
-                                                     language );
-        List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsTaskStakeholder.getResultList();
-        return list;
-    }
-
     public void executeEscalatedDeadline(long taskId,
                                          long deadlineId) {
         EntityManager localEm = emf.createEntityManager();
@@ -712,28 +122,6 @@
         localEm.close();
     }
 
-    public boolean isAllowed(User user,
-                             List<OrganizationalEntity>[] people) {
-        for ( List<OrganizationalEntity> list : people ) {
-            if ( isAllowed( user,
-                            list ) ) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public boolean isAllowed(User user,
-                             List<OrganizationalEntity> entities) {
-        // for now just do a contains, I'll figure out group membership later.
-        for ( OrganizationalEntity entity : entities ) {
-            if ( entity.getId().equals( user.getId() ) ) {
-                return true;
-            }
-        }
-        return false;
-    }
-
     public static String toString(Reader reader) throws IOException {
         int charValue = 0;
         StringBuffer sb = new StringBuffer( 1024 );
@@ -768,8 +156,12 @@
         }
 
         public Object call() throws Exception {
-            service.executeEscalatedDeadline( taskId,
-                                              deadlineId );
+            try {
+                service.executeEscalatedDeadline( taskId,
+                                                  deadlineId );
+            } catch ( Exception e ) {
+                e.printStackTrace();
+            }
             return null;
         }
 

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServiceSession.java	2008-09-16 15:19:06 UTC (rev 22819)
@@ -0,0 +1,668 @@
+package org.drools.task.service;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+
+import org.drools.task.Attachment;
+import org.drools.task.Comment;
+import org.drools.task.Content;
+import org.drools.task.Deadline;
+import org.drools.task.Delegation;
+import org.drools.task.Group;
+import org.drools.task.OrganizationalEntity;
+import org.drools.task.PeopleAssignments;
+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;
+import org.drools.task.service.TaskService.ScheduledTaskDeadline;
+
+public class TaskServiceSession {
+    TaskService   service;
+    EntityManager em;
+
+    public TaskServiceSession(TaskService service,
+                              EntityManager em) {
+        this.service = service;
+        this.em = em;
+    }
+
+    public void dispose() {
+        em.close();
+    }
+
+    public EntityManager getEntityManager() {
+        return em;
+    }
+
+    public void addUser(User user) {
+        em.getTransaction().begin();
+        em.persist( user );
+        em.getTransaction().commit();
+    }
+
+    public void addGroup(Group group) {
+        em.getTransaction().begin();
+        em.persist( group );
+        em.getTransaction().commit();
+    }
+
+    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();
+        long now = System.currentTimeMillis();
+        // schedule after it's been persisted, otherwise the id's won't be assigned
+        if ( task.getDeadlines() != null ) {
+            if ( task.getDeadlines().getStartDeadlines() != null ) {
+                for ( Deadline deadline : task.getDeadlines().getStartDeadlines() ) {
+                    if ( !deadline.isEscalated() ) {
+                        // only escalate when true - typically this would only be true
+                        // if the user is requested that the notification should never be escalated
+                        Date date = deadline.getDate();
+                        service.schedule( new ScheduledTaskDeadline( task.getId(),
+                                                                     deadline.getId(),
+                                                                     service ),
+                                          date.getTime() - now );
+                    }
+                }
+            }
+
+            if ( task.getDeadlines().getEndDeadlines() != null ) {
+                for ( Deadline deadline : task.getDeadlines().getEndDeadlines() ) {
+                    // only escalate when true - typically this would only be true
+                    // if the user is requested that the notification should never be escalated
+                    if ( !deadline.isEscalated() ) {
+                        Date date = deadline.getDate();
+                        service.schedule( new ScheduledTaskDeadline( task.getId(),
+                                                                     deadline.getId(),
+                                                                     service ),
+                                          date.getTime() - now );
+                    }
+                }
+            }
+        }
+
+        if ( task.getTaskData().getStatus() == Status.Reserved ) {
+            // Task was reserved so owner should get icals
+            SendIcal.getInstance().sendIcalForTask( task,
+                                                    service.getUserinfo() );
+
+            // trigger event support
+            service.getEventSupport().fireTaskClaimed( task.getId(),
+                                                       task.getTaskData().getActualOwner().getId() );
+        }
+    }
+
+    public void claim(long taskId,
+                      String userId) {
+        Task task = em.find( Task.class,
+                             taskId );
+
+        User user = em.find( User.class,
+                             userId );
+        em.getTransaction().begin();
+        claim(task, user);
+        em.getTransaction().commit();
+    }
+    
+    public void claim(Task task,
+                      User user) {
+        TaskData taskData = task.getTaskData();
+
+        //task must be in status Ready
+        if ( taskData.getStatus() == Status.Ready ) {
+            // check permissions
+            PeopleAssignments people = task.getPeopleAssignments();
+            if ( isAllowed( user,
+                            new List[]{people.getPotentialOwners(), people.getBusinessAdministrators()} ) ) {
+                // only potential owners and business admin can claim a task
+                taskData.setStatus( Status.Reserved );
+                taskData.setActualOwner( user );
+
+                // Task was reserved so owner should get icals
+                SendIcal.getInstance().sendIcalForTask( task,
+                                                        service.getUserinfo() );
+
+                // trigger event support
+                service.getEventSupport().fireTaskClaimed( task.getId(),
+                                                           task.getTaskData().getActualOwner().getId() );
+            } else {
+                // @TODO Error
+            }
+        } else {
+            // @TODO Error
+        }
+    }    
+
+    public void start(long taskId,
+                      String userId) {
+        Task task = em.find( Task.class,
+                             taskId );
+
+        User user = em.find( User.class,
+                             userId );
+
+        TaskData taskData = task.getTaskData();
+
+        // Status must be Read or Reserved
+        if ( taskData.getStatus() == Status.Ready ) {
+            // 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
+            }
+        } else if ( taskData.getStatus() == Status.Reserved ) {
+            // if Reserved must be actual owner
+            if ( taskData.getActualOwner().getId().equals( user.getId() ) ) {
+                em.getTransaction().begin();
+                taskData.setStatus( Status.InProgress );
+                em.getTransaction().commit();
+            } else {
+                // @TODO Error
+            }
+        } else {
+            // @TODO Error
+            return;
+        }
+    }
+
+    public void stop(long taskId,
+                     String userId) {
+        Task task = em.find( Task.class,
+                             taskId );
+
+        User user = em.find( User.class,
+                             userId );
+
+        TaskData taskData = task.getTaskData();
+
+        PeopleAssignments people = task.getPeopleAssignments();
+        if ( taskData.getStatus() == Status.InProgress && (taskData.getActualOwner().getId().equals( user.getId() ) || isAllowed( user,
+                                                                                                                                  new List[]{people.getBusinessAdministrators()} )) ) {
+            // Status must be InProgress and actual owner, switch to Reserved
+            em.getTransaction().begin();
+            taskData.setStatus( Status.Reserved );
+            em.getTransaction().commit();
+        } else {
+            // @TODO Error
+            return;
+        }
+    }
+
+    public void release(long taskId,
+                        String userId) {
+        Task task = em.find( Task.class,
+                             taskId );
+
+        User user = em.find( User.class,
+                             userId );
+
+        TaskData taskData = task.getTaskData();
+
+        // task must be reserved or in progress and owned by user
+        PeopleAssignments people = task.getPeopleAssignments();
+        if ( (taskData.getStatus() == Status.Reserved || taskData.getStatus() == Status.InProgress) && (taskData.getActualOwner().getId().equals( user.getId() ) || isAllowed( user,
+                                                                                                                                                                               new List[]{people.getBusinessAdministrators()} )) ) {
+            em.getTransaction().begin();
+            taskData.setStatus( Status.Ready );
+            taskData.setActualOwner( null );
+            em.getTransaction().commit();
+        } else {
+            //@TODO Error
+        }
+    }
+
+    public void suspend(long taskId,
+                        String userId) {
+        Task task = em.find( Task.class,
+                             taskId );
+
+        User user = em.find( User.class,
+                             userId );
+
+        TaskData taskData = task.getTaskData();
+
+        List[] allowed;
+        PeopleAssignments people = task.getPeopleAssignments();
+        if ( taskData.getStatus() == Status.Ready ) {
+            // If it's ready then potential owners can suspect too
+            allowed = new List[]{people.getPotentialOwners(), people.getBusinessAdministrators()};
+        } else {
+            allowed = new List[]{people.getBusinessAdministrators()};
+        }
+
+        if ( (taskData.getStatus() == Status.Ready || taskData.getStatus() == Status.Reserved || taskData.getStatus() == Status.InProgress)
+             && ((taskData.getActualOwner() != null && taskData.getActualOwner().getId().equals( user.getId() )) || isAllowed( user,
+                                                                                                                               allowed )) ) {
+            em.getTransaction().begin();
+            taskData.setStatus( Status.Suspended );
+            em.getTransaction().commit();
+        } else {
+            //@TODO Error            
+        }
+    }
+
+    public void resume(long taskId,
+                       String userId) {
+        Task task = em.find( Task.class,
+                             taskId );
+
+        User user = em.find( User.class,
+                             userId );
+
+        TaskData taskData = task.getTaskData();
+
+        List[] allowed;
+        PeopleAssignments people = task.getPeopleAssignments();
+        if ( taskData.getPreviousStatus() == Status.Ready ) {
+            // If it's ready then potential owners can suspect too
+            allowed = new List[]{people.getPotentialOwners(), people.getBusinessAdministrators()};
+        } else {
+            allowed = new List[]{people.getBusinessAdministrators()};
+        }
+
+        if ( (taskData.getStatus() == Status.Suspended) && ((taskData.getActualOwner() != null && taskData.getActualOwner().getId().equals( user.getId() )) || isAllowed( user,
+                                                                                                                                                                          allowed )) ) {
+            em.getTransaction().begin();
+            taskData.setStatus( taskData.getPreviousStatus() );
+            em.getTransaction().commit();
+        } else {
+            //@TODO Error            
+        }
+    }
+
+    public void skip(long taskId,
+                     String userId) {
+        Task task = em.find( Task.class,
+                             taskId );
+
+        User user = em.find( User.class,
+                             userId );
+
+        TaskData taskData = task.getTaskData();
+
+        List[] allowed;
+        PeopleAssignments people = task.getPeopleAssignments();
+        if ( taskData.getStatus() == Status.Ready ) {
+            // If it's ready then potential owners can skip too
+            allowed = new List[]{people.getPotentialOwners(), people.getBusinessAdministrators()};
+        } else {
+            allowed = new List[]{people.getBusinessAdministrators()};
+        }
+
+        if ( task.getTaskData().isSkipable() && (taskData.getStatus() != Status.Completed && taskData.getStatus() != Status.Failed)
+             && ((taskData.getActualOwner() != null && taskData.getActualOwner().getId().equals( user.getId() )) || isAllowed( user,
+                                                                                                                               allowed )) ) {
+            em.getTransaction().begin();
+            taskData.setStatus( Status.Obselete );
+            em.getTransaction().commit();
+        } else {
+            //@TODO Error            
+        }
+    }
+
+    public void complete(long taskId,
+                         String userId) {
+        Task task = em.find( Task.class,
+                             taskId );
+
+        User user = em.find( User.class,
+                             userId );
+
+        TaskData taskData = task.getTaskData();
+
+        if ( taskData.getStatus() == Status.InProgress && taskData.getActualOwner().getId().equals( user.getId() ) ) {
+            // Status must be InProgress and actual owner, switch to Reserved
+            em.getTransaction().begin();
+            taskData.setStatus( Status.Completed );
+            em.getTransaction().commit();
+        } else {
+            // @TODO Error
+            return;
+        }
+    }
+
+    public void delegate(long taskId,
+                         String delegateId,
+                         String userId) {
+        Task task = em.find( Task.class,
+                             taskId );
+        TaskData taskData = task.getTaskData();
+        Delegation delegation = task.getDelegation();
+        
+        
+        User delegate = em.find( User.class,
+                                   delegateId );
+        
+        User user = em.find( User.class,
+                             userId );
+        
+        // check correct status
+        if ( taskData.getStatus() == Status.Ready || taskData.getStatus() == Status.Reserved || taskData.getStatus() == Status.InProgress ) {
+            // check valid user
+            PeopleAssignments people = task.getPeopleAssignments();
+            if ( taskData.getActualOwner().getId().equals( user.getId() ) || isAllowed( user,
+                            new List[]{people.getPotentialOwners(), people.getBusinessAdministrators()} ) ) {
+                // is valid delegate
+               if ( isAllowed( delegate, new List[] { delegation.getDelegates() } ) ) {
+                   em.getTransaction().begin();
+                   taskData.setStatus( Status.Ready );
+                   if ( people.getPotentialOwners().contains( delegate ) ) {
+                       // Add delegate to potentialOwners if it's not already
+                       people.getPotentialOwners().add( delegate );
+                   }
+                   claim(task, delegate);
+                   em.getTransaction().commit();
+               }
+            } else {
+                // @TODO ERROR
+            }
+        } else {
+            // @TODO ERROR
+        }
+    }
+
+    public void fail(long taskId,
+                     String userId) {
+        Task task = em.find( Task.class,
+                             taskId );
+
+        User user = em.find( User.class,
+                             userId );
+
+        TaskData taskData = task.getTaskData();
+
+        if ( taskData.getStatus() == Status.InProgress && taskData.getActualOwner().getId().equals( user.getId() ) ) {
+            // Status must be InProgress and actual owner, switch to Reserved
+            em.getTransaction().begin();
+            taskData.setStatus( Status.Failed );
+            em.getTransaction().commit();
+        } else {
+            // @TODO Error
+            return;
+        }
+    }
+
+    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() ) {
+            list = new ArrayList<Comment>( 1 );
+            task.getTaskData().setComments( list );
+        }
+
+        list.add( comment );
+
+        em.getTransaction().commit();
+    }
+
+    public void addAttachment(long taskId,
+                              Attachment attachment,
+                              Content content) {
+        Task task = em.find( Task.class,
+                             taskId );
+
+        if ( task == null ) {
+            // throw some exception
+        }
+
+        em.getTransaction().begin();
+
+        em.persist( content );
+        attachment.setSize( content.getContent().length );
+        attachment.setAttachmentContentId( content.getId() );
+
+        List<Attachment> list = task.getTaskData().getAttachments();
+        if ( list == null || list == Collections.<Attachment> emptyList() ) {
+            list = new ArrayList<Attachment>( 1 );
+            task.getTaskData().setAttachments( list );
+        }
+
+        list.add( attachment );
+        em.getTransaction().commit();
+    }
+
+    public void setDocumentContent(long taskId,
+                                   Content content) {
+        Task task = em.find( Task.class,
+                             taskId );
+
+        if ( task == null ) {
+            // throw some exception
+        }
+
+        em.getTransaction().begin();
+
+        em.persist( content );
+
+        task.getTaskData().setDocumentContentId( content.getId() );
+
+        em.getTransaction().commit();
+    }
+
+    public Content getContent(long contentId) {
+        Content content = em.find( Content.class,
+                                   contentId );
+        return content;
+    }
+
+    public void deleteAttachment(long taskId,
+                                 long attachmentId,
+                                 long contentId) {
+        // @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 );
+
+        em.getTransaction().begin();
+        for ( Iterator<Attachment> it = task.getTaskData().getAttachments().iterator(); it.hasNext(); ) {
+            Attachment attachment = it.next();
+            if ( attachment.getId() == attachmentId ) {
+                it.remove();
+                em.remove( attachment ); // need to do this otherwise it just removes the link id, without removing the attachment
+                break;
+            }
+        }
+
+        // we do this as HQL to avoid streaming in the entire HQL
+        String deleteContent = "delete from Content where id = :id";
+        em.createQuery( deleteContent ).setParameter( "id",
+                                                      contentId ).executeUpdate();
+
+        em.getTransaction().commit();
+    }
+
+    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 );
+        em.getTransaction().begin();
+        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;
+    }
+
+    public List<DeadlineSummary> getUnescalatedDeadlines() {
+        return (List<DeadlineSummary>) em.createNamedQuery( "UnescalatedDeadlines" ).getResultList();
+    }
+
+    public List<TaskSummary> getTasksOwned(String userId,
+                                           String language) {
+        Query tasksOwned = em.createNamedQuery( "TasksOwned" );
+        tasksOwned.setParameter( "userId",
+                                 userId );
+        tasksOwned.setParameter( "language",
+                                 language );
+        List<TaskSummary> list = (List<TaskSummary>) tasksOwned.getResultList();
+        return list;
+    }
+
+    public List<TaskSummary> getTasksAssignedAsBusinessAdministrator(String userId,
+                                                                     String language) {
+        Query tasksAssignedAsBusinessAdministrator = em.createNamedQuery( "TasksAssignedAsBusinessAdministrator" );
+        tasksAssignedAsBusinessAdministrator.setParameter( "userId",
+                                                           userId );
+        tasksAssignedAsBusinessAdministrator.setParameter( "language",
+                                                           language );
+        List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsBusinessAdministrator.getResultList();
+        return list;
+    }
+
+    public List<TaskSummary> getTasksAssignedAsExcludedOwner(String userId,
+                                                             String language) {
+        Query tasksAssignedAsExcludedOwner = em.createNamedQuery( "TasksAssignedAsExcludedOwner" );
+        tasksAssignedAsExcludedOwner.setParameter( "userId",
+                                                   userId );
+        tasksAssignedAsExcludedOwner.setParameter( "language",
+                                                   language );
+        List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsExcludedOwner.getResultList();
+        return list;
+    }
+
+    public List<TaskSummary> getTasksAssignedAsPotentialOwner(String userId,
+                                                              String language) {
+        Query tasksAssignedAsPotentialOwner = em.createNamedQuery( "TasksAssignedAsPotentialOwner" );
+        tasksAssignedAsPotentialOwner.setParameter( "userId",
+                                                    userId );
+        tasksAssignedAsPotentialOwner.setParameter( "language",
+                                                    language );
+        List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsPotentialOwner.getResultList();
+        return list;
+    }
+
+    public List<TaskSummary> getTasksAssignedAsRecipient(String userId,
+                                                         String language) {
+        Query tasksAssignedAsRecipient = em.createNamedQuery( "TasksAssignedAsRecipient" );
+        tasksAssignedAsRecipient.setParameter( "userId",
+                                               userId );
+        tasksAssignedAsRecipient.setParameter( "language",
+                                               language );
+        List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsRecipient.getResultList();
+        return list;
+    }
+
+    public List<TaskSummary> getTasksAssignedAsTaskInitiator(String userId,
+                                                             String language) {
+        Query tasksAssignedAsTaskInitiator = em.createNamedQuery( "TasksAssignedAsTaskInitiator" );
+        tasksAssignedAsTaskInitiator.setParameter( "userId",
+                                                   userId );
+        tasksAssignedAsTaskInitiator.setParameter( "language",
+                                                   language );
+        List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsTaskInitiator.getResultList();
+        return list;
+    }
+
+    public List<TaskSummary> getTasksAssignedAsTaskStakeholder(String userId,
+                                                               String language) {
+        Query tasksAssignedAsTaskStakeholder = em.createNamedQuery( "TasksAssignedAsTaskStakeholder" );
+        tasksAssignedAsTaskStakeholder.setParameter( "userId",
+                                                     userId );
+        tasksAssignedAsTaskStakeholder.setParameter( "language",
+                                                     language );
+        List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsTaskStakeholder.getResultList();
+        return list;
+    }
+
+    public boolean isAllowed(User user,
+                             List<OrganizationalEntity>[] people) {
+        for ( List<OrganizationalEntity> list : people ) {
+            if ( isAllowed( user,
+                            list ) ) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public boolean isAllowed(User user,
+                             List<OrganizationalEntity> entities) {
+        // for now just do a contains, I'll figure out group membership later.
+        for ( OrganizationalEntity entity : entities ) {
+            if ( entity.getId().equals( user.getId() ) ) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public static String toString(Reader reader) throws IOException {
+        int charValue = 0;
+        StringBuffer sb = new StringBuffer( 1024 );
+        while ( (charValue = reader.read()) != -1 ) {
+            //result = result + (char) charValue;
+            sb.append( (char) charValue );
+        }
+        return sb.toString();
+    }
+}

Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/orm.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/orm.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/orm.xml	2008-09-16 15:19:06 UTC (rev 22819)
@@ -0,0 +1,294 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
+               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+               xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd"
+               version="1.0">
+  <package>org.drools.task</package>
+  <entity class="Task" metadata-complete="false" access="FIELD">  
+      <named-query name="TasksAssignedAsBusinessAdministrator">
+          <query>
+select 
+     new org.drools.task.query.TaskSummary(
+     t.id,
+     names.text,
+     subjects.text,
+     descriptions.text,
+     t.taskData.status,
+     t.priority,
+     t.taskData.skipable,
+     t.taskData.actualOwner,
+     t.taskData.createdBy,
+     t.taskData.createdOn,
+     t.taskData.activationTime,
+     t.taskData.expirationTime)
+from 
+    Task t left join t.taskData.createdBy,
+    I18NText names,
+    I18NText subjects,
+    I18NText descriptions, 
+    OrganizationalEntity businessAdministrator
+where    
+    businessAdministrator.id = :userId and
+    businessAdministrator in elements ( t.peopleAssignments.businessAdministrators  )  and   
+    
+    names.language = :language and
+    names in elements( t.names) and
+    
+    subjects.language = :language and
+    subjects in elements( t.subjects) and
+    
+    descriptions.language = :language and
+    descriptions in elements( t.descriptions) and
+     
+    t.taskData.expirationTime is null             
+          </query>
+          <hint name="org.hibernate.timeout" value="200"/>
+      </named-query>      
+      <named-query name="TasksAssignedAsExcludedOwner">
+          <query>
+select 
+     new org.drools.task.query.TaskSummary(
+     t.id,
+     names.text,
+     subjects.text,
+     descriptions.text,
+     t.taskData.status,
+     t.priority,
+     t.taskData.skipable,
+     t.taskData.actualOwner,
+     t.taskData.createdBy,
+     t.taskData.createdOn,
+     t.taskData.activationTime,
+     t.taskData.expirationTime)
+from 
+    Task t left join t.taskData.createdBy,
+    I18NText names,
+    I18NText subjects,
+    I18NText descriptions, 
+    OrganizationalEntity excludedOwners
+where    
+    excludedOwners.id = :userId and
+    excludedOwners in elements ( t.peopleAssignments.excludedOwners  )  and   
+    
+    names.language = :language and
+    names in elements( t.names) and
+    
+    subjects.language = :language and
+    subjects in elements( t.subjects) and
+    
+    descriptions.language = :language and
+    descriptions in elements( t.descriptions) and
+     
+    t.taskData.expirationTime is null             
+          </query>
+          <hint name="org.hibernate.timeout" value="200"/>
+      </named-query>
+      <named-query name="TasksAssignedAsPotentialOwner">
+          <query>
+select 
+     new org.drools.task.query.TaskSummary(
+     t.id,
+     names.text,
+     subjects.text,
+     descriptions.text,
+     t.taskData.status,
+     t.priority,
+     t.taskData.skipable,
+     t.taskData.actualOwner,
+     t.taskData.createdBy,
+     t.taskData.createdOn,
+     t.taskData.activationTime,
+     t.taskData.expirationTime)
+from 
+    Task t left join t.taskData.createdBy,
+    I18NText names,
+    I18NText subjects,
+    I18NText descriptions, 
+    OrganizationalEntity potentialOwners
+where    
+    potentialOwners.id = :userId and
+    potentialOwners in elements ( t.peopleAssignments.potentialOwners  )  and   
+    
+    names.language = :language and
+    names in elements( t.names) and
+    
+    subjects.language = :language and
+    subjects in elements( t.subjects) and
+    
+    descriptions.language = :language and
+    descriptions in elements( t.descriptions) and
+     
+    t.taskData.expirationTime is null              
+          </query>
+          <hint name="org.hibernate.timeout" value="200"/>
+      </named-query>
+      <named-query name="TasksAssignedAsRecipient">
+          <query>
+select 
+     new org.drools.task.query.TaskSummary(
+     t.id,
+     names.text,
+     subjects.text,
+     descriptions.text,
+     t.taskData.status,
+     t.priority,
+     t.taskData.skipable,
+     t.taskData.actualOwner,
+     t.taskData.createdBy,
+     t.taskData.createdOn,
+     t.taskData.activationTime,
+     t.taskData.expirationTime)
+from 
+    Task t left join t.taskData.createdBy,
+    I18NText names,
+    I18NText subjects,
+    I18NText descriptions, 
+    OrganizationalEntity recipients
+where    
+    recipients.id = :userId and
+    recipients in elements ( t.peopleAssignments.recipients  )  and   
+    
+    names.language = :language and
+    names in elements( t.names) and
+    
+    subjects.language = :language and
+    subjects in elements( t.subjects) and
+    
+    descriptions.language = :language and
+    descriptions in elements( t.descriptions) and
+     
+    t.taskData.expirationTime is null              
+          </query>
+          <hint name="org.hibernate.timeout" value="200"/>
+      </named-query>
+      <named-query name="TasksAssignedAsTaskInitiator">
+          <query>
+select 
+     new org.drools.task.query.TaskSummary(
+     t.id,
+     names.text,
+     subjects.text,
+     descriptions.text,
+     t.taskData.status,
+     t.priority,
+     t.taskData.skipable,
+     t.taskData.actualOwner,
+     t.taskData.createdBy,
+     t.taskData.createdOn,
+     t.taskData.activationTime,
+     t.taskData.expirationTime)
+from 
+    Task t left join t.taskData.createdBy,
+    I18NText names,
+    I18NText subjects,
+    I18NText descriptions, 
+    OrganizationalEntity taskInitiator
+where    
+    taskInitiator.id = :userId and
+    taskInitiator = t.peopleAssignments.taskInitiator and   
+    
+    names.language = :language and
+    names in elements( t.names) and
+    
+    subjects.language = :language and
+    subjects in elements( t.subjects) and
+    
+    descriptions.language = :language and
+    descriptions in elements( t.descriptions) and
+     
+    t.taskData.expirationTime is null              
+          </query>
+          <hint name="org.hibernate.timeout" value="200"/>
+      </named-query>
+      <named-query name="TasksAssignedAsTaskStakeholder">
+          <query>
+select 
+     new org.drools.task.query.TaskSummary(
+     t.id,
+     names.text,
+     subjects.text,
+     descriptions.text,
+     t.taskData.status,
+     t.priority,
+     t.taskData.skipable,
+     t.taskData.actualOwner,
+     t.taskData.createdBy,
+     t.taskData.createdOn,
+     t.taskData.activationTime,
+     t.taskData.expirationTime)
+from 
+    Task t left join t.taskData.createdBy,
+    I18NText names,
+    I18NText subjects,
+    I18NText descriptions, 
+    OrganizationalEntity taskStakeholder
+where    
+    taskStakeholder.id = :userId and
+    taskStakeholder in elements ( t.peopleAssignments.taskStakeholders  )  and   
+    
+    names.language = :language and
+    names in elements( t.names) and
+    
+    subjects.language = :language and
+    subjects in elements( t.subjects) and
+    
+    descriptions.language = :language and
+    descriptions in elements( t.descriptions) and
+     
+    t.taskData.expirationTime is null              
+          </query>
+          <hint name="org.hibernate.timeout" value="200"/>
+      </named-query>
+      <named-query name="TasksOwned">
+          <query>
+select 
+    new org.drools.task.query.TaskSummary(
+    t.id,
+    names.text,
+    subjects.text,
+    descriptions.text,
+    t.taskData.status,
+    t.priority,
+    t.taskData.skipable,
+    t.taskData.actualOwner,
+    t.taskData.createdBy,
+    t.taskData.createdOn,
+    t.taskData.activationTime,
+    t.taskData.expirationTime)
+from 
+    Task t left join t.taskData.createdBy,
+    I18NText names,
+    I18NText subjects,
+    I18NText descriptions 
+where    
+    t.taskData.actualOwner.id = :userId and
+    names in elements( t.names) and
+    names.language = :language and
+    subjects in elements( t.subjects) and
+    subjects.language = :language and
+    descriptions in elements( t.descriptions) and
+    descriptions.language = :language and 
+    t.taskData.expirationTime is null          
+          </query>
+          <hint name="org.hibernate.timeout" value="200"/>
+      </named-query>   
+	  <named-query name="UnescalatedDeadlines">
+          <query>
+select 
+     new org.drools.task.query.DeadlineSummary(
+     t.id,
+     d.id,
+     d.date)
+from 
+    Task t,
+    Deadline d
+where    
+    (d in elements( t.deadlines.startDeadlines ) or d in elements( t.deadlines.endDeadlines ) ) and 
+    d.escalated = false
+order by
+    d.date              
+          </query>
+          <hint name="org.hibernate.timeout" value="200"/>
+      </named-query>  
+  </entity>
+</entity-mappings>

Deleted: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsBusinessAdministrator.txt
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsBusinessAdministrator.txt	2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsBusinessAdministrator.txt	2008-09-16 15:19:06 UTC (rev 22819)
@@ -1,35 +0,0 @@
-select 
-     new org.drools.task.query.TaskSummary(
-     t.id,
-     names.text,
-     subjects.text,
-     descriptions.text,
-     t.taskData.status,
-     t.priority,
-     t.taskData.skipable,
-     t.taskData.actualOwner,
-     t.taskData.createdBy,
-     t.taskData.createdOn,
-     t.taskData.activationTime,
-     t.taskData.expirationTime)
-from 
-    Task t left join t.taskData.createdBy,
-    I18NText names,
-    I18NText subjects,
-    I18NText descriptions, 
-    OrganizationalEntity businessAdministrator
-where    
-    businessAdministrator.id = :userId and
-    businessAdministrator in elements ( t.peopleAssignments.businessAdministrators  )  and   
-    
-    names.language = :language and
-    names in elements( t.names) and
-    
-    subjects.language = :language and
-    subjects in elements( t.subjects) and
-    
-    descriptions.language = :language and
-    descriptions in elements( t.descriptions) and
-     
-    t.taskData.expirationTime is null
-    

Deleted: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsExcludedOwner.txt
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsExcludedOwner.txt	2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsExcludedOwner.txt	2008-09-16 15:19:06 UTC (rev 22819)
@@ -1,35 +0,0 @@
-select 
-     new org.drools.task.query.TaskSummary(
-     t.id,
-     names.text,
-     subjects.text,
-     descriptions.text,
-     t.taskData.status,
-     t.priority,
-     t.taskData.skipable,
-     t.taskData.actualOwner,
-     t.taskData.createdBy,
-     t.taskData.createdOn,
-     t.taskData.activationTime,
-     t.taskData.expirationTime)
-from 
-    Task t left join t.taskData.createdBy,
-    I18NText names,
-    I18NText subjects,
-    I18NText descriptions, 
-    OrganizationalEntity excludedOwners
-where    
-    excludedOwners.id = :userId and
-    excludedOwners in elements ( t.peopleAssignments.excludedOwners  )  and   
-    
-    names.language = :language and
-    names in elements( t.names) and
-    
-    subjects.language = :language and
-    subjects in elements( t.subjects) and
-    
-    descriptions.language = :language and
-    descriptions in elements( t.descriptions) and
-     
-    t.taskData.expirationTime is null
-    

Deleted: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsPotentialOwner.txt
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsPotentialOwner.txt	2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsPotentialOwner.txt	2008-09-16 15:19:06 UTC (rev 22819)
@@ -1,35 +0,0 @@
-select 
-     new org.drools.task.query.TaskSummary(
-     t.id,
-     names.text,
-     subjects.text,
-     descriptions.text,
-     t.taskData.status,
-     t.priority,
-     t.taskData.skipable,
-     t.taskData.actualOwner,
-     t.taskData.createdBy,
-     t.taskData.createdOn,
-     t.taskData.activationTime,
-     t.taskData.expirationTime)
-from 
-    Task t left join t.taskData.createdBy,
-    I18NText names,
-    I18NText subjects,
-    I18NText descriptions, 
-    OrganizationalEntity potentialOwners
-where    
-    potentialOwners.id = :userId and
-    potentialOwners in elements ( t.peopleAssignments.potentialOwners  )  and   
-    
-    names.language = :language and
-    names in elements( t.names) and
-    
-    subjects.language = :language and
-    subjects in elements( t.subjects) and
-    
-    descriptions.language = :language and
-    descriptions in elements( t.descriptions) and
-     
-    t.taskData.expirationTime is null
-    

Deleted: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsRecipient.txt
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsRecipient.txt	2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsRecipient.txt	2008-09-16 15:19:06 UTC (rev 22819)
@@ -1,35 +0,0 @@
-select 
-     new org.drools.task.query.TaskSummary(
-     t.id,
-     names.text,
-     subjects.text,
-     descriptions.text,
-     t.taskData.status,
-     t.priority,
-     t.taskData.skipable,
-     t.taskData.actualOwner,
-     t.taskData.createdBy,
-     t.taskData.createdOn,
-     t.taskData.activationTime,
-     t.taskData.expirationTime)
-from 
-    Task t left join t.taskData.createdBy,
-    I18NText names,
-    I18NText subjects,
-    I18NText descriptions, 
-    OrganizationalEntity recipients
-where    
-    recipients.id = :userId and
-    recipients in elements ( t.peopleAssignments.recipients  )  and   
-    
-    names.language = :language and
-    names in elements( t.names) and
-    
-    subjects.language = :language and
-    subjects in elements( t.subjects) and
-    
-    descriptions.language = :language and
-    descriptions in elements( t.descriptions) and
-     
-    t.taskData.expirationTime is null
-    

Deleted: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsTaskInitiator.txt
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsTaskInitiator.txt	2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsTaskInitiator.txt	2008-09-16 15:19:06 UTC (rev 22819)
@@ -1,35 +0,0 @@
-select 
-     new org.drools.task.query.TaskSummary(
-     t.id,
-     names.text,
-     subjects.text,
-     descriptions.text,
-     t.taskData.status,
-     t.priority,
-     t.taskData.skipable,
-     t.taskData.actualOwner,
-     t.taskData.createdBy,
-     t.taskData.createdOn,
-     t.taskData.activationTime,
-     t.taskData.expirationTime)
-from 
-    Task t left join t.taskData.createdBy,
-    I18NText names,
-    I18NText subjects,
-    I18NText descriptions, 
-    OrganizationalEntity taskInitiator
-where    
-    taskInitiator.id = :userId and
-    taskInitiator = t.peopleAssignments.taskInitiator and   
-    
-    names.language = :language and
-    names in elements( t.names) and
-    
-    subjects.language = :language and
-    subjects in elements( t.subjects) and
-    
-    descriptions.language = :language and
-    descriptions in elements( t.descriptions) and
-     
-    t.taskData.expirationTime is null
-    

Deleted: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsTaskStakeholder.txt
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsTaskStakeholder.txt	2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsTaskStakeholder.txt	2008-09-16 15:19:06 UTC (rev 22819)
@@ -1,35 +0,0 @@
-select 
-     new org.drools.task.query.TaskSummary(
-     t.id,
-     names.text,
-     subjects.text,
-     descriptions.text,
-     t.taskData.status,
-     t.priority,
-     t.taskData.skipable,
-     t.taskData.actualOwner,
-     t.taskData.createdBy,
-     t.taskData.createdOn,
-     t.taskData.activationTime,
-     t.taskData.expirationTime)
-from 
-    Task t left join t.taskData.createdBy,
-    I18NText names,
-    I18NText subjects,
-    I18NText descriptions, 
-    OrganizationalEntity taskStakeholder
-where    
-    taskStakeholder.id = :userId and
-    taskStakeholder in elements ( t.peopleAssignments.taskStakeholders  )  and   
-    
-    names.language = :language and
-    names in elements( t.names) and
-    
-    subjects.language = :language and
-    subjects in elements( t.subjects) and
-    
-    descriptions.language = :language and
-    descriptions in elements( t.descriptions) and
-     
-    t.taskData.expirationTime is null
-    

Deleted: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksOwned.txt
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksOwned.txt	2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksOwned.txt	2008-09-16 15:19:06 UTC (rev 22819)
@@ -1,28 +0,0 @@
-select 
-    new org.drools.task.query.TaskSummary(
-    t.id,
-    names.text,
-    subjects.text,
-    descriptions.text,
-    t.taskData.status,
-    t.priority,
-    t.taskData.skipable,
-    t.taskData.actualOwner,
-    t.taskData.createdBy,
-    t.taskData.createdOn,
-    t.taskData.activationTime,
-    t.taskData.expirationTime)
-from 
-    Task t left join t.taskData.createdBy,
-    I18NText names,
-    I18NText subjects,
-    I18NText descriptions 
-where    
-    t.taskData.actualOwner.id = :userId and
-    names in elements( t.names) and
-    names.language = :language and
-    subjects in elements( t.subjects) and
-    subjects.language = :language and
-    descriptions in elements( t.descriptions) and
-    descriptions.language = :language and 
-    t.taskData.expirationTime is null
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/UnescalatedDeadlines.txt
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/UnescalatedDeadlines.txt	2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/UnescalatedDeadlines.txt	2008-09-16 15:19:06 UTC (rev 22819)
@@ -1,13 +0,0 @@
-select 
-     new org.drools.task.query.DeadlineSummary(
-     t.id,
-     d.id,
-     d.date)
-from 
-    Task t,
-    Deadline d
-where    
-    (d in elements( t.deadlines.startDeadlines ) or d in elements( t.deadlines.endDeadlines ) ) and 
-    d.escalated = false
-order by
-    d.date    
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/BaseTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/BaseTest.java	2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/BaseTest.java	2008-09-16 15:19:06 UTC (rev 22819)
@@ -38,6 +38,7 @@
 import org.drools.task.User;
 import org.drools.task.query.TaskSummary;
 import org.drools.task.service.TaskService;
+import org.drools.task.service.TaskServiceSession;
 import org.drools.task.utils.CollectionUtils;
 import org.mvel.MVEL;
 import org.mvel.ParserContext;
@@ -51,46 +52,54 @@
 
 public abstract class BaseTest extends TestCase {
     protected EntityManagerFactory emf;
-    
-    protected Map<String, User> users;
-    protected Map<String, Group> groups;
-    
-    protected TaskService taskService;
-    
+
+    protected Map<String, User>    users;
+    protected Map<String, Group>   groups;
+
+    protected TaskService          taskService;
+    protected TaskServiceSession   taskSession;
+
     protected void setUp() throws Exception {
         // Use persistence.xml configuration
-        emf = Persistence.createEntityManagerFactory( "org.drools.task" );        
-        
+        emf = Persistence.createEntityManagerFactory( "org.drools.task" );
+
         taskService = new TaskService( emf );
-        
-        Map  vars = new HashedMap();
-        
-        Reader reader = new InputStreamReader( BaseTest.class.getResourceAsStream( "LoadUsers.mvel" ) );     
-        users = ( Map<String, User> ) eval( reader, vars );   
+        taskSession = taskService.createSession();
+        MockUserInfo userInfo = new MockUserInfo();
+        taskService.setUserinfo( userInfo );
+        Map vars = new HashedMap();
+
+        Reader reader = new InputStreamReader( BaseTest.class.getResourceAsStream( "LoadUsers.mvel" ) );
+        users = (Map<String, User>) eval( reader,
+                                          vars );
         for ( User user : users.values() ) {
-            taskService.addUser( user );
-        }           
-        
-        reader = new InputStreamReader( BaseTest.class.getResourceAsStream( "LoadGroups.mvel" ) );      
-        groups = ( Map<String, Group> ) eval( reader, vars );     
+            taskSession.addUser( user );
+        }
+
+        reader = new InputStreamReader( BaseTest.class.getResourceAsStream( "LoadGroups.mvel" ) );
+        groups = (Map<String, Group>) eval( reader,
+                                            vars );
         for ( Group group : groups.values() ) {
-            taskService.addGroup( group );
-        }                      
+            taskSession.addGroup( group );
+        }
     }
-    
+
     protected void tearDown() throws Exception {
+        taskSession.dispose();
         emf.close();
-    }    
+    }
 
-    public Object eval(Reader reader, Map vars) {
+    public Object eval(Reader reader,
+                       Map vars) {
         try {
-            return eval( toString( reader ), vars );
+            return eval( toString( reader ),
+                         vars );
         } catch ( IOException e ) {
             throw new RuntimeException( "Exception Thrown",
                                         e );
         }
     }
-    
+
     public String toString(Reader reader) throws IOException {
         int charValue = 0;
         StringBuffer sb = new StringBuffer( 1024 );
@@ -101,36 +110,60 @@
         return sb.toString();
     }
 
-    public Object eval(String str, Map vars) {
+    public Object eval(String str,
+                       Map vars) {
         ExpressionCompiler compiler = new ExpressionCompiler( str.trim() );
 
         ParserContext context = new ParserContext();
         context.addPackageImport( "org.drools.task" );
         context.addPackageImport( "java.util" );
-        
-        context.addImport( "AccessType", AccessType.class );
-        context.addImport( "Allowed", Allowed.class );
-        context.addImport( "Attachment", Attachment.class );
-        context.addImport( "BooleanExpression", BooleanExpression.class );
-        context.addImport( "Comment", Comment.class );
-        context.addImport( "Deadline", Deadline.class );
-        context.addImport( "Deadlines", Deadlines.class );
-        context.addImport( "Delegation", Delegation.class );
-        context.addImport( "Escalation", Escalation.class );
-        context.addImport( "EmailNotification", EmailNotification.class );
-        context.addImport( "EmailNotificationHeader", EmailNotificationHeader.class );        
-        context.addImport( "Group", Group.class );
-        context.addImport( "I18NText", I18NText.class );
-        context.addImport( "Notification", Notification.class );
-        context.addImport( "OrganizationalEntity", OrganizationalEntity.class );
-        context.addImport( "PeopleAssignments", PeopleAssignments.class );
-        context.addImport( "Reassignment", Reassignment.class );
-        context.addImport( "Status", Status.class );
-        context.addImport( "Task", Task.class );
-        context.addImport( "TaskData", TaskData.class );
-        context.addImport( "TaskSummary", TaskSummary.class );
-        context.addImport( "User", User.class );
 
-        return MVEL.executeExpression( compiler.compile( context ), vars );
+        context.addImport( "AccessType",
+                           AccessType.class );
+        context.addImport( "Allowed",
+                           Allowed.class );
+        context.addImport( "Attachment",
+                           Attachment.class );
+        context.addImport( "BooleanExpression",
+                           BooleanExpression.class );
+        context.addImport( "Comment",
+                           Comment.class );
+        context.addImport( "Deadline",
+                           Deadline.class );
+        context.addImport( "Deadlines",
+                           Deadlines.class );
+        context.addImport( "Delegation",
+                           Delegation.class );
+        context.addImport( "Escalation",
+                           Escalation.class );
+        context.addImport( "EmailNotification",
+                           EmailNotification.class );
+        context.addImport( "EmailNotificationHeader",
+                           EmailNotificationHeader.class );
+        context.addImport( "Group",
+                           Group.class );
+        context.addImport( "I18NText",
+                           I18NText.class );
+        context.addImport( "Notification",
+                           Notification.class );
+        context.addImport( "OrganizationalEntity",
+                           OrganizationalEntity.class );
+        context.addImport( "PeopleAssignments",
+                           PeopleAssignments.class );
+        context.addImport( "Reassignment",
+                           Reassignment.class );
+        context.addImport( "Status",
+                           Status.class );
+        context.addImport( "Task",
+                           Task.class );
+        context.addImport( "TaskData",
+                           TaskData.class );
+        context.addImport( "TaskSummary",
+                           TaskSummary.class );
+        context.addImport( "User",
+                           User.class );
+
+        return MVEL.executeExpression( compiler.compile( context ),
+                                       vars );
     }
 }

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/ModelPersistenceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/ModelPersistenceTest.java	2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/ModelPersistenceTest.java	2008-09-16 15:19:06 UTC (rev 22819)
@@ -37,6 +37,7 @@
 import org.drools.task.TaskData;
 import org.drools.task.User;
 import org.drools.task.service.TaskService;
+import org.drools.task.service.TaskServiceSession;
 import org.drools.task.utils.CollectionUtils;
 import org.mvel.MVEL;
 import org.mvel.ParserContext;
@@ -59,6 +60,7 @@
     }
     
     public void testfullHibernateRoundtripWithAdditionalMVELCheck() throws Exception {
+        TaskServiceSession session = taskService.createSession();
         Task task1 = new Task();
         task1.setPriority( 100 );
 
@@ -340,12 +342,12 @@
         potentialOwners.add( users.get( "stuart" ) );
         potentialOwners.add( users.get( "dalai" ) );        
 
-        taskService.addTask( task1 );                
+        session.addTask( task1 );
         
-        taskService.getEntityManager().clear();
+        session.dispose();        
+        session = taskService.createSession();
         
-        Task task2 = taskService.getTask( task1.getId( ) );       
-        
+        Task task2 = session.getTask( task1.getId( ) );       
         assertNotSame( task1,
                        task2 );
         assertEquals( task1,
@@ -362,6 +364,7 @@
                        task3 );
         assertEquals( task1,
                       task3 );
+        session.dispose();
     }    
 
 }

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/QueryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/QueryTest.java	2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/QueryTest.java	2008-09-16 15:19:06 UTC (rev 22819)
@@ -42,6 +42,7 @@
 import org.drools.task.query.TaskSummary;
 import org.drools.task.service.EscalatedDeadlineHandler;
 import org.drools.task.service.TaskService;
+import org.drools.task.service.TaskServiceSession;
 import org.drools.task.utils.CollectionUtils;
 import org.mvel.MVEL;
 import org.mvel.ParserContext;
@@ -58,6 +59,7 @@
 public class QueryTest extends BaseTest {
 
     public void testUnescalatedDeadlines() throws Exception {
+        TaskServiceSession taskSession = taskService.createSession();        
         Map vars = new HashedMap();
         vars.put( "users",
                   users );
@@ -72,11 +74,11 @@
         List<Task> tasks = (List<Task>) eval( reader,
                                               vars );
         for ( Task task : tasks ) {
-            taskService.addTask( task );
+            taskSession.addTask( task );
         }
 
         // should be three, one is marked as escalated
-        List<DeadlineSummary> list = taskService.getUnescalatedDeadlines();
+        List<DeadlineSummary> list = taskSession.getUnescalatedDeadlines();
         assertEquals( 3,
                       list.size() );
 
@@ -91,6 +93,7 @@
         result = list.get( 2 );
         assertEquals( result.getDate().getTime(),
                       now + 5000 );    
+        taskSession.dispose();
     }
     
 

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingEventResponseHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingEventResponseHandler.java	2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingEventResponseHandler.java	2008-09-16 15:19:06 UTC (rev 22819)
@@ -19,7 +19,7 @@
     public synchronized Payload getPayload() {
         if ( !wait ) {                  
             try {
-                wait( 300000 );
+                wait( 3000 );
             } catch ( InterruptedException e ) {
                 // swallow as this is just a notification
             }

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/DemoTaskService.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/DemoTaskService.java	2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/DemoTaskService.java	2008-09-16 15:19:06 UTC (rev 22819)
@@ -40,22 +40,24 @@
 	public static void main(String[] args) {
 		EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.drools.task");
         TaskService taskService = new TaskService(emf);
+        TaskServiceSession taskSession = taskService.createSession();
         // Add users
         Map vars = new HashedMap();
         Reader reader = new InputStreamReader( BaseTest.class.getResourceAsStream( "LoadUsers.mvel" ) );     
         Map<String, User> users = ( Map<String, User> ) eval( reader, vars );   
         for ( User user : users.values() ) {
-            taskService.addUser( user );
+            taskSession.addUser( user );
         }           
         reader = new InputStreamReader( BaseTest.class.getResourceAsStream( "LoadGroups.mvel" ) );      
         Map<String, Group> groups = ( Map<String, Group> ) eval( reader, vars );     
         for ( Group group : groups.values() ) {
-            taskService.addGroup( group );
+            taskSession.addGroup( group );
         }
         // start server
         MinaTaskServer server = new MinaTaskServer(taskService);
         Thread thread = new Thread(server);
         thread.start();
+        taskSession.dispose();
 	}
 	
 	@SuppressWarnings("unchecked")

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	2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/MockEventMessagingTest.java	2008-09-16 15:19:06 UTC (rev 22819)
@@ -37,14 +37,14 @@
         str += "names = [ new I18NText( 'en-UK', 'This is my task name')] })";
             
         Task task = ( Task )  eval( new StringReader( str ), vars );
-        taskService.addTask( task );
+        taskSession.addTask( task );
         
         long taskId = task.getId();      
         
         EventKey key = new TaskEventKey(TaskClaimedEvent.class, taskId );        
         MockEventTriggerTransport transport = new MockEventTriggerTransport();   
         taskService.getEventKeys().register( key, transport );        
-        taskService.claim( taskId, users.get( "darth" ).getId() );        
+        taskSession.claim( taskId, users.get( "darth" ).getId() );        
         
         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/TaskServiceCommentsAndAttachmentsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceCommentsAndAttachmentsTest.java	2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceCommentsAndAttachmentsTest.java	2008-09-16 15:19:06 UTC (rev 22819)
@@ -64,6 +64,9 @@
         vars.put( "now", new Date() );
         
         String str = "(with (new Task()) { priority = 55, taskData = (with( new TaskData()) { createdOn = now, activationTime = now}), ";
+        str += "deadlines = new Deadlines(),";
+        str += "delegation = new Delegation(),";
+        str += "peopleAssignments = new PeopleAssignments(),";
         str += "names = [ new I18NText( 'en-UK', 'This is my task name')] })";
             
         BlockingAddTaskResponseHandler addTaskResponseHandler = new BlockingAddTaskResponseHandler();
@@ -140,6 +143,9 @@
         vars.put( "now", new Date() );        
         
         String str = "(with (new Task()) { priority = 55, taskData = (with( new TaskData()) { createdOn = now, activationTime = now}), ";
+        str += "deadlines = new Deadlines(),";
+        str += "delegation = new Delegation(),";
+        str += "peopleAssignments = new PeopleAssignments(),";
         str += "names = [ new I18NText( 'en-UK', 'This is my task name')] })";
             
         BlockingAddTaskResponseHandler addTaskResponseHandler = new BlockingAddTaskResponseHandler();

Copied: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceDeadlinesTest.java (from rev 22782, labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEmailNotificationTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceDeadlinesTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceDeadlinesTest.java	2008-09-16 15:19:06 UTC (rev 22819)
@@ -0,0 +1,193 @@
+package org.drools.task.service;
+
+import java.io.InputStreamReader;
+import java.io.StringReader;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMessage.RecipientType;
+
+import org.apache.commons.collections.map.HashedMap;
+import org.apache.mina.transport.socket.nio.NioSocketConnector;
+import org.drools.process.instance.WorkItemManager;
+import org.drools.process.instance.impl.DefaultWorkItemManager;
+import org.drools.process.instance.impl.WorkItemImpl;
+import org.drools.process.workitem.email.EmailWorkItemHandler;
+import org.drools.task.BaseTest;
+import org.drools.task.Content;
+import org.drools.task.EmailNotification;
+import org.drools.task.MockUserInfo;
+import org.drools.task.OrganizationalEntity;
+import org.drools.task.Status;
+import org.drools.task.Task;
+import org.drools.task.User;
+import org.drools.task.service.DefaultEscalatedDeadlineHandler;
+import org.mvel.MVEL;
+import org.mvel.compiler.ExpressionCompiler;
+import org.mvel.templates.CompiledTemplate;
+import org.mvel.templates.TemplateCompiler;
+import org.mvel.templates.TemplateRuntime;
+import org.subethamail.wiser.Wiser;
+import org.subethamail.wiser.WiserMessage;
+
+public class TaskServiceDeadlinesTest extends BaseTest {
+    MinaTaskServer server;
+    MinaTaskClient client;
+    
+    Wiser wiser;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        server = new MinaTaskServer( taskService );
+        Thread thread = new Thread( server );
+        thread.start();
+        Thread.sleep( 500 );
+
+        client = new MinaTaskClient( "client 1",
+                                     new TaskClientHandler() );
+        NioSocketConnector connector = new NioSocketConnector();
+        SocketAddress address = new InetSocketAddress( "127.0.0.1",
+                                                       9123 );
+        client.connect( connector,
+                        address );
+        
+        wiser = new Wiser();
+        wiser.start();
+    }
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        client.disconnect();
+        server.stop();
+        
+        wiser.stop();
+    }
+    
+    public void testDelayedEmailNotificationOnDeadline() throws Exception {
+        Map  vars = new HashedMap();     
+        vars.put( "users", users );
+        vars.put( "groups", groups );
+        vars.put( "now", new Date() ); 
+        
+        DefaultEscalatedDeadlineHandler notificationHandler = new DefaultEscalatedDeadlineHandler();
+        notificationHandler.getHandler().setConnection( "localhost", "25", null, null );
+        WorkItemManager manager = new DefaultWorkItemManager( null );
+        notificationHandler.setManager( manager );
+        
+        MockUserInfo userInfo = new MockUserInfo();
+        userInfo.getEmails().put( users.get("tony"), "tony at domain.com" );
+        userInfo.getEmails().put( users.get("darth"), "darth at domain.com" );
+        
+        userInfo.getLanguages().put(  users.get("tony"), "en-UK" );
+        userInfo.getLanguages().put(  users.get("darth"), "en-UK" );
+        notificationHandler.setUserInfo( userInfo );    
+        
+        taskService.setEscalatedDeadlineHandler( notificationHandler );
+        
+        String string = toString( new InputStreamReader( getClass().getResourceAsStream( "DeadlineWithNotification.mvel" ) ) );
+            
+        BlockingAddTaskResponseHandler addTaskResponseHandler = new BlockingAddTaskResponseHandler();
+        Task task = ( Task )  eval( new StringReader( string ), vars );
+        client.addTask( task, addTaskResponseHandler );
+        long taskId = addTaskResponseHandler.getTaskId();    
+                                        
+        Content content = new Content();
+        content.setContent( "['subject' : 'My Subject', 'body' : 'My Body']".getBytes() );
+        BlockingSetContentResponseHandler setContentResponseHandler  = new BlockingSetContentResponseHandler();
+        client.setDocumentContent( taskId, content, setContentResponseHandler );
+        long contentId = setContentResponseHandler.getContentId();
+        
+        // emails should not be set yet
+        assertEquals(0, wiser.getMessages().size() );             
+        Thread.sleep( 1000 );
+        
+        // nor yet
+        assertEquals(0, wiser.getMessages().size() );     
+        
+        Thread.sleep( 6000 );
+        
+        // 1 email with two recipients should now exist
+        assertEquals(2, wiser.getMessages().size() );        
+        
+        List<String> list = new ArrayList<String>(2);
+        list.add( wiser.getMessages().get( 0 ).getEnvelopeReceiver() );
+        list.add( wiser.getMessages().get( 1 ).getEnvelopeReceiver() );
+        
+        assertTrue( list.contains("tony at domain.com"));
+        assertTrue( list.contains("darth at domain.com"));
+        
+        
+        MimeMessage msg = (( WiserMessage  ) wiser.getMessages().get( 0 )).getMimeMessage();
+        assertEquals( "My Body", msg.getContent() );
+        assertEquals( "My Subject", msg.getSubject() );
+        assertEquals( "from at domain.com", ((InternetAddress)msg.getFrom()[0]).getAddress() );
+        assertEquals( "replyTo at domain.com", ((InternetAddress)msg.getReplyTo()[0]).getAddress() );
+        assertEquals( "tony at domain.com", ((InternetAddress)msg.getRecipients( RecipientType.TO )[0]).getAddress() );
+        assertEquals( "darth at domain.com", ((InternetAddress)msg.getRecipients( RecipientType.TO )[1]).getAddress() );        
+    }
+    
+    public void testDelayedReassignmentOnDeadline() throws Exception {
+        Map  vars = new HashedMap();     
+        vars.put( "users", users );
+        vars.put( "groups", groups );
+        vars.put( "now", new Date() ); 
+        
+        DefaultEscalatedDeadlineHandler notificationHandler = new DefaultEscalatedDeadlineHandler();
+        notificationHandler.getHandler().setConnection( "localhost", "25", null, null );
+        WorkItemManager manager = new DefaultWorkItemManager( null );
+        notificationHandler.setManager( manager );
+        
+        MockUserInfo userInfo = new MockUserInfo();
+        userInfo.getEmails().put( users.get("tony"), "tony at domain.com" );
+        userInfo.getEmails().put( users.get("darth"), "darth at domain.com" );
+        
+        userInfo.getLanguages().put(  users.get("tony"), "en-UK" );
+        userInfo.getLanguages().put(  users.get("darth"), "en-UK" );
+        notificationHandler.setUserInfo( userInfo );    
+        
+        taskService.setEscalatedDeadlineHandler( notificationHandler );
+        
+        String string = toString( new InputStreamReader( getClass().getResourceAsStream( "DeadlineWithReassignment.mvel" ) ) );
+            
+        BlockingAddTaskResponseHandler addTaskResponseHandler = new BlockingAddTaskResponseHandler();
+        Task task = ( Task )  eval( new StringReader( string ), vars );               
+        client.addTask( task, addTaskResponseHandler );
+        long taskId = addTaskResponseHandler.getTaskId();    
+        
+        // Shouldn't have re-assigned yet
+        Thread.sleep( 1000 );
+        BlockingGetTaskResponseHandler getTaskHandler = new BlockingGetTaskResponseHandler(); 
+        client.getTask( taskId, getTaskHandler );
+        task = getTaskHandler.getTask();
+        List<OrganizationalEntity> potentialOwners = task.getPeopleAssignments().getPotentialOwners();
+        List<String> ids = new ArrayList<String>(potentialOwners.size());
+        for ( OrganizationalEntity entity : potentialOwners ) {
+            ids.add( entity.getId() );
+        }
+        assertTrue( ids.contains( users.get( "tony" ).getId() ));
+        assertTrue( ids.contains( users.get( "luke" ).getId() ));        
+        
+        // should have re-assigned by now
+        Thread.sleep( 5000 );     
+        getTaskHandler = new BlockingGetTaskResponseHandler(); 
+        client.getTask( taskId, getTaskHandler );
+        task = getTaskHandler.getTask();
+        assertEquals( Status.Ready, task.getTaskData().getStatus()  );
+        potentialOwners = task.getPeopleAssignments().getPotentialOwners();
+        System.out.println( potentialOwners );
+        ids = new ArrayList<String>(potentialOwners.size());
+        for ( OrganizationalEntity entity : potentialOwners ) {
+            ids.add( entity.getId() );
+        }
+        assertTrue( ids.contains( users.get( "bobba" ).getId() ));
+        assertTrue( ids.contains( users.get( "jabba" ).getId() ));                  
+    }
+}


Property changes on: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceDeadlinesTest.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

Deleted: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEmailNotificationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEmailNotificationTest.java	2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEmailNotificationTest.java	2008-09-16 15:19:06 UTC (rev 22819)
@@ -1,134 +0,0 @@
-package org.drools.task.service;
-
-import java.io.InputStreamReader;
-import java.io.StringReader;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.mail.internet.InternetAddress;
-import javax.mail.internet.MimeMessage;
-import javax.mail.internet.MimeMessage.RecipientType;
-
-import org.apache.commons.collections.map.HashedMap;
-import org.apache.mina.transport.socket.nio.NioSocketConnector;
-import org.drools.process.instance.WorkItemManager;
-import org.drools.process.instance.impl.DefaultWorkItemManager;
-import org.drools.process.instance.impl.WorkItemImpl;
-import org.drools.process.workitem.email.EmailWorkItemHandler;
-import org.drools.task.BaseTest;
-import org.drools.task.Content;
-import org.drools.task.EmailNotification;
-import org.drools.task.MockUserInfo;
-import org.drools.task.Task;
-import org.drools.task.User;
-import org.drools.task.service.DefaultEscalatedDeadlineHandler;
-import org.mvel.MVEL;
-import org.mvel.compiler.ExpressionCompiler;
-import org.mvel.templates.CompiledTemplate;
-import org.mvel.templates.TemplateCompiler;
-import org.mvel.templates.TemplateRuntime;
-import org.subethamail.wiser.Wiser;
-import org.subethamail.wiser.WiserMessage;
-
-public class TaskServiceEmailNotificationTest extends BaseTest {
-    MinaTaskServer server;
-    MinaTaskClient client;
-    
-    Wiser wiser;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        server = new MinaTaskServer( taskService );
-        Thread thread = new Thread( server );
-        thread.start();
-        Thread.sleep( 500 );
-
-        client = new MinaTaskClient( "client 1",
-                                     new TaskClientHandler() );
-        NioSocketConnector connector = new NioSocketConnector();
-        SocketAddress address = new InetSocketAddress( "127.0.0.1",
-                                                       9123 );
-        client.connect( connector,
-                        address );
-        
-        wiser = new Wiser();
-        wiser.start();
-    }
-
-    protected void tearDown() throws Exception {
-        super.tearDown();
-        client.disconnect();
-        server.stop();
-        
-        wiser.stop();
-    }
-    
-    public void testDelayedEmailNotificationOnDeadline() throws Exception {
-        Map  vars = new HashedMap();     
-        vars.put( "users", users );
-        vars.put( "groups", groups );
-        vars.put( "now", new Date() ); 
-        
-        DefaultEscalatedDeadlineHandler notificationHandler = new DefaultEscalatedDeadlineHandler();
-        notificationHandler.getHandler().setConnection( "localhost", "25", null, null );
-        WorkItemManager manager = new DefaultWorkItemManager( null );
-        notificationHandler.setManager( manager );
-        
-        MockUserInfo userInfo = new MockUserInfo();
-        userInfo.getEmails().put( users.get("tony"), "tony at domain.com" );
-        userInfo.getEmails().put( users.get("darth"), "darth at domain.com" );
-        
-        userInfo.getLanguages().put(  users.get("tony"), "en-UK" );
-        userInfo.getLanguages().put(  users.get("darth"), "en-UK" );
-        notificationHandler.setUserInfo( userInfo );    
-        
-        taskService.setEscalatedDeadlineHandler( notificationHandler );
-        
-        String string = toString( new InputStreamReader( getClass().getResourceAsStream( "Notification1.mvel" ) ) );
-            
-        BlockingAddTaskResponseHandler addTaskResponseHandler = new BlockingAddTaskResponseHandler();
-        Task task = ( Task )  eval( new StringReader( string ), vars );
-        client.addTask( task, addTaskResponseHandler );
-        long taskId = addTaskResponseHandler.getTaskId();    
-                                        
-        Content content = new Content();
-        content.setContent( "['subject' : 'My Subject', 'body' : 'My Body']".getBytes() );
-        BlockingSetContentResponseHandler setContentResponseHandler  = new BlockingSetContentResponseHandler();
-        client.setDocumentContent( taskId, content, setContentResponseHandler );
-        long contentId = setContentResponseHandler.getContentId();
-        
-        // emails should not be set yet
-        assertEquals(0, wiser.getMessages().size() );             
-        Thread.sleep( 1000 );
-        
-        // nor yet
-        assertEquals(0, wiser.getMessages().size() );     
-        
-        Thread.sleep( 6000 );
-        
-        // 1 email with two recipients should now exist
-        assertEquals(2, wiser.getMessages().size() );        
-        
-        List<String> list = new ArrayList<String>(2);
-        list.add( wiser.getMessages().get( 0 ).getEnvelopeReceiver() );
-        list.add( wiser.getMessages().get( 1 ).getEnvelopeReceiver() );
-        
-        assertTrue( list.contains("tony at domain.com"));
-        assertTrue( list.contains("darth at domain.com"));
-        
-        
-        MimeMessage msg = (( WiserMessage  ) wiser.getMessages().get( 0 )).getMimeMessage();
-        assertEquals( "My Body", msg.getContent() );
-        assertEquals( "My Subject", msg.getSubject() );
-        assertEquals( "from at domain.com", ((InternetAddress)msg.getFrom()[0]).getAddress() );
-        assertEquals( "replyTo at domain.com", ((InternetAddress)msg.getReplyTo()[0]).getAddress() );
-        assertEquals( "tony at domain.com", ((InternetAddress)msg.getRecipients( RecipientType.TO )[0]).getAddress() );
-        assertEquals( "darth at domain.com", ((InternetAddress)msg.getRecipients( RecipientType.TO )[1]).getAddress() );        
-    }
-}

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEscalationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEscalationTest.java	2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEscalationTest.java	2008-09-16 15:19:06 UTC (rev 22819)
@@ -43,7 +43,7 @@
         List<Task> tasks = (List<Task>) eval( reader,
                                               vars );
         for ( Task task : tasks ) {
-            taskService.addTask( task );
+            taskSession.addTask( task );
         }
 
         Thread.sleep( 4000 );

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEventMessagingTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEventMessagingTest.java	2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEventMessagingTest.java	2008-09-16 15:19:06 UTC (rev 22819)
@@ -15,6 +15,7 @@
 import org.drools.eventmessaging.EventTriggerTransport;
 import org.drools.eventmessaging.Payload;
 import org.drools.task.BaseTest;
+import org.drools.task.MockUserInfo;
 import org.drools.task.Status;
 import org.drools.task.Task;
 import org.drools.task.event.TaskClaimedEvent;
@@ -40,6 +41,18 @@
                                                        9123 );
         client.connect( connector,
                         address );
+        
+        MockUserInfo userInfo = new MockUserInfo();
+        userInfo.getEmails().put( users.get( "tony" ),
+                                  "tony at domain.com" );
+        userInfo.getEmails().put( users.get( "steve" ),
+                                  "steve at domain.com" );
+
+        userInfo.getLanguages().put( users.get( "tony" ),
+                                     "en-UK" );
+        userInfo.getLanguages().put( users.get( "steve" ),
+                                     "en-UK" );
+        taskService.setUserinfo( userInfo );
     }
 
     protected void tearDown() throws Exception {
@@ -75,9 +88,8 @@
         BlockingEventResponseHandler handler = new BlockingEventResponseHandler(); 
         client.registerForEvent( key, true, handler );
         
-        taskService.claim( taskId, users.get( "darth" ).getId() );  
+        taskSession.claim( taskId, users.get( "darth" ).getId() );  
         
-
         Payload payload = handler.getPayload();
         TaskClaimedEvent event = ( TaskClaimedEvent ) payload.get();
         assertNotNull( event );        

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceTest.java	2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceTest.java	2008-09-16 15:19:06 UTC (rev 22819)
@@ -139,7 +139,7 @@
         List<Task> tasks = (List<Task>) eval( reader,
                                               vars );
         for ( Task task : tasks ) {
-            taskService.addTask( task );
+            taskSession.addTask( task );
         }
 
         reader = new InputStreamReader( getClass().getResourceAsStream( "QueryResults_PeopleAssignmentQuerries.mvel" ) );

Copied: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/DeadlineWithNotification.mvel (from rev 22782, labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/Notification1.mvel)
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/DeadlineWithNotification.mvel	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/DeadlineWithNotification.mvel	2008-09-16 15:19:06 UTC (rev 22819)
@@ -0,0 +1,29 @@
+with ( new Task() ) { 
+    taskData = (with ( new TaskData() ) {
+                   documentAccessType = AccessType.Inline,
+                   documentType = "MVEL"
+                }),
+    deadlines = ( with ( new Deadlines() ) {
+        startDeadlines = [ 
+            (with (new Deadline()) {
+                date = new Date( now.time + 5000 ),            
+                escalations = [ 
+                    (with (new Escalation()) {
+                        name = "My Start Escalation",
+                        constraints = [new BooleanExpression( "mvel", "true" )],
+                        notifications = [ 
+                            (with (new EmailNotification()) {
+                                recipients = [ users['tony' ], users['darth' ] ],
+                                emailHeaders = [ 'en-UK' : (with (new EmailNotificationHeader()) { 
+                                    language = 'en-UK',
+                                    subject = "@{doc.subject}",
+                                    body = "@{doc.body}"
+                                }) ]                                                                                                                                                                                  
+                            }) 
+                        ]                                               
+                    }) 
+                ]
+            })
+        ]
+    })        
+};
\ No newline at end of file


Property changes on: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/DeadlineWithNotification.mvel
___________________________________________________________________
Name: svn:mergeinfo
   + 

Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/DeadlineWithReassignment.mvel
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/DeadlineWithReassignment.mvel	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/DeadlineWithReassignment.mvel	2008-09-16 15:19:06 UTC (rev 22819)
@@ -0,0 +1,25 @@
+with ( new Task() ) { 
+    peopleAssignments = (with ( new PeopleAssignments() ) {        
+        potentialOwners = [users['luke' ], users['tony']],
+    }),
+    taskData = (with ( new TaskData() ) {
+                   documentAccessType = AccessType.Inline,
+                   documentType = "MVEL"
+                }),
+    deadlines = ( with ( new Deadlines() ) {
+        startDeadlines = [ 
+            (with (new Deadline()) {
+                date = new Date( now.time + 5000 ),            
+                escalations = [ 
+                    (with (new Escalation()) {
+                        name = "My Start Escalation",
+                        constraints = [new BooleanExpression( "mvel", "true" )],
+                        reassignments = [(with ( new Reassignment() ) {
+                            potentialOwners = [users['bobba' ], users['jabba' ]]
+                        })]
+                    }) 
+                ]
+            })
+        ]
+    })        
+};
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/Notification1.mvel
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/Notification1.mvel	2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/Notification1.mvel	2008-09-16 15:19:06 UTC (rev 22819)
@@ -1,29 +0,0 @@
-with ( new Task() ) { 
-    taskData = (with ( new TaskData() ) {
-                   documentAccessType = AccessType.Inline,
-                   documentType = "MVEL"
-                }),
-    deadlines = ( with ( new Deadlines() ) {
-        startDeadlines = [ 
-            (with (new Deadline()) {
-                date = new Date( now.time + 5000 ),            
-                escalations = [ 
-                    (with (new Escalation()) {
-                        name = "My Start Escalation",
-                        constraints = [new BooleanExpression( "mvel", "true" )],
-                        notifications = [ 
-                            (with (new EmailNotification()) {
-                                recipients = [ users['tony' ], users['darth' ] ],
-                                emailHeaders = [ 'en-UK' : (with (new EmailNotificationHeader()) { 
-                                    language = 'en-UK',
-                                    subject = "@{doc.subject}",
-                                    body = "@{doc.body}"
-                                }) ]                                                                                                                                                                                  
-                            }) 
-                        ]                                               
-                    }) 
-                ]
-            })
-        ]
-    })        
-};
\ No newline at end of file




More information about the jboss-svn-commits mailing list