[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