[jboss-svn-commits] JBL Code SVN: r30792 - in labs/jbossrules/branches/human-task-vsm_lucaz-salaboy: drools-vsm/src/main/java/org/drools/command/vsm and 5 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Dec 21 18:06:01 EST 2009


Author: lucazamador
Date: 2009-12-21 18:06:00 -0500 (Mon, 21 Dec 2009)
New Revision: 30792

Added:
   labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/command/vsm/GetWorkItemManagerCommand.java
   labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/remote/WorkItemManagerRemoteClient.java
   labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/task/
   labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/task/BaseTest.java
   labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/task/CommandBasedVSMWSHumanTaskHandlerTest.java
Modified:
   labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-core/src/main/java/org/drools/command/impl/KnowledgeCommandContext.java
   labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/remote/StatefulKnowledgeSessionRemoteClient.java
   labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/task/CommandBasedVSMWSHumanTaskHandler.java
   labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/vsm/ServiceManagerHumanTaskMinaRemoteTest.java
   labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/vsm/ServiceManagerTestBase.java
Log:
WorkItemManager Handler implemented. Process Task test migrated to VSM

Modified: labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-core/src/main/java/org/drools/command/impl/KnowledgeCommandContext.java
===================================================================
--- labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-core/src/main/java/org/drools/command/impl/KnowledgeCommandContext.java	2009-12-21 22:02:36 UTC (rev 30791)
+++ labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-core/src/main/java/org/drools/command/impl/KnowledgeCommandContext.java	2009-12-21 23:06:00 UTC (rev 30792)
@@ -8,6 +8,7 @@
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.impl.ExecutionResultImpl;
 import org.drools.runtime.pipeline.impl.ServiceManagerPipelineImpl;
+import org.drools.runtime.process.WorkItemManager;
 import org.drools.vsm.ServiceManager;
 
 public class KnowledgeCommandContext
@@ -43,6 +44,10 @@
         return statefulKsession;
     }
     
+    public WorkItemManager getWorkItemManager() {
+    	return statefulKsession.getWorkItemManager();
+    }
+    
     public ExecutionResults getExecutionResults() {
         return this.kresults;
     }

Added: labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/command/vsm/GetWorkItemManagerCommand.java
===================================================================
--- labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/command/vsm/GetWorkItemManagerCommand.java	                        (rev 0)
+++ labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/command/vsm/GetWorkItemManagerCommand.java	2009-12-21 23:06:00 UTC (rev 30792)
@@ -0,0 +1,29 @@
+package org.drools.command.vsm;
+
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.command.impl.KnowledgeCommandContext;
+import org.drools.runtime.impl.ExecutionResultImpl;
+import org.drools.runtime.process.WorkItemManager;
+import org.drools.vsm.remote.WorkItemManagerRemoteClient;
+
+/**
+ * 
+ * @author Lucas Amador
+ *
+ */
+public class GetWorkItemManagerCommand implements GenericCommand<WorkItemManager> {
+	
+	private static final long serialVersionUID = 1L;
+
+	public WorkItemManager execute(Context context) {
+        WorkItemManager workItemManager = ((KnowledgeCommandContext) context).getWorkItemManager();
+        ((ExecutionResultImpl)((KnowledgeCommandContext) context ).getExecutionResults()).getResults().put("workItemManager", getRemoteClient(workItemManager) );
+        return workItemManager;
+	}
+	
+	private WorkItemManager getRemoteClient(WorkItemManager workItemManager) {
+        return new WorkItemManagerRemoteClient();
+    }
+
+}
\ No newline at end of file


Property changes on: labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/command/vsm/GetWorkItemManagerCommand.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/remote/StatefulKnowledgeSessionRemoteClient.java
===================================================================
--- labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/remote/StatefulKnowledgeSessionRemoteClient.java	2009-12-21 22:02:36 UTC (rev 30791)
+++ labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/remote/StatefulKnowledgeSessionRemoteClient.java	2009-12-21 23:06:00 UTC (rev 30792)
@@ -1,6 +1,5 @@
 package org.drools.vsm.remote;
 
-import org.drools.command.vsm.StartProcessRemoteCommand;
 import java.util.Collection;
 import java.util.Map;
 
@@ -8,10 +7,10 @@
 import org.drools.command.Command;
 import org.drools.command.ExecuteCommand;
 import org.drools.command.KnowledgeContextResolveFromContextCommand;
-import org.drools.command.runtime.process.RegisterWorkItemHandlerCommand;
-import org.drools.command.runtime.process.StartProcessCommand;
 import org.drools.command.runtime.rule.FireAllRulesCommand;
+import org.drools.command.vsm.GetWorkItemManagerCommand;
 import org.drools.command.vsm.RegisterRemoteWorkItemHandlerCommand;
+import org.drools.command.vsm.StartProcessRemoteCommand;
 import org.drools.event.process.ProcessEventListener;
 import org.drools.event.rule.AgendaEventListener;
 import org.drools.event.rule.WorkingMemoryEventListener;
@@ -22,7 +21,6 @@
 import org.drools.runtime.ObjectFilter;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.process.ProcessInstance;
-import org.drools.runtime.process.WorkItemHandler;
 import org.drools.runtime.process.WorkItemManager;
 import org.drools.runtime.rule.Agenda;
 import org.drools.runtime.rule.AgendaFilter;
@@ -31,7 +29,6 @@
 import org.drools.runtime.rule.WorkingMemoryEntryPoint;
 import org.drools.time.SessionClock;
 import org.drools.vsm.Message;
-import org.drools.vsm.responsehandlers.BlockingMessageResponseHandler;
 
 public class StatefulKnowledgeSessionRemoteClient
     implements
@@ -125,8 +122,6 @@
                 throw new RuntimeException( "Response was not correctly received" );
             }
 
-            System.out.println( "object" + object );
-
             return (ExecutionResults) ((ExecutionResults) object).getValue( commandId );
         } catch ( Exception e ) {
             throw new RuntimeException( "Unable to execute message",
@@ -269,8 +264,26 @@
     }
 
     public WorkItemManager getWorkItemManager() {
-       return null;
+    	 String kresultsId = "kresults_" + serviceManager.getSessionId();
+         Message msg = new Message( serviceManager.getSessionId(),
+                                    serviceManager.counter.incrementAndGet(),
+                                    true,
+                                    new KnowledgeContextResolveFromContextCommand( new GetWorkItemManagerCommand(),
+                                                                                   null,
+                                                                                   null,
+                                                                                   instanceId,
+                                                                                   kresultsId ) );
+         try {
+             Object payload = serviceManager.client.write( msg ).getPayload();
+             WorkItemManager workItemManager = (WorkItemManager) ((ExecutionResults) payload).getValue( "workItemManager" );
+             ((WorkItemManagerRemoteClient)workItemManager).setServiceManager(serviceManager);
+             ((WorkItemManagerRemoteClient)workItemManager).setInstanceId(instanceId);
+             return workItemManager;
+         } catch ( Exception e ) {
+             throw new RuntimeException( "Unable to execute message", e );
+         }
     }
+    
     public void registerWorkItemHandler(String name, String workItemHandler){
         
         String kresultsId = "kresults_" + serviceManager.getSessionId();
@@ -287,8 +300,6 @@
         try {
             serviceManager.client.write( msg );
             
-
-          
         } catch ( Exception e ) {
             throw new RuntimeException( "Unable to execute message",
                                         e );
@@ -322,8 +333,6 @@
                 throw new RuntimeException( "Response was not correctly received" );
             }
 
-            System.out.println( "object" + object );
-
             return (ProcessInstance) ((ExecutionResults) object).getValue( processId );
         } catch ( Exception e ) {
             throw new RuntimeException( "Unable to execute message",

Added: labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/remote/WorkItemManagerRemoteClient.java
===================================================================
--- labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/remote/WorkItemManagerRemoteClient.java	                        (rev 0)
+++ labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/remote/WorkItemManagerRemoteClient.java	2009-12-21 23:06:00 UTC (rev 30792)
@@ -0,0 +1,58 @@
+package org.drools.vsm.remote;
+
+import java.io.Serializable;
+import java.util.Map;
+
+import org.drools.command.KnowledgeContextResolveFromContextCommand;
+import org.drools.command.runtime.process.CompleteWorkItemCommand;
+import org.drools.command.vsm.GetWorkItemManagerCommand;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+import org.drools.vsm.Message;
+
+/**
+ *
+ * @author Lucas Amador
+ */
+public class WorkItemManagerRemoteClient implements WorkItemManager, Serializable {
+
+	private static final long serialVersionUID = 1L;
+	
+	private ServiceManagerRemoteClient serviceManager;
+	private String instanceId;
+
+	public void abortWorkItem(long id) {
+		throw new UnsupportedOperationException("Not supported yet.");
+	}
+
+	public void completeWorkItem(long id, Map<String, Object> results) {
+		String kresultsId = "kresults_" + serviceManager.getSessionId();
+        Message msg = new Message( serviceManager.getSessionId(),
+                                   serviceManager.counter.incrementAndGet(),
+                                   true,
+                                   new KnowledgeContextResolveFromContextCommand( new CompleteWorkItemCommand(id, results),
+                                                                                  null,
+                                                                                  null,
+                                                                                  instanceId,
+                                                                                  kresultsId ) );
+        try {
+            serviceManager.client.write( msg );
+        } catch ( Exception e ) {
+            throw new RuntimeException( "Unable to execute message", e );
+        }
+	}
+
+	public void registerWorkItemHandler(String workItemName, WorkItemHandler handler) {
+		throw new UnsupportedOperationException("Not supported yet.");
+	}
+
+	public void setServiceManager(ServiceManagerRemoteClient serviceManager) {
+		this.serviceManager = serviceManager;
+	}
+
+	public void setInstanceId(String instanceId) {
+		this.instanceId = instanceId;
+	}
+
+}


Property changes on: labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/remote/WorkItemManagerRemoteClient.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/task/CommandBasedVSMWSHumanTaskHandler.java
===================================================================
--- labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/task/CommandBasedVSMWSHumanTaskHandler.java	2009-12-21 22:02:36 UTC (rev 30791)
+++ labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/task/CommandBasedVSMWSHumanTaskHandler.java	2009-12-21 23:06:00 UTC (rev 30792)
@@ -74,13 +74,6 @@
 											htclientConnector,
 											this.address,
 											SystemEventListenerFactory.getSystemEventListener() );
-//
-//			client = new HumanTaskServiceImpl(
-//				"org.drools.process.workitem.wsht.WSHumanTaskHandler",
-//                    new TaskClientHandler(SystemEventListenerFactory.getSystemEventListener()));
-//			NioSocketConnector connector = new NioSocketConnector();
-//			SocketAddress address = new InetSocketAddress(ipAddress, port);
-//			boolean connected = client.connect(connector, address);
             boolean connected = connector.connect();
 			if (!connected)
 				throw new IllegalArgumentException("Could not connect task client");
@@ -212,7 +205,6 @@
 	}
 	
     public class TaskWorkItemAddTaskMessageResponseHandler implements AddTaskMessageResponseHandler {
-       //extends AbstractBaseResponseHandler ??
     	private long workItemId;
         
         public TaskWorkItemAddTaskMessageResponseHandler(HumanTaskServiceImpl client, long workItemId) {
@@ -248,7 +240,6 @@
     }
     
     private class TaskCompletedMessageHandler implements EventMessageResponseHandler {
-        //extends AbstractBaseResponseHandler ??
         private long workItemId;
         private long taskId;
         
@@ -266,7 +257,6 @@
         }
 
 		public void receive(Message message) {
-			System.out.println("receive");
 			Command cmd = (Command) message.getPayload();
 			Payload payload = (Payload) cmd.getArguments().get(0);
 			TaskEvent event = ( TaskEvent ) payload.get();
@@ -276,18 +266,15 @@
 				return;
 			}
 			if (event instanceof TaskCompletedEvent) {
-				System.out.println("TaskCompletedEvent!!!!");
 				GetTaskMessageResponseHandler getTaskResponseHandler = new GetCompletedTaskMessageResponseHandler();
 				client.getTask(taskId, getTaskResponseHandler);   
 			} else {
-				System.out.println("abortttttttt");
 				session.getWorkItemManager().abortWorkItem(workItemId);
 			}
 		}
     }
     
     private class GetCompletedTaskMessageResponseHandler  implements GetTaskMessageResponseHandler {
-        // extends AbstractBaseResponseHandler??
 
         public void setError(RuntimeException error) {
             throw new UnsupportedOperationException("Not supported yet.");
@@ -306,7 +293,6 @@
 					new GetResultContentMessageResponseHandler(task, results);
 				client.getContent(contentId, getContentResponseHandler);
 			} else {
-				System.out.println("Completed Work Item");
 				session.getWorkItemManager().completeWorkItem(workItemId, results);
 			}
         }
@@ -317,7 +303,6 @@
     }
     
     private class GetResultContentMessageResponseHandler  implements GetContentMessageResponseHandler {
-        // extends AbstractBaseResponseHandler??
     	private Task task;
     	private Map<String, Object> results;
 

Added: labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/task/BaseTest.java
===================================================================
--- labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/task/BaseTest.java	                        (rev 0)
+++ labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/task/BaseTest.java	2009-12-21 23:06:00 UTC (rev 30792)
@@ -0,0 +1,113 @@
+package org.drools.task;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.Date;
+import java.util.Map;
+import java.util.Properties;
+
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+
+import junit.framework.TestCase;
+
+import org.apache.commons.collections.map.HashedMap;
+import org.drools.SystemEventListenerFactory;
+import org.drools.task.service.SendIcal;
+import org.drools.task.service.TaskService;
+import org.drools.task.service.TaskServiceSession;
+import org.mvel2.MVEL;
+import org.mvel2.ParserContext;
+import org.mvel2.compiler.ExpressionCompiler;
+
+public abstract class BaseTest extends TestCase {
+    protected EntityManagerFactory emf;
+
+    protected Map<String, User> users;
+    protected Map<String, Group> groups;
+
+    protected TaskService taskService;
+    protected TaskServiceSession taskSession;
+
+    protected void setUp() throws Exception {
+        Properties conf = new Properties();
+        conf.setProperty("mail.smtp.host", "localhost");
+        conf.setProperty("mail.smtp.port", "2345");
+        conf.setProperty("from", "from at domain.com");
+        conf.setProperty("replyTo", "replyTo at domain.com");
+        conf.setProperty("defaultLanguage", "en-UK");
+        SendIcal.initInstance(conf);
+
+        // Use persistence.xml configuration
+        emf = Persistence.createEntityManagerFactory("org.drools.task");
+
+        taskService = new TaskService(emf, SystemEventListenerFactory.getSystemEventListener());
+        taskSession = taskService.createSession();
+//        MockUserInfo userInfo = new MockUserInfo();
+//        taskService.setUserinfo(userInfo);
+        Map vars = new HashedMap();
+
+        Reader reader = null;
+
+        try {
+            reader = new InputStreamReader(BaseTest.class.getResourceAsStream("LoadUsers.mvel"));
+            users = (Map<String, User>) eval(reader, vars);
+            for (User user : users.values()) {
+                taskSession.addUser(user);
+            }
+        } finally {
+            if (reader != null) reader.close();
+            reader = null;
+        }
+
+        try {
+            reader = new InputStreamReader(BaseTest.class.getResourceAsStream("LoadGroups.mvel"));
+            groups = (Map<String, Group>) eval(reader,  vars);
+            for (Group group : groups.values()) {
+                taskSession.addGroup(group);
+            }
+        } finally {
+            if (reader != null) reader.close();
+        }
+    }
+
+    protected void tearDown() throws Exception {
+        taskSession.dispose();
+        emf.close();
+    }
+
+    public Object eval(Reader reader,
+                       Map vars) {
+        try {
+            return eval(toString(reader),
+                    vars);
+        } catch (IOException e) {
+            throw new RuntimeException("Exception Thrown",
+                    e);
+        }
+    }
+
+    public String toString(Reader reader) throws IOException {
+        StringBuilder sb = new StringBuilder(1024);
+        int charValue;
+
+        while ((charValue = reader.read()) != -1) {
+            sb.append((char) charValue);
+        }
+        return sb.toString();
+    }
+
+    public Object eval(String str, Map vars) {
+        ExpressionCompiler compiler = new ExpressionCompiler(str.trim());
+
+        ParserContext context = new ParserContext();
+        context.addPackageImport("org.drools.task");
+        context.addPackageImport("org.drools.task.service");
+        context.addPackageImport("org.drools.task.query");
+        context.addPackageImport("java.util");
+
+        vars.put("now", new Date());
+        return MVEL.executeExpression(compiler.compile(context), vars);
+    }
+}


Property changes on: labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/task/BaseTest.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/task/CommandBasedVSMWSHumanTaskHandlerTest.java
===================================================================
--- labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/task/CommandBasedVSMWSHumanTaskHandlerTest.java	                        (rev 0)
+++ labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/task/CommandBasedVSMWSHumanTaskHandlerTest.java	2009-12-21 23:06:00 UTC (rev 30792)
@@ -0,0 +1,817 @@
+package org.drools.task;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.mina.transport.socket.SocketAcceptor;
+import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
+import org.apache.mina.transport.socket.nio.NioSocketConnector;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseProvider;
+import org.drools.SystemEventListenerFactory;
+import org.drools.process.instance.impl.WorkItemImpl;
+import org.drools.runtime.process.WorkItem;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+import org.drools.task.query.TaskSummary;
+import org.drools.task.service.ContentData;
+import org.drools.task.service.HumanTaskServiceImpl;
+import org.drools.task.service.PermissionDeniedException;
+import org.drools.vsm.GenericConnector;
+import org.drools.vsm.GenericMessageHandlerImpl;
+import org.drools.vsm.HumanTaskServiceProvider;
+import org.drools.vsm.ServiceManagerData;
+import org.drools.vsm.mina.MinaAcceptor;
+import org.drools.vsm.mina.MinaConnector;
+import org.drools.vsm.mina.MinaIoHandler;
+import org.drools.vsm.remote.ServiceManagerRemoteClient;
+import org.drools.vsm.task.CommandBasedVSMWSHumanTaskHandler;
+import org.drools.vsm.task.TaskServerMessageHandlerImpl;
+import org.drools.vsm.task.responseHandlers.BlockingGetContentMessageResponseHandler;
+import org.drools.vsm.task.responseHandlers.BlockingGetTaskMessageResponseHandler;
+import org.drools.vsm.task.responseHandlers.BlockingTaskOperationMessageResponseHandler;
+import org.drools.vsm.task.responseHandlers.BlockingTaskSummaryMessageResponseHandler;
+
+public class CommandBasedVSMWSHumanTaskHandlerTest extends BaseTest {
+	
+    private static final int DEFAULT_WAIT_TIME = 5000;
+    private static final int MANAGER_COMPLETION_WAIT_TIME = DEFAULT_WAIT_TIME;
+    private static final int MANAGER_ABORT_WAIT_TIME = DEFAULT_WAIT_TIME;
+
+    private MinaAcceptor server;
+	private MinaAcceptor humanTaskServer;
+	private ServiceManagerRemoteClient client;
+	private CommandBasedVSMWSHumanTaskHandler handler;
+	private HumanTaskServiceImpl humanTaskClient;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        
+        SocketAddress address = new InetSocketAddress("127.0.0.1", 9123);
+        ServiceManagerData serverData = new ServiceManagerData();
+        // setup Server
+        SocketAcceptor acceptor = new NioSocketAcceptor();
+        acceptor.setHandler(new MinaIoHandler(SystemEventListenerFactory.getSystemEventListener(),
+								                new GenericMessageHandlerImpl(serverData,
+								                SystemEventListenerFactory.getSystemEventListener())));
+        this.server = new MinaAcceptor(acceptor, address);
+        this.server.start();
+        // End Execution Server
+
+        // Human task Server configuration
+        SocketAddress htAddress = new InetSocketAddress("127.0.0.1", 9124);
+        SocketAcceptor htAcceptor = new NioSocketAcceptor();
+
+        htAcceptor.setHandler(new MinaIoHandler(SystemEventListenerFactory.getSystemEventListener(),
+									            new TaskServerMessageHandlerImpl(taskService,
+									            SystemEventListenerFactory.getSystemEventListener())));
+        this.humanTaskServer = new MinaAcceptor(htAcceptor, htAddress);
+        this.humanTaskServer.start();
+
+        // End Human task Server configuration
+
+        // setup the ht client
+        NioSocketConnector htclientConnector = new NioSocketConnector();
+        htclientConnector.setHandler(new MinaIoHandler(SystemEventListenerFactory.getSystemEventListener()));
+        GenericConnector htMinaClient = new MinaConnector("client ht",
+                                                         htclientConnector,
+                                                         htAddress,
+                                                         SystemEventListenerFactory.getSystemEventListener() );
+
+         // setup the SM client
+        NioSocketConnector clientConnector = new NioSocketConnector();
+        clientConnector.setHandler(new MinaIoHandler(SystemEventListenerFactory.getSystemEventListener()));
+        GenericConnector minaClient = new MinaConnector("client SM",
+										                clientConnector,
+										                address,
+										                SystemEventListenerFactory.getSystemEventListener());
+
+        // Service Manager client, that contains a list of service beside the execution Server, in this case the HumanTaskService
+        List<GenericConnector> services = new ArrayList<GenericConnector>();
+        services.add(htMinaClient);
+        this.client = new ServiceManagerRemoteClient("client SM", minaClient, services);
+
+        ((ServiceManagerRemoteClient) client).connect();
+        
+        HumanTaskServiceProvider humanTaskServiceFactory = this.client.getHumanTaskService();
+    	this.humanTaskClient = (HumanTaskServiceImpl) humanTaskServiceFactory.newHumanTaskServiceClient();
+        
+    	KnowledgeBaseProvider kbaseFactory = this.client.getKnowledgeBaseFactory();
+    	KnowledgeBase kbase = kbaseFactory.newKnowledgeBase();
+    	
+    	this.handler = new CommandBasedVSMWSHumanTaskHandler(kbase.newStatefulKnowledgeSession());
+    }
+
+    protected void tearDown() throws Exception {
+    	this.handler.dispose();
+    	this.client.disconnect();
+    	this.server.stop();
+        super.tearDown();
+    }
+
+    public void testTask() throws Exception {
+        TestWorkItemManager manager = new TestWorkItemManager();
+        WorkItemImpl workItem = new WorkItemImpl();
+        workItem.setName("Human Task");
+        workItem.setParameter("TaskName", "TaskName");
+        workItem.setParameter("Comment", "Comment");
+        workItem.setParameter("Priority", "10");
+        workItem.setParameter("ActorId", "Darth Vader");
+        handler.executeWorkItem(workItem, manager);
+
+        Thread.sleep(500);
+
+        BlockingTaskSummaryMessageResponseHandler responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+        humanTaskClient.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+        List<TaskSummary> tasks = responseHandler.getResults();
+        assertEquals(1, tasks.size());
+        TaskSummary task = tasks.get(0);
+        assertEquals("TaskName", task.getName());
+        assertEquals(10, task.getPriority());
+        assertEquals("Comment", task.getDescription());
+        assertEquals(Status.Reserved, task.getStatus());
+        assertEquals("Darth Vader", task.getActualOwner().getId());
+
+        System.out.println("Starting task " + task.getId());
+        BlockingTaskOperationMessageResponseHandler operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+        humanTaskClient.start(task.getId(), "Darth Vader", operationResponseHandler);
+        operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        System.out.println("Started task " + task.getId());
+
+        System.out.println("Completing task " + task.getId());
+        operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+        humanTaskClient.complete(task.getId(), "Darth Vader", null, operationResponseHandler);
+        operationResponseHandler.waitTillDone(15000);
+        System.out.println("Completed task " + task.getId());
+
+        assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME));
+    }
+
+    public void testTaskMultipleActors() throws Exception {
+        TestWorkItemManager manager = new TestWorkItemManager();
+        WorkItemImpl workItem = new WorkItemImpl();
+        workItem.setName("Human Task");
+        workItem.setParameter("TaskName", "TaskName");
+        workItem.setParameter("Comment", "Comment");
+        workItem.setParameter("Priority", "10");
+        workItem.setParameter("ActorId", "Darth Vader, Dalai Lama");
+        handler.executeWorkItem(workItem, manager);
+
+        Thread.sleep(500);
+
+        BlockingTaskSummaryMessageResponseHandler responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+        humanTaskClient.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+        List<TaskSummary> tasks = responseHandler.getResults();
+        assertEquals(1, tasks.size());
+        TaskSummary task = tasks.get(0);
+        assertEquals("TaskName", task.getName());
+        assertEquals(10, task.getPriority());
+        assertEquals("Comment", task.getDescription());
+        assertEquals(Status.Ready, task.getStatus());
+
+        System.out.println("Claiming task " + task.getId());
+        BlockingTaskOperationMessageResponseHandler operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+        humanTaskClient.claim(task.getId(), "Darth Vader", operationResponseHandler);
+        operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        System.out.println("Claimed task " + task.getId());
+
+        System.out.println("Starting task " + task.getId());
+        operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+        humanTaskClient.start(task.getId(), "Darth Vader", operationResponseHandler);
+        operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        System.out.println("Started task " + task.getId());
+
+        System.out.println("Completing task " + task.getId());
+        operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+        humanTaskClient.complete(task.getId(), "Darth Vader", null, operationResponseHandler);
+        operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        System.out.println("Completed task " + task.getId());
+
+        assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME));
+    }
+
+    public void testTaskGroupActors() throws Exception {
+        TestWorkItemManager manager = new TestWorkItemManager();
+        WorkItemImpl workItem = new WorkItemImpl();
+        workItem.setName("Human Task");
+        workItem.setParameter("TaskName", "TaskName");
+        workItem.setParameter("Comment", "Comment");
+        workItem.setParameter("Priority", "10");
+        workItem.setParameter("GroupId", "Crusaders");
+        handler.executeWorkItem(workItem, manager);
+
+        Thread.sleep(500);
+
+        BlockingTaskSummaryMessageResponseHandler responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+        List<String> groupIds = new ArrayList<String>();
+        groupIds.add("Crusaders");
+        humanTaskClient.getTasksAssignedAsPotentialOwner(null, groupIds, "en-UK", responseHandler);
+        List<TaskSummary> tasks = responseHandler.getResults();
+        assertEquals(1, tasks.size());
+        TaskSummary taskSummary = tasks.get(0);
+        assertEquals("TaskName", taskSummary.getName());
+        assertEquals(10, taskSummary.getPriority());
+        assertEquals("Comment", taskSummary.getDescription());
+        assertEquals(Status.Ready, taskSummary.getStatus());
+
+        System.out.println("Claiming task " + taskSummary.getId());
+        BlockingTaskOperationMessageResponseHandler operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+        humanTaskClient.claim(taskSummary.getId(), "Darth Vader", operationResponseHandler);
+        PermissionDeniedException denied = null;
+        try {
+            operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        } catch (PermissionDeniedException e) {
+            denied = e;
+        }
+
+        assertNotNull("Should get permissed denied exception", denied);
+        System.out.println("Claimed task " + taskSummary.getId());
+
+        //Check if the parent task is InProgress
+        BlockingGetTaskMessageResponseHandler getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+        humanTaskClient.getTask(taskSummary.getId(), getTaskResponseHandler);
+        Task task = getTaskResponseHandler.getTask();
+        assertEquals(Status.Ready, task.getTaskData().getStatus());
+    }
+
+    public void testTaskSingleAndGroupActors() throws Exception {
+        TestWorkItemManager manager = new TestWorkItemManager();
+        WorkItemImpl workItem = new WorkItemImpl();
+        workItem.setName("Human Task One");
+        workItem.setParameter("TaskName", "TaskNameOne");
+        workItem.setParameter("Comment", "Comment");
+        workItem.setParameter("Priority", "10");
+        workItem.setParameter("GroupId", "Crusaders");
+        handler.executeWorkItem(workItem, manager);
+
+        Thread.sleep(500);
+
+        workItem = new WorkItemImpl();
+        workItem.setName("Human Task Two");
+        workItem.setParameter("TaskName", "TaskNameTwo");
+        workItem.setParameter("Comment", "Comment");
+        workItem.setParameter("Priority", "10");
+        workItem.setParameter("ActorId", "Darth Vader");
+        handler.executeWorkItem(workItem, manager);
+
+        Thread.sleep(500);
+
+        BlockingTaskSummaryMessageResponseHandler responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+        List<String> groupIds = new ArrayList<String>();
+        groupIds.add("Crusaders");
+        humanTaskClient.getTasksAssignedAsPotentialOwner("Darth Vader", groupIds, "en-UK", responseHandler);
+        List<TaskSummary> tasks = responseHandler.getResults();
+        assertEquals(2, tasks.size());
+    }
+
+    public void testTaskFail() throws Exception {
+        TestWorkItemManager manager = new TestWorkItemManager();
+        WorkItemImpl workItem = new WorkItemImpl();
+        workItem.setName("Human Task");
+        workItem.setParameter("TaskName", "TaskName");
+        workItem.setParameter("Comment", "Comment");
+        workItem.setParameter("Priority", "10");
+        workItem.setParameter("ActorId", "Darth Vader");
+        handler.executeWorkItem(workItem, manager);
+
+        Thread.sleep(500);
+
+        BlockingTaskSummaryMessageResponseHandler responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+        humanTaskClient.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+        List<TaskSummary> tasks = responseHandler.getResults();
+        assertEquals(1, tasks.size());
+        TaskSummary task = tasks.get(0);
+        assertEquals("TaskName", task.getName());
+        assertEquals(10, task.getPriority());
+        assertEquals("Comment", task.getDescription());
+        assertEquals(Status.Reserved, task.getStatus());
+        assertEquals("Darth Vader", task.getActualOwner().getId());
+
+        System.out.println("Starting task " + task.getId());
+        BlockingTaskOperationMessageResponseHandler operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+        humanTaskClient.start(task.getId(), "Darth Vader", operationResponseHandler);
+        operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        System.out.println("Started task " + task.getId());
+
+        System.out.println("Failing task " + task.getId());
+        operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+        humanTaskClient.fail(task.getId(), "Darth Vader", null, operationResponseHandler);
+        operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        System.out.println("Failed task " + task.getId());
+
+        assertTrue(manager.waitTillAborted(MANAGER_ABORT_WAIT_TIME));
+    }
+
+    public void testTaskSkip() throws Exception {
+        TestWorkItemManager manager = new TestWorkItemManager();
+        WorkItemImpl workItem = new WorkItemImpl();
+        workItem.setName("Human Task");
+        workItem.setParameter("TaskName", "TaskName");
+        workItem.setParameter("Comment", "Comment");
+        workItem.setParameter("Priority", "10");
+        workItem.setParameter("ActorId", "Darth Vader");
+        handler.executeWorkItem(workItem, manager);
+
+        Thread.sleep(500);
+
+        BlockingTaskSummaryMessageResponseHandler responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+        humanTaskClient.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+        List<TaskSummary> tasks = responseHandler.getResults();
+        assertEquals(1, tasks.size());
+        TaskSummary task = tasks.get(0);
+        assertEquals("TaskName", task.getName());
+        assertEquals(10, task.getPriority());
+        assertEquals("Comment", task.getDescription());
+        assertEquals(Status.Reserved, task.getStatus());
+        assertEquals("Darth Vader", task.getActualOwner().getId());
+
+        System.out.println("Skipping task " + task.getId());
+        BlockingTaskOperationMessageResponseHandler operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+        humanTaskClient.skip(task.getId(), "Darth Vader", operationResponseHandler);
+        operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        System.out.println("Skipped task " + task.getId());
+
+        assertTrue(manager.waitTillAborted(MANAGER_ABORT_WAIT_TIME));
+    }
+
+    public void testTaskAbortSkippable() throws Exception {
+        TestWorkItemManager manager = new TestWorkItemManager();
+        WorkItemImpl workItem = new WorkItemImpl();
+        workItem.setName("Human Task");
+        workItem.setParameter("TaskName", "TaskName");
+        workItem.setParameter("Comment", "Comment");
+        workItem.setParameter("Priority", "10");
+        workItem.setParameter("ActorId", "Darth Vader");
+        handler.executeWorkItem(workItem, manager);
+
+        Thread.sleep(500);
+
+        handler.abortWorkItem(workItem, manager);
+
+        Thread.sleep(500);
+
+        BlockingTaskSummaryMessageResponseHandler responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+        humanTaskClient.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+        List<TaskSummary> tasks = responseHandler.getResults();
+        assertEquals(0, tasks.size());
+    }
+
+    public void testTaskAbortNotSkippable() throws Exception {
+        TestWorkItemManager manager = new TestWorkItemManager();
+        WorkItemImpl workItem = new WorkItemImpl();
+        workItem.setName("Human Task");
+        workItem.setParameter("TaskName", "TaskName");
+        workItem.setParameter("Comment", "Comment");
+        workItem.setParameter("Priority", "10");
+        workItem.setParameter("ActorId", "Darth Vader");
+        workItem.setParameter("Skippable", "false");
+        handler.executeWorkItem(workItem, manager);
+
+        Thread.sleep(500);
+
+        BlockingTaskSummaryMessageResponseHandler responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+        humanTaskClient.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+        List<TaskSummary> tasks = responseHandler.getResults();
+        assertEquals(1, tasks.size());
+
+        handler.abortWorkItem(workItem, manager);
+
+        Thread.sleep(500);
+
+        responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+        humanTaskClient.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+        tasks = responseHandler.getResults();
+        assertEquals(1, tasks.size());
+    }
+
+    public void testTaskData() throws Exception {
+        TestWorkItemManager manager = new TestWorkItemManager();
+        WorkItemImpl workItem = new WorkItemImpl();
+        workItem.setName("Human Task");
+        workItem.setParameter("TaskName", "TaskName");
+        workItem.setParameter("Comment", "Comment");
+        workItem.setParameter("Priority", "10");
+        workItem.setParameter("ActorId", "Darth Vader");
+        workItem.setParameter("Content", "This is the content");
+        handler.executeWorkItem(workItem, manager);
+
+        Thread.sleep(500);
+
+        BlockingTaskSummaryMessageResponseHandler responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+        humanTaskClient.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+        List<TaskSummary> tasks = responseHandler.getResults();
+        assertEquals(1, tasks.size());
+        TaskSummary taskSummary = tasks.get(0);
+        assertEquals("TaskName", taskSummary.getName());
+        assertEquals(10, taskSummary.getPriority());
+        assertEquals("Comment", taskSummary.getDescription());
+        assertEquals(Status.Reserved, taskSummary.getStatus());
+        assertEquals("Darth Vader", taskSummary.getActualOwner().getId());
+
+        BlockingGetTaskMessageResponseHandler getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+        humanTaskClient.getTask(taskSummary.getId(), getTaskResponseHandler);
+        Task task = getTaskResponseHandler.getTask();
+        assertEquals(AccessType.Inline, task.getTaskData().getDocumentAccessType());
+        long contentId = task.getTaskData().getDocumentContentId();
+        assertTrue(contentId != -1);
+        BlockingGetContentMessageResponseHandler getContentResponseHandler = new BlockingGetContentMessageResponseHandler();
+        humanTaskClient.getContent(contentId, getContentResponseHandler);
+        ByteArrayInputStream bis = new ByteArrayInputStream(getContentResponseHandler.getContent().getContent());
+        ObjectInputStream in = new ObjectInputStream(bis);
+        Object data = in.readObject();
+        in.close();
+        assertEquals("This is the content", data);
+
+        System.out.println("Starting task " + task.getId());
+        BlockingTaskOperationMessageResponseHandler operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+        humanTaskClient.start(task.getId(), "Darth Vader", operationResponseHandler);
+        operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        System.out.println("Started task " + task.getId());
+
+        System.out.println("Completing task " + task.getId());
+        operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+        ContentData result = new ContentData();
+        result.setAccessType(AccessType.Inline);
+        result.setType("java.lang.String");
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        ObjectOutputStream out = new ObjectOutputStream(bos);
+        out.writeObject("This is the result");
+        out.close();
+        result.setContent(bos.toByteArray());
+        humanTaskClient.complete(task.getId(), "Darth Vader", result, operationResponseHandler);
+        operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        System.out.println("Completed task " + task.getId());
+
+        assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME));
+        Map<String, Object> results = manager.getResults();
+        assertNotNull(results);
+        assertEquals("Darth Vader", results.get("ActorId"));
+        assertEquals("This is the result", results.get("Result"));
+    }
+
+    public void testOnAllSubTasksEndParentEndStrategy() throws Exception {
+
+        TestWorkItemManager manager = new TestWorkItemManager();
+        //Create the parent task
+        WorkItemImpl workItem = new WorkItemImpl();
+        workItem.setName("Human Task");
+        workItem.setParameter("TaskName", "TaskNameParent");
+        workItem.setParameter("Comment", "CommentParent");
+        workItem.setParameter("Priority", "10");
+        workItem.setParameter("ActorId", "Darth Vader");
+        //Set the subtask policy
+        workItem.setParameter("SubTaskStrategies", "OnAllSubTasksEndParentEnd");
+        handler.executeWorkItem(workItem, manager);
+
+
+        Thread.sleep(500);
+
+        //Test if the task is succesfully created
+        BlockingTaskSummaryMessageResponseHandler responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+        humanTaskClient.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+        List<TaskSummary> tasks = responseHandler.getResults();
+        assertEquals(1, tasks.size());
+        TaskSummary task = tasks.get(0);
+        assertEquals("TaskNameParent", task.getName());
+        assertEquals(10, task.getPriority());
+        assertEquals("CommentParent", task.getDescription());
+        assertEquals(Status.Reserved, task.getStatus());
+        assertEquals("Darth Vader", task.getActualOwner().getId());
+
+        //Create the child task
+        workItem = new WorkItemImpl();
+        workItem.setName("Human Task");
+        workItem.setParameter("TaskName", "TaskNameChild1");
+        workItem.setParameter("Comment", "CommentChild1");
+        workItem.setParameter("Priority", "10");
+        workItem.setParameter("ActorId", "Darth Vader");
+        workItem.setParameter("ParentId", task.getId());
+        handler.executeWorkItem(workItem, manager);
+
+        Thread.sleep(500);
+
+        //Create the child task2
+        workItem = new WorkItemImpl();
+        workItem.setName("Human Task2");
+        workItem.setParameter("TaskName", "TaskNameChild2");
+        workItem.setParameter("Comment", "CommentChild2");
+        workItem.setParameter("Priority", "10");
+        workItem.setParameter("ActorId", "Darth Vader");
+        workItem.setParameter("ParentId", task.getId());
+        handler.executeWorkItem(workItem, manager);
+
+        Thread.sleep(500);
+
+        //Start the parent task
+        System.out.println("Starting task " + task.getId());
+        BlockingTaskOperationMessageResponseHandler operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+        humanTaskClient.start(task.getId(), "Darth Vader", operationResponseHandler);
+        operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        System.out.println("Started task " + task.getId());
+
+        //Check if the parent task is InProgress
+        BlockingGetTaskMessageResponseHandler getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+        humanTaskClient.getTask(task.getId(), getTaskResponseHandler);
+        Task parentTask = getTaskResponseHandler.getTask();
+        assertEquals(Status.InProgress, parentTask.getTaskData().getStatus());
+        assertEquals(users.get("darth"), parentTask.getTaskData().getActualOwner());
+
+        //Get all the subtask created for the parent task based on the potential owner
+        responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+        humanTaskClient.getSubTasksAssignedAsPotentialOwner(parentTask.getId(), "Darth Vader", "en-UK", responseHandler);
+        List<TaskSummary> subTasks = responseHandler.getResults();
+        assertEquals(2, subTasks.size());
+        TaskSummary subTaskSummary1 = subTasks.get(0);
+        TaskSummary subTaskSummary2 = subTasks.get(1);
+        assertNotNull(subTaskSummary1);
+        assertNotNull(subTaskSummary2);
+
+        //Starting the sub task 1
+        System.out.println("Starting sub task " + subTaskSummary1.getId());
+        operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+        humanTaskClient.start(subTaskSummary1.getId(), "Darth Vader", operationResponseHandler);
+        operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        System.out.println("Started sub task " + subTaskSummary1.getId());
+
+        //Starting the sub task 2
+        System.out.println("Starting sub task " + subTaskSummary2.getId());
+        operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+        humanTaskClient.start(subTaskSummary2.getId(), "Darth Vader", operationResponseHandler);
+        operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        System.out.println("Started sub task " + subTaskSummary2.getId());
+
+        //Check if the child task 1 is InProgress
+        getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+        humanTaskClient.getTask(subTaskSummary1.getId(), getTaskResponseHandler);
+        Task subTask1 = getTaskResponseHandler.getTask();
+        assertEquals(Status.InProgress, subTask1.getTaskData().getStatus());
+        assertEquals(users.get("darth"), subTask1.getTaskData().getActualOwner());
+
+        //Check if the child task 2 is InProgress
+        getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+        humanTaskClient.getTask(subTaskSummary2.getId(), getTaskResponseHandler);
+        Task subTask2 = getTaskResponseHandler.getTask();
+        assertEquals(Status.InProgress, subTask2.getTaskData().getStatus());
+        assertEquals(users.get("darth"), subTask2.getTaskData().getActualOwner());
+
+        // Complete the child task 1
+        System.out.println("Completing sub task " + subTask1.getId());
+        operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+        humanTaskClient.complete(subTask1.getId(), "Darth Vader", null, operationResponseHandler);
+        operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        System.out.println("Completed sub task " + subTask1.getId());
+
+        // Complete the child task 2
+        System.out.println("Completing sub task " + subTask2.getId());
+        operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+        humanTaskClient.complete(subTask2.getId(), "Darth Vader", null, operationResponseHandler);
+        operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        System.out.println("Completed sub task " + subTask2.getId());
+
+        //Check if the child task 1 is Completed
+
+        getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+        humanTaskClient.getTask(subTask1.getId(), getTaskResponseHandler);
+        subTask1 = getTaskResponseHandler.getTask();
+        assertEquals(Status.Completed, subTask1.getTaskData().getStatus());
+        assertEquals(users.get("darth"), subTask1.getTaskData().getActualOwner());
+
+        //Check if the child task 2 is Completed
+
+        getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+        humanTaskClient.getTask(subTask2.getId(), getTaskResponseHandler);
+        subTask2 = getTaskResponseHandler.getTask();
+        assertEquals(Status.Completed, subTask2.getTaskData().getStatus());
+        assertEquals(users.get("darth"), subTask2.getTaskData().getActualOwner());
+
+        // Check is the parent task is Complete
+        getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+        humanTaskClient.getTask(parentTask.getId(), getTaskResponseHandler);
+        parentTask = getTaskResponseHandler.getTask();
+        assertEquals(Status.Completed, parentTask.getTaskData().getStatus());
+        assertEquals(users.get("darth"), parentTask.getTaskData().getActualOwner());
+
+        assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME));
+    }
+
+    public void testOnParentAbortAllSubTasksEndStrategy() throws Exception {
+
+        TestWorkItemManager manager = new TestWorkItemManager();
+        //Create the parent task
+        WorkItemImpl workItem = new WorkItemImpl();
+        workItem.setName("Human Task");
+        workItem.setParameter("TaskName", "TaskNameParent");
+        workItem.setParameter("Comment", "CommentParent");
+        workItem.setParameter("Priority", "10");
+        workItem.setParameter("ActorId", "Darth Vader");
+        //Set the subtask policy
+        workItem.setParameter("SubTaskStrategies", "OnParentAbortAllSubTasksEnd");
+        handler.executeWorkItem(workItem, manager);
+
+
+        Thread.sleep(500);
+
+        //Test if the task is succesfully created
+        BlockingTaskSummaryMessageResponseHandler responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+        humanTaskClient.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+        List<TaskSummary> tasks = responseHandler.getResults();
+        assertEquals(1, tasks.size());
+        TaskSummary task = tasks.get(0);
+        assertEquals("TaskNameParent", task.getName());
+        assertEquals(10, task.getPriority());
+        assertEquals("CommentParent", task.getDescription());
+        assertEquals(Status.Reserved, task.getStatus());
+        assertEquals("Darth Vader", task.getActualOwner().getId());
+
+        //Create the child task
+        workItem = new WorkItemImpl();
+        workItem.setName("Human Task");
+        workItem.setParameter("TaskName", "TaskNameChild1");
+        workItem.setParameter("Comment", "CommentChild1");
+        workItem.setParameter("Priority", "10");
+        workItem.setParameter("ActorId", "Darth Vader");
+        workItem.setParameter("ParentId", task.getId());
+        handler.executeWorkItem(workItem, manager);
+
+        Thread.sleep(500);
+
+        //Create the child task2
+        workItem = new WorkItemImpl();
+        workItem.setName("Human Task2");
+        workItem.setParameter("TaskName", "TaskNameChild2");
+        workItem.setParameter("Comment", "CommentChild2");
+        workItem.setParameter("Priority", "10");
+        workItem.setParameter("ActorId", "Darth Vader");
+        workItem.setParameter("ParentId", task.getId());
+        handler.executeWorkItem(workItem, manager);
+
+        Thread.sleep(500);
+
+        //Start the parent task
+        System.out.println("Starting task " + task.getId());
+        BlockingTaskOperationMessageResponseHandler operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+        humanTaskClient.start(task.getId(), "Darth Vader", operationResponseHandler);
+        operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        System.out.println("Started task " + task.getId());
+
+        //Check if the parent task is InProgress
+        BlockingGetTaskMessageResponseHandler getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+        humanTaskClient.getTask(task.getId(), getTaskResponseHandler);
+        Task parentTask = getTaskResponseHandler.getTask();
+        assertEquals(Status.InProgress, parentTask.getTaskData().getStatus());
+        assertEquals(users.get("darth"), parentTask.getTaskData().getActualOwner());
+
+        //Get all the subtask created for the parent task based on the potential owner
+        responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+        humanTaskClient.getSubTasksAssignedAsPotentialOwner(parentTask.getId(), "Darth Vader", "en-UK", responseHandler);
+        List<TaskSummary> subTasks = responseHandler.getResults();
+        assertEquals(2, subTasks.size());
+        TaskSummary subTaskSummary1 = subTasks.get(0);
+        TaskSummary subTaskSummary2 = subTasks.get(1);
+        assertNotNull(subTaskSummary1);
+        assertNotNull(subTaskSummary2);
+
+        //Starting the sub task 1
+        System.out.println("Starting sub task " + subTaskSummary1.getId());
+        operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+        humanTaskClient.start(subTaskSummary1.getId(), "Darth Vader", operationResponseHandler);
+        operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        System.out.println("Started sub task " + subTaskSummary1.getId());
+
+        //Starting the sub task 2
+        System.out.println("Starting sub task " + subTaskSummary2.getId());
+        operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+        humanTaskClient.start(subTaskSummary2.getId(), "Darth Vader", operationResponseHandler);
+        operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        System.out.println("Started sub task " + subTaskSummary2.getId());
+
+        //Check if the child task 1 is InProgress
+        getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+        humanTaskClient.getTask(subTaskSummary1.getId(), getTaskResponseHandler);
+        Task subTask1 = getTaskResponseHandler.getTask();
+        assertEquals(Status.InProgress, subTask1.getTaskData().getStatus());
+        assertEquals(users.get("darth"), subTask1.getTaskData().getActualOwner());
+
+        //Check if the child task 2 is InProgress
+        getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+        humanTaskClient.getTask(subTaskSummary2.getId(), getTaskResponseHandler);
+        Task subTask2 = getTaskResponseHandler.getTask();
+        assertEquals(Status.InProgress, subTask2.getTaskData().getStatus());
+        assertEquals(users.get("darth"), subTask2.getTaskData().getActualOwner());
+
+        // Complete the parent task
+        System.out.println("Completing parent task " + parentTask.getId());
+        operationResponseHandler = new BlockingTaskOperationMessageResponseHandler();
+        humanTaskClient.skip(parentTask.getId(), "Darth Vader", operationResponseHandler);
+        operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        System.out.println("Completed parent task " + parentTask.getId());
+
+        //Check if the child task 1 is Completed
+        getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+        humanTaskClient.getTask(subTaskSummary1.getId(), getTaskResponseHandler);
+        subTask1 = getTaskResponseHandler.getTask();
+        assertEquals(Status.Completed, subTask1.getTaskData().getStatus());
+        assertEquals(users.get("darth"), subTask1.getTaskData().getActualOwner());
+
+        //Check if the child task 2 is Completed
+        getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+        humanTaskClient.getTask(subTaskSummary2.getId(), getTaskResponseHandler);
+        subTask2 = getTaskResponseHandler.getTask();
+        assertEquals(Status.Completed, subTask2.getTaskData().getStatus());
+        assertEquals(users.get("darth"), subTask2.getTaskData().getActualOwner());
+
+        assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME));
+    }
+
+    private class TestWorkItemManager implements WorkItemManager {
+
+        private volatile boolean completed;
+        private volatile boolean aborted;
+        private volatile Map<String, Object> results;
+
+        public synchronized boolean waitTillCompleted(long time) {
+            if (!isCompleted()) {
+                try {
+                    wait(time);
+                } catch (InterruptedException e) {
+                    // swallow and return state of completed
+                }
+            }
+
+            return isCompleted();
+        }
+
+        public synchronized boolean waitTillAborted(long time) {
+            if (!isAborted()) {
+                try {
+                    wait(time);
+                } catch (InterruptedException e) {
+                    // swallow and return state of aborted
+                }
+            }
+
+            return isAborted();
+        }
+
+        public void abortWorkItem(long id) {
+            setAborted(true);
+        }
+
+        public synchronized boolean isAborted() {
+            return aborted;
+        }
+
+        private synchronized void setAborted(boolean aborted) {
+            this.aborted = aborted;
+            notifyAll();
+        }
+
+        public void completeWorkItem(long id, Map<String, Object> results) {
+            this.results = results;
+            setCompleted(true);
+        }
+
+        private synchronized void setCompleted(boolean completed) {
+            this.completed = completed;
+            notifyAll();
+        }
+
+        public synchronized boolean isCompleted() {
+            return completed;
+        }
+
+        public WorkItem getWorkItem(long id) {
+            return null;
+        }
+
+        public Set<WorkItem> getWorkItems() {
+            return null;
+        }
+
+        public Map<String, Object> getResults() {
+            return results;
+        }
+
+        public void internalAbortWorkItem(long id) {
+        }
+
+        public void internalAddWorkItem(WorkItem workItem) {
+        }
+
+        public void internalExecuteWorkItem(WorkItem workItem) {
+        }
+
+        public void registerWorkItemHandler(String workItemName, WorkItemHandler handler) {
+        }
+
+    }
+}


Property changes on: labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/task/CommandBasedVSMWSHumanTaskHandlerTest.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/vsm/ServiceManagerHumanTaskMinaRemoteTest.java
===================================================================
--- labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/vsm/ServiceManagerHumanTaskMinaRemoteTest.java	2009-12-21 22:02:36 UTC (rev 30791)
+++ labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/vsm/ServiceManagerHumanTaskMinaRemoteTest.java	2009-12-21 23:06:00 UTC (rev 30792)
@@ -102,7 +102,6 @@
         // End Human task Server configuration
 
         // setup the ht client
-        //@TODO: using the systemEventListener in two MinaIoHandler can cause problems??
         NioSocketConnector htclientConnector = new NioSocketConnector();
         htclientConnector.setHandler(new MinaIoHandler(SystemEventListenerFactory.getSystemEventListener()));
         GenericConnector htMinaClient = new MinaConnector( "client ht",

Modified: labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/vsm/ServiceManagerTestBase.java
===================================================================
--- labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/vsm/ServiceManagerTestBase.java	2009-12-21 22:02:36 UTC (rev 30791)
+++ labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/vsm/ServiceManagerTestBase.java	2009-12-21 23:06:00 UTC (rev 30792)
@@ -23,9 +23,11 @@
 
 public class ServiceManagerTestBase extends TestCase {
 
+	private static final int DEFAULT_WAIT_TIME = 5000;
+	
     protected ServiceManager client;
-	private ProcessInstance processInstance;
 	private HumanTaskService htClient;
+	private ProcessInstance processInstance;
 
     public void testFireAllRules() throws Exception {
         String str = "";
@@ -211,16 +213,14 @@
     	
     	Thread.sleep(1000);
 
-    	int fired = ksession.fireAllRules();
-    	//assertEquals( 2, fired );
+    	ksession.fireAllRules();
 
-    	System.out.println("========================FIRST=TASK========================================");
+    	System.out.println("First Task Execution");
     	assertEquals(true , executeNextTask("lucaz"));
-    	System.out.println("FIRST TASK DONE - SLEEPING");
     	Thread.sleep(8000);
-    	System.out.println("=======================SECOND=TASK========================================");
+    	System.out.println("Second Task Execution");
     	assertEquals(true , executeNextTask("lucaz"));
-    	System.out.println("==========================================================================");
+    	System.out.println("Inexistent Task Execution");
     	Thread.sleep(8000);
     	assertEquals(false, executeNextTask("lucaz"));
     	
@@ -230,8 +230,7 @@
 
     	BlockingTaskSummaryMessageResponseHandler responseHandler = new BlockingTaskSummaryMessageResponseHandler();
     	((HumanTaskServiceImpl)htClient).getTasksAssignedAsPotentialOwner(user, "en-UK", responseHandler);
-    	responseHandler.waitTillDone(5000);
-    	System.out.println("TASK COUNT: " + responseHandler.getResults().size());
+    	responseHandler.waitTillDone(DEFAULT_WAIT_TIME);
 
     	if (responseHandler.getResults().size()==0)
     		return false;
@@ -242,14 +241,14 @@
 
     	BlockingTaskOperationMessageResponseHandler startResponseHandler = new BlockingTaskOperationMessageResponseHandler();
     	((HumanTaskServiceImpl)htClient).start(task.getId(), user, startResponseHandler );
-    	startResponseHandler.waitTillDone(5000);
+    	startResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
     	
-    	System.out.println("Task started");
+    	System.out.println("Started Task " + task.getId());
     	
     	BlockingTaskOperationMessageResponseHandler completeResponseHandler = new BlockingTaskOperationMessageResponseHandler();
     	((HumanTaskServiceImpl)htClient).complete(task.getId(), user, null , completeResponseHandler);
-    	completeResponseHandler.waitTillDone(5000);
-    	System.out.println("Task completed");
+    	completeResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+    	System.out.println("Completed Task " + task.getId());
     	
     	return true;
     }



More information about the jboss-svn-commits mailing list