[jboss-svn-commits] JBL Code SVN: r32063 - in labs/jbossrules/branches/salaboy_ServiceAPIs: drools-services-task and 21 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Mar 12 14:53:39 EST 2010


Author: salaboy21
Date: 2010-03-12 14:53:36 -0500 (Fri, 12 Mar 2010)
New Revision: 32063

Added:
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/pom.xml
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/CommandBasedServicesWSHumanTaskHandler.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/GenericEventTransport.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/HumanTaskFactoryService.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/HumanTaskService.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/HumanTaskServiceImpl.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/HumanTaskServiceProviderRemoteClient.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/TaskClientMessageHandlerImpl.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/TaskServerMessageHandlerImpl.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/eventmessaging/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/eventmessaging/EventMessageResponseHandler.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingAddAttachmentMessageResponseHandler.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingAddCommentMessageResponseHandler.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingAddTaskMessageResponseHandler.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingDeleteAttachmentMessageResponseHandler.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingDeleteCommentMessageResponseHandler.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingEventMessageResponseHandler.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingGetContentMessageResponseHandler.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingGetTaskMessageResponseHandler.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingSetContentMessageResponseHandler.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingTaskOperationMessageResponseHandler.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingTaskSummaryMessageResponseHandler.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/resources/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/java/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/java/org/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/java/org/drools/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/java/org/drools/services/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/java/org/drools/services/task/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/java/org/drools/services/task/BaseTaskServiceTest.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/java/org/drools/services/task/CommandBasedServicesWSHumanTaskHandlerTest.java
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/META-INF/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/META-INF/drools.email.conf
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/META-INF/orm.xml
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/META-INF/persistence.xml
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/FullyPopulatedTask.mvel
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/LoadGroups.mvel
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/LoadUsers.mvel
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/QueryData_UnescalatedDeadlines.mvel
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/service/
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/service/DeadlineWithNotification.mvel
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/service/DeadlineWithReassignment.mvel
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/service/QueryData_TasksOwned.mvel
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/service/QueryResults_PeopleAssignmentQuerries.mvel
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/service/QueryResults_TasksOwnedInEnglish.mvel
   labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/service/QueryResults_TasksOwnedInGerman.mvel
Log:
JBRULES-2446: Drools Services API
	- drools-services-task initial commit of the task module, a little more refactoring needed


Property changes on: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task
___________________________________________________________________
Name: svn:ignore
   + target


Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/pom.xml
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/pom.xml	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/pom.xml	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>drools</artifactId>
+        <groupId>org.drools</groupId>
+        <version>5.1.0.SNAPSHOT</version>
+    </parent>
+    <groupId>org.drools</groupId>
+    <artifactId>drools-services-task</artifactId>
+    <version>5.1.0.SNAPSHOT</version>
+    <url>http://maven.apache.org</url>
+    <name>Drools :: Services :: Task</name>
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.6</version>
+            <scope>test</scope>
+        </dependency>
+        <!-- Drools Runtime -->
+        <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-api</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-core</artifactId>
+        </dependency>
+
+        <!-- Apache Mina for default Service Remote Implementation -->
+        <dependency>
+            <groupId>org.apache.mina</groupId>
+            <artifactId>mina-core</artifactId>
+            <version>2.0.0-M6</version>
+        </dependency>
+        
+        <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-process-task</artifactId>
+
+            
+        </dependency>
+        <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-services</artifactId>
+            <version>5.1.0.SNAPSHOT</version>
+            
+        </dependency>
+
+
+         <!-- DB H2 -->
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+            <version>1.2.128</version>
+        </dependency>
+    </dependencies>
+    
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>2.0.2</version>
+                <configuration>
+                    <source>1.6</source>
+                    <target>1.6</target>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/CommandBasedServicesWSHumanTaskHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/CommandBasedServicesWSHumanTaskHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/CommandBasedServicesWSHumanTaskHandler.java	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,375 @@
+package org.drools.services.task;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.mina.transport.socket.nio.NioSocketConnector;
+import org.drools.SystemEventListenerFactory;
+import org.drools.eventmessaging.EventKey;
+import org.drools.eventmessaging.Payload;
+import org.drools.runtime.KnowledgeRuntime;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.process.WorkItem;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+import org.drools.services.generic.GenericConnector;
+import org.drools.services.generic.Message;
+import org.drools.services.remote.mina.MinaConnector;
+import org.drools.services.remote.mina.MinaIoHandler;
+import org.drools.task.AccessType;
+import org.drools.task.Content;
+import org.drools.task.Group;
+import org.drools.task.I18NText;
+import org.drools.task.OrganizationalEntity;
+import org.drools.task.PeopleAssignments;
+import org.drools.task.SubTasksStrategy;
+import org.drools.task.SubTasksStrategyFactory;
+import org.drools.task.Task;
+import org.drools.task.TaskData;
+import org.drools.task.User;
+import org.drools.task.event.TaskCompletedEvent;
+import org.drools.task.event.TaskEvent;
+import org.drools.task.event.TaskEventKey;
+import org.drools.task.event.TaskFailedEvent;
+import org.drools.task.event.TaskSkippedEvent;
+import org.drools.task.service.Command;
+import org.drools.task.service.ContentData;
+import org.drools.task.service.responsehandlers.AbstractBaseResponseHandler;
+
+import org.drools.services.task.TaskClientMessageHandlerImpl.AddTaskMessageResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.GetContentMessageResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.GetTaskMessageResponseHandler;
+import org.drools.services.task.eventmessaging.EventMessageResponseHandler;
+
+/**
+ * @author salaboy
+ * @author Lucas Amador
+ *
+ */
+
+public class CommandBasedServicesWSHumanTaskHandler implements WorkItemHandler {
+
+    private String ipAddress = "127.0.0.1";
+    private int port = 9124;
+    private SocketAddress address;
+    private GenericConnector connector;
+    private HumanTaskServiceImpl client;
+    private KnowledgeRuntime session;
+    private Map<Long, Long> idMapping = new HashMap<Long, Long>();
+    private Map<Long, WorkItemManager> managers = new HashMap<Long, WorkItemManager>();
+
+    public CommandBasedServicesWSHumanTaskHandler(KnowledgeRuntime session) {
+        this.session = session;
+        this.address = new InetSocketAddress(ipAddress, port);
+    }
+
+    public void connect() {
+        if (connector == null) {
+            NioSocketConnector htclientConnector = new NioSocketConnector();
+            htclientConnector.setHandler(new MinaIoHandler(SystemEventListenerFactory.getSystemEventListener()));
+            connector = new MinaConnector("client ht",
+                    htclientConnector,
+                    this.address,
+                    SystemEventListenerFactory.getSystemEventListener());
+            boolean connected = connector.connect();
+            if (!connected) {
+                throw new IllegalArgumentException("Could not connect task client");
+            }
+            int id = ((StatefulKnowledgeSession) session).getId();
+            client = new HumanTaskServiceImpl(connector, id);
+        }
+    }
+
+    public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+        connect();
+        Task task = new Task();
+        String taskName = (String) workItem.getParameter("TaskName");
+        if (taskName != null) {
+            List<I18NText> names = new ArrayList<I18NText>();
+            names.add(new I18NText("en-UK", taskName));
+            task.setNames(names);
+        }
+        String comment = (String) workItem.getParameter("Comment");
+        if (comment != null) {
+            List<I18NText> descriptions = new ArrayList<I18NText>();
+            descriptions.add(new I18NText("en-UK", comment));
+            task.setDescriptions(descriptions);
+            List<I18NText> subjects = new ArrayList<I18NText>();
+            subjects.add(new I18NText("en-UK", comment));
+            task.setSubjects(subjects);
+        }
+        String priorityString = (String) workItem.getParameter("Priority");
+        int priority = 0;
+        if (priorityString != null) {
+            try {
+                priority = new Integer(priorityString);
+            } catch (NumberFormatException e) {
+                // do nothing
+            }
+        }
+        task.setPriority(priority);
+
+        TaskData taskData = new TaskData();
+        taskData.setWorkItemId(workItem.getId());
+        taskData.setSkipable(!"false".equals(workItem.getParameter("Skippable")));
+        //Sub Task Data
+        Long parentId = (Long) workItem.getParameter("ParentId");
+        if (parentId != null) {
+            taskData.setParentId(parentId);
+        }
+
+        String subTaskStrategiesCommaSeparated = (String) workItem.getParameter("SubTaskStrategies");
+        if (subTaskStrategiesCommaSeparated != null && !subTaskStrategiesCommaSeparated.equals("")) {
+            String[] subTaskStrategies = subTaskStrategiesCommaSeparated.split(",");
+            List<SubTasksStrategy> strategies = new ArrayList<SubTasksStrategy>();
+            for (String subTaskStrategyString : subTaskStrategies) {
+                SubTasksStrategy subTaskStrategy = SubTasksStrategyFactory.newStrategy(subTaskStrategyString);
+                strategies.add(subTaskStrategy);
+            }
+            task.setSubTaskStrategies(strategies);
+        }
+
+        PeopleAssignments assignments = new PeopleAssignments();
+        List<OrganizationalEntity> potentialOwners = new ArrayList<OrganizationalEntity>();
+
+        String actorId = (String) workItem.getParameter("ActorId");
+        if (actorId != null) {
+
+            String[] actorIds = actorId.split(",");
+            for (String id : actorIds) {
+                User user = new User();
+                user.setId(id.trim());
+                potentialOwners.add(user);
+            }
+            //Set the first user as creator ID??? hmmm might be wrong
+            if (potentialOwners.size() > 0) {
+                taskData.setCreatedBy((User) potentialOwners.get(0));
+            }
+        }
+        String groupId = (String) workItem.getParameter("GroupId");
+        if (groupId != null) {
+
+            String[] groupIds = groupId.split(",");
+            for (String id : groupIds) {
+
+                potentialOwners.add(new Group(id));
+            }
+
+        }
+
+        assignments.setPotentialOwners(potentialOwners);
+        List<OrganizationalEntity> businessAdministrators = new ArrayList<OrganizationalEntity>();
+        businessAdministrators.add(new User("Administrator"));
+        assignments.setBusinessAdministrators(businessAdministrators);
+        task.setPeopleAssignments(assignments);
+
+        task.setTaskData(taskData);
+
+        ContentData content = null;
+        Object contentObject = workItem.getParameter("Content");
+        if (contentObject != null) {
+            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+            ObjectOutputStream out;
+            try {
+                out = new ObjectOutputStream(bos);
+                out.writeObject(contentObject);
+                out.close();
+                content = new ContentData();
+                content.setContent(bos.toByteArray());
+                content.setAccessType(AccessType.Inline);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        TaskWorkItemAddTaskMessageResponseHandler taskResponseHandler =
+                new TaskWorkItemAddTaskMessageResponseHandler(workItem.getId(), this.managers, idMapping, manager);
+        client.addTask(task, content, taskResponseHandler);
+    }
+
+    public void dispose() {
+        if (connector != null) {
+            connector.disconnect();
+        }
+    }
+
+    public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+        Long taskId = idMapping.get(workItem.getId());
+        if (taskId != null) {
+            synchronized (idMapping) {
+                idMapping.remove(taskId);
+            }
+            synchronized (managers) {
+                managers.remove(taskId);
+            }
+            client.skip(taskId, "Administrator", null);
+        }
+    }
+
+    public class TaskWorkItemAddTaskMessageResponseHandler extends AbstractBaseResponseHandler implements AddTaskMessageResponseHandler {
+
+        private Map<Long, WorkItemManager> managers;
+        private Map<Long, Long> idMapping;
+        private WorkItemManager manager;
+        private long workItemId;
+
+        public TaskWorkItemAddTaskMessageResponseHandler(long workItemId,
+                Map<Long, WorkItemManager> managers, Map<Long, Long> idMapping,
+                WorkItemManager manager) {
+            this.workItemId = workItemId;
+            this.managers = managers;
+            this.idMapping = idMapping;
+            this.manager = manager;
+        }
+
+        public void execute(long taskId) {
+            throw new UnsupportedOperationException("Not supported yet.");
+        }
+
+        public void receive(Message message) {
+            Command command = (Command) message.getPayload();
+            Long taskId = (Long) command.getArguments().get(0);
+
+            synchronized (managers) {
+                managers.put(taskId, this.manager);
+            }
+            synchronized (idMapping) {
+                idMapping.put(workItemId, taskId);
+            }
+            System.out.println("Created task " + taskId + " for work item " + workItemId);
+
+            EventKey key = new TaskEventKey(TaskCompletedEvent.class, taskId);
+            TaskCompletedMessageHandler eventResponseHandler = new TaskCompletedMessageHandler(workItemId, taskId, managers);
+            client.registerForEvent(key, true, eventResponseHandler);
+            key = new TaskEventKey(TaskFailedEvent.class, taskId);
+            client.registerForEvent(key, true, eventResponseHandler);
+            key = new TaskEventKey(TaskSkippedEvent.class, taskId);
+            client.registerForEvent(key, true, eventResponseHandler);
+        }
+    }
+
+    private class TaskCompletedMessageHandler extends AbstractBaseResponseHandler implements EventMessageResponseHandler {
+
+        private long workItemId;
+        private long taskId;
+        private final Map<Long, WorkItemManager> managers;
+
+        public TaskCompletedMessageHandler(long workItemId, long taskId, Map<Long, WorkItemManager> managers) {
+            this.workItemId = workItemId;
+            this.taskId = taskId;
+            this.managers = managers;
+        }
+
+        public void receive(Message message) {
+            Command cmd = (Command) message.getPayload();
+            Payload payload = (Payload) cmd.getArguments().get(0);
+            TaskEvent event = (TaskEvent) payload.get();
+            if (event.getTaskId() != taskId) {
+                // defensive check that should never happen, just here for testing
+                setError(new IllegalStateException("Expected task id and arrived task id do not march"));
+                return;
+            }
+            if (event instanceof TaskCompletedEvent) {
+                synchronized (this.managers) {
+                    WorkItemManager manager = this.managers.get(taskId);
+                    if (manager != null) {
+                        GetCompletedTaskMessageResponseHandler getTaskResponseHandler = new GetCompletedTaskMessageResponseHandler(manager);
+                        client.getTask(taskId, getTaskResponseHandler);
+                    }
+                }
+            } else {
+                synchronized (this.managers) {
+                    WorkItemManager manager = this.managers.get(taskId);
+                    if (manager != null) {
+                        manager.abortWorkItem(workItemId);
+                    }
+                }
+            }
+        }
+
+        public void execute(Payload payload) {
+            throw new UnsupportedOperationException("Not supported yet.");
+        }
+    }
+
+    private class GetCompletedTaskMessageResponseHandler extends AbstractBaseResponseHandler implements GetTaskMessageResponseHandler {
+
+        private WorkItemManager manager;
+
+        public GetCompletedTaskMessageResponseHandler(WorkItemManager manager) {
+            this.manager = manager;
+        }
+
+        public void receive(Message message) {
+            Command cmd = (Command) message.getPayload();
+            Task task = (Task) cmd.getArguments().get(0);
+            long workItemId = task.getTaskData().getWorkItemId();
+            String userId = task.getTaskData().getActualOwner().getId();
+            Map<String, Object> results = new HashMap<String, Object>();
+            results.put("ActorId", userId);
+            long contentId = task.getTaskData().getOutputContentId();
+            if (contentId != -1) {
+                GetResultContentMessageResponseHandler getContentResponseHandler =
+                        new GetResultContentMessageResponseHandler(manager, task, results);
+                client.getContent(contentId, getContentResponseHandler);
+            } else {
+                manager.completeWorkItem(workItemId, results);
+            }
+        }
+
+        public void execute(Task task) {
+            throw new UnsupportedOperationException("Not supported yet.");
+        }
+    }
+
+    private class GetResultContentMessageResponseHandler extends AbstractBaseResponseHandler implements GetContentMessageResponseHandler {
+
+        private Task task;
+        private final WorkItemManager manager;
+        private Map<String, Object> results;
+
+        public GetResultContentMessageResponseHandler(WorkItemManager manager, Task task, Map<String, Object> results) {
+            this.manager = manager;
+            this.task = task;
+            this.results = results;
+        }
+
+        public void receive(Message message) {
+            Command cmd = (Command) message.getPayload();
+            Content content = (Content) cmd.getArguments().get(0);
+            ByteArrayInputStream bis = new ByteArrayInputStream(content.getContent());
+            ObjectInputStream in;
+            try {
+                in = new ObjectInputStream(bis);
+                Object result = in.readObject();
+                in.close();
+                results.put("Result", result);
+                if (result instanceof Map) {
+                    Map<?, ?> map = (Map) result;
+                    for (Map.Entry<?, ?> entry : map.entrySet()) {
+                        if (entry.getKey() instanceof String) {
+                            results.put((String) entry.getKey(), entry.getValue());
+                        }
+                    }
+                }
+                manager.completeWorkItem(task.getTaskData().getWorkItemId(), results);
+            } catch (IOException e) {
+                e.printStackTrace();
+            } catch (ClassNotFoundException e) {
+                e.printStackTrace();
+            }
+        }
+
+        public void execute(Content content) {
+            throw new UnsupportedOperationException("Not supported yet.");
+        }
+    }
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/GenericEventTransport.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/GenericEventTransport.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/GenericEventTransport.java	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,42 @@
+package org.drools.services.task;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+
+import org.drools.eventmessaging.EventTriggerTransport;
+import org.drools.eventmessaging.Payload;
+import org.drools.services.generic.GenericIoWriter;
+import org.drools.services.generic.Message;
+import org.drools.task.service.Command;
+import org.drools.task.service.CommandName;
+
+public class GenericEventTransport implements EventTriggerTransport {
+    private String uuid;
+    private Map<String, GenericIoWriter> sessions;
+    private int responseId;
+    private boolean remove;
+    
+    GenericEventTransport(String uuid, int responseId, Map<String, GenericIoWriter> sessions, boolean remove) {
+        this.uuid = uuid;
+        this.responseId = responseId;
+        this.sessions = sessions;
+        this.remove = remove;
+    }
+
+    public void trigger(Payload payload) {        
+        GenericIoWriter session = sessions.get( uuid );
+        List args = new ArrayList( 1 );
+        args.add( payload );
+        Command resultsCmnd = new Command( responseId, CommandName.EventTriggerResponse, args);
+        session.write(new Message(Integer.parseInt(uuid),
+                                        responseId,
+                                        false,
+                                        resultsCmnd ), null);
+    }
+    
+    public boolean isRemove() {
+        return this.remove;
+    }
+}

Copied: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/HumanTaskFactoryService.java (from rev 31896, labs/jbossrules/branches/salaboy_ServiceAPIs/drools-api/src/main/java/org/drools/vsm/HumanTaskServiceProvider.java)
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/HumanTaskFactoryService.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/HumanTaskFactoryService.java	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,14 @@
+package org.drools.services.task;
+
+import org.drools.Service;
+import org.drools.services.generic.GenericConnector;
+
+
+
+
+public interface HumanTaskFactoryService extends Service {
+    public HumanTaskService newHumanTaskService();
+    
+	 
+
+}

Copied: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/HumanTaskService.java (from rev 31896, labs/jbossrules/branches/salaboy_ServiceAPIs/drools-api/src/main/java/org/drools/vsm/HumanTaskService.java)
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/HumanTaskService.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/HumanTaskService.java	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,59 @@
+package org.drools.services.task;
+
+import java.util.List;
+
+import org.drools.eventmessaging.EventKey;
+
+import org.drools.services.task.TaskClientMessageHandlerImpl.AddAttachmentMessageResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.AddCommentMessageResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.AddTaskMessageResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.DeleteAttachmentMessageResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.DeleteCommentMessageResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.GetContentMessageResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.GetTaskMessageResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.SetDocumentMessageResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.TaskOperationMessageResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.TaskSummaryMessageResponseHandler;
+import org.drools.services.task.eventmessaging.EventMessageResponseHandler;
+import org.drools.task.Attachment;
+import org.drools.task.Comment;
+import org.drools.task.Content;
+import org.drools.task.Task;
+import org.drools.task.service.ContentData;
+import org.drools.task.service.FaultData;
+ 
+
+public interface HumanTaskService {
+    public void addTask(Task task, ContentData content, AddTaskMessageResponseHandler responseHandler);
+    public Task getTask(long taskId, GetTaskMessageResponseHandler responseHandler);
+    public void addComment(long taskId, Comment comment, AddCommentMessageResponseHandler responseHandler);
+    public void deleteComment(long taskId, long commentId, DeleteCommentMessageResponseHandler responseHandler);
+    public void addAttachment(long taskId, Attachment attachment, Content content, AddAttachmentMessageResponseHandler responseHandler);
+    public void deleteAttachment(long taskId, long attachmentId, long contentId, DeleteAttachmentMessageResponseHandler responseHandler );
+    public void setDocumentContent(long taskId, Content content, SetDocumentMessageResponseHandler responseHandler);
+    public void getContent(long contentId, GetContentMessageResponseHandler responseHandler);
+    public void claim(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler);
+    public void start(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler);
+    public void stop(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler);
+    public void release(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler);
+    public void suspend(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler);
+    public void resume(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler);
+    public void skip(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler);
+    public void delegate(long taskId, String userId, String targetUserId, TaskOperationMessageResponseHandler responseHandler);
+    public void forward(long taskId, String userId, String targetEntityId, TaskOperationMessageResponseHandler responseHandler) ;
+    public void complete(long taskId, String userId, ContentData outputData, TaskOperationMessageResponseHandler responseHandler) ;
+    public void fail(long taskId, String userId, FaultData faultData, TaskOperationMessageResponseHandler responseHandler);
+    public void getTasksOwned(String userId, String language, TaskSummaryMessageResponseHandler responseHandler);
+    public void getTasksAssignedAsBusinessAdministrator(String userId, String language, TaskSummaryMessageResponseHandler responseHandler);
+    public void getTasksAssignedAsExcludedOwner(String userId, String language, TaskSummaryMessageResponseHandler responseHandler);
+    public void getTasksAssignedAsPotentialOwner(String userId, String language, TaskSummaryMessageResponseHandler responseHandler);
+    public void getTasksAssignedAsPotentialOwner(String userId, List<String> groupIds, String language, TaskSummaryMessageResponseHandler responseHandler);
+    public void getSubTasksAssignedAsPotentialOwner(long parentId, String userId, String language, TaskSummaryMessageResponseHandler responseHandler);
+    public void getSubTasksByParent(long parentId, TaskSummaryMessageResponseHandler responseHandler);
+    public void getTasksAssignedAsRecipient(String userId, String language, TaskSummaryMessageResponseHandler responseHandler);
+    public void getTasksAssignedAsTaskInitiator(String userId, String language, TaskSummaryMessageResponseHandler responseHandler);
+    public void getTasksAssignedAsTaskStakeholder(String userId, String language, TaskSummaryMessageResponseHandler responseHandler);
+    public void registerForEvent(EventKey key, boolean remove, EventMessageResponseHandler responseHandler);
+    public boolean connect();
+    public void disconnect();
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/HumanTaskServiceImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/HumanTaskServiceImpl.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/HumanTaskServiceImpl.java	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,409 @@
+package org.drools.services.task;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.drools.eventmessaging.EventKey;
+import org.drools.services.generic.GenericConnector;
+import org.drools.services.generic.Message;
+import org.drools.task.Attachment;
+import org.drools.task.Comment;
+import org.drools.task.Content;
+import org.drools.task.Task;
+import org.drools.task.service.Command;
+import org.drools.task.service.CommandName;
+import org.drools.task.service.ContentData;
+import org.drools.task.service.FaultData;
+import org.drools.task.service.Operation;
+import org.drools.services.task.TaskClientMessageHandlerImpl.AddAttachmentMessageResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.AddCommentMessageResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.AddTaskMessageResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.DeleteAttachmentMessageResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.DeleteCommentMessageResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.GetContentMessageResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.GetTaskMessageResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.SetDocumentMessageResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.TaskOperationMessageResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.TaskSummaryMessageResponseHandler;
+import org.drools.services.task.eventmessaging.EventMessageResponseHandler;
+
+
+/**
+ * @author salaboy
+ * @author Lucas Amador
+ *
+ */
+public class HumanTaskServiceImpl implements HumanTaskService {
+
+	private final GenericConnector client;
+	private final AtomicInteger counter;
+	private int sessionId;
+	private String clientName;
+
+	public HumanTaskServiceImpl(GenericConnector client, int sessionId) {
+		this.client = client;
+		this.counter = new AtomicInteger();
+		this.clientName = String.valueOf(sessionId);
+		this.sessionId = sessionId;
+                
+	}
+
+        public boolean connect(){
+            return this.client.connect();
+        }
+
+        public void disconnect(){
+            this.client.disconnect();
+        }
+
+	public void addTask(Task task, ContentData content, AddTaskMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 2 );
+		args.add( task );
+		args.add( content );
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.AddTaskRequest, args );
+
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+
+	public Task getTask(long taskId, GetTaskMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 1 );
+		args.add( taskId );
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.GetTaskRequest, args );
+
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+		client.write(msg, responseHandler);
+		return null;
+	}
+
+	public void addComment(long taskId, Comment comment, AddCommentMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 2 );
+		args.add( taskId );
+		args.add( comment );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.AddCommentRequest, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+
+	public void deleteComment(long taskId, long commentId, DeleteCommentMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 2 );
+		args.add( taskId );
+		args.add( commentId );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.DeleteCommentRequest, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+
+	public void addAttachment(long taskId, Attachment attachment, Content content, AddAttachmentMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 3 );
+		args.add( taskId );
+		args.add( attachment );
+		args.add( content );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.AddAttachmentRequest, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+
+	public void deleteAttachment(long taskId, long attachmentId, long contentId, DeleteAttachmentMessageResponseHandler responseHandler ) {
+		List<Object> args = new ArrayList<Object>( 3 );
+		args.add( taskId );
+		args.add( attachmentId );
+		args.add( contentId );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.DeleteAttachmentRequest, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+
+	public void setDocumentContent(long taskId, Content content, SetDocumentMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 2 );
+		args.add( taskId );
+		args.add( content );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.SetDocumentContentRequest, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+
+	public void getContent(long contentId, GetContentMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 1 );
+		args.add( contentId );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.GetContentRequest, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+
+	public void claim(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 3 );
+		args.add( Operation.Claim );
+		args.add( taskId );
+		args.add( userId );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.OperationRequest, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+
+	public void start(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 3 );
+		args.add( Operation.Start );
+		args.add( taskId );
+		args.add( userId );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.OperationRequest, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+
+	public void stop(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 3 );
+		args.add( Operation.Stop );
+		args.add( taskId );
+		args.add( userId );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.OperationRequest, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+
+	public void release(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 3 );
+		args.add( Operation.Release );
+		args.add( taskId );
+		args.add( userId );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.OperationRequest, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+
+	public void suspend(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 3 );
+		args.add( Operation.Suspend );
+		args.add( taskId );
+		args.add( userId );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.OperationRequest, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+
+	public void resume(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 3 );
+		args.add( Operation.Resume );
+		args.add( taskId );
+		args.add( userId );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.OperationRequest, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+
+	public void skip(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 3 );
+		args.add( Operation.Skip );
+		args.add( taskId );
+		args.add( userId );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.OperationRequest, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+
+	public void delegate(long taskId, String userId, String targetUserId, TaskOperationMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 4 );
+		args.add( Operation.Delegate );
+		args.add( taskId );
+		args.add( userId );
+		args.add( targetUserId );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.OperationRequest, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);   
+	}
+
+	public void forward(long taskId, String userId, String targetEntityId, TaskOperationMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 4 );
+		args.add( Operation.Forward );
+		args.add( taskId );
+		args.add( userId );
+		args.add( targetEntityId );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.OperationRequest, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);    
+	}    
+
+	public void complete(long taskId, String userId, ContentData outputData, TaskOperationMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 5 );
+		args.add( Operation.Complete );
+		args.add( taskId );
+		args.add( userId );
+		args.add( null );
+		args.add( outputData );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.OperationRequest, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+
+	public void fail(long taskId, String userId, FaultData faultData, TaskOperationMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 5 );
+		args.add( Operation.Fail );
+		args.add( taskId );
+		args.add( userId );
+		args.add( null );
+		args.add( faultData );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.OperationRequest, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+
+	public void getTasksOwned(String userId, String language, TaskSummaryMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 2 );
+		args.add( userId );
+		args.add( language );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.QueryTasksOwned, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+
+	public void getTasksAssignedAsBusinessAdministrator(String userId, String language, TaskSummaryMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 2 );
+		args.add( userId );
+		args.add( language );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.QueryTasksAssignedAsBusinessAdministrator, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+
+	public void getTasksAssignedAsExcludedOwner(String userId, String language, TaskSummaryMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 2 );
+		args.add( userId );
+		args.add( language );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.QueryTasksAssignedAsExcludedOwner, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+
+	public void getTasksAssignedAsPotentialOwner(String userId, String language, TaskSummaryMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 2 );
+		args.add( userId );
+		args.add( language );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.QueryTasksAssignedAsPotentialOwner, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+	public void getTasksAssignedAsPotentialOwner(String userId, List<String> groupIds, String language, TaskSummaryMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 2 );
+		args.add( userId );
+		args.add( groupIds );
+		args.add( language );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.QueryTasksAssignedAsPotentialOwnerWithGroup, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+
+	public void getSubTasksAssignedAsPotentialOwner(long parentId, String userId, String language, TaskSummaryMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 2 );
+		args.add( parentId );
+		args.add( userId );
+		args.add( language );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.QuerySubTasksAssignedAsPotentialOwner, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+	public void getSubTasksByParent(long parentId, TaskSummaryMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 2 );
+		args.add( parentId );
+		//@TODO: un hard code this
+		args.add( "en-UK" );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.QueryGetSubTasksByParentTaskId, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+	public void getTasksAssignedAsRecipient(String userId, String language, TaskSummaryMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 2 );
+		args.add( userId );
+		args.add( language );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.QueryTasksAssignedAsRecipient, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+
+	public void getTasksAssignedAsTaskInitiator(String userId, String language, TaskSummaryMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 2 );
+		args.add( userId );
+		args.add( language );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.QueryTasksAssignedAsTaskInitiator, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+
+	public void getTasksAssignedAsTaskStakeholder(String userId, String language, TaskSummaryMessageResponseHandler responseHandler) {
+		List<Object> args = new ArrayList<Object>( 2 );
+		args.add( userId );
+		args.add( language );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.QueryTasksAssignedAsTaskStakeholder, args );
+		Message msg = new Message( sessionId, counter.incrementAndGet(), false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+
+	public void registerForEvent(EventKey key, boolean remove, EventMessageResponseHandler responseHandler) { //@TODO: look for the event stuff
+		List<Object> args = new ArrayList<Object>( 3 );
+		args.add( key );
+		args.add( remove );
+		args.add( clientName );
+
+		Command cmd = new Command( counter.getAndIncrement(), CommandName.RegisterForEventRequest, args );
+		int responseId = counter.incrementAndGet();
+		Message msg = new Message( sessionId, responseId, false, cmd );
+
+		client.write(msg, responseHandler);
+	}
+
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/HumanTaskServiceProviderRemoteClient.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/HumanTaskServiceProviderRemoteClient.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/HumanTaskServiceProviderRemoteClient.java	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,66 @@
+/*
+ *  Copyright 2010 salaboy.
+ * 
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ * 
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *  under the License.
+ */
+
+package org.drools.services.task;
+
+import org.drools.services.generic.GenericConnector;
+
+/**
+ *
+ * @author salaboy
+ */
+public class HumanTaskServiceProviderRemoteClient implements HumanTaskFactoryService {
+
+    private GenericConnector connector;
+    private int id;
+
+    public HumanTaskServiceProviderRemoteClient() {
+    }
+
+    public HumanTaskServiceProviderRemoteClient(GenericConnector connector, int id) {
+        this.connector = connector;
+        this.id = id;
+    }
+
+    public GenericConnector getConnector() {
+        return connector;
+    }
+
+    public void setConnector(GenericConnector connector) {
+        this.connector = connector;
+    }
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+
+    @Override
+    public HumanTaskService newHumanTaskService() {
+
+        
+            return new HumanTaskServiceImpl(this.connector, this.id);
+      
+    }
+
+
+
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/TaskClientMessageHandlerImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/TaskClientMessageHandlerImpl.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/TaskClientMessageHandlerImpl.java	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,249 @@
+package org.drools.services.task;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.drools.SystemEventListener;
+import org.drools.eventmessaging.Payload;
+import org.drools.services.generic.GenericIoWriter;
+import org.drools.services.generic.GenericMessageHandler;
+import org.drools.services.generic.Message;
+import org.drools.services.generic.MessageResponseHandler;
+import org.drools.task.Content;
+import org.drools.task.Task;
+import org.drools.task.query.TaskSummary;
+import org.drools.task.service.Command;
+
+import org.drools.services.task.eventmessaging.EventMessageResponseHandler;
+import org.drools.services.task.responseHandlers.BlockingTaskSummaryMessageResponseHandler;
+
+public class TaskClientMessageHandlerImpl implements GenericMessageHandler {
+
+    /**
+     * Listener used for logging
+     */
+    private SystemEventListener systemEventListener;
+    protected Map<Integer, MessageResponseHandler> responseHandlers;
+
+    public TaskClientMessageHandlerImpl(SystemEventListener systemEventListener) {
+        this.systemEventListener = systemEventListener;
+        this.responseHandlers = new ConcurrentHashMap<Integer, MessageResponseHandler>();;
+    }
+
+    
+    public void exceptionCaught(GenericIoWriter session,
+                                Throwable cause) throws Exception {
+        systemEventListener.exception("Uncaught exception on client", cause);
+    }
+
+    public void messageReceived(GenericIoWriter session, Message msg) throws Exception {
+        Command cmd = (Command) msg.getPayload();
+        systemEventListener.debug("Message receieved redirected to the client 1111111111: " + cmd.getName());
+        systemEventListener.debug("Arguments : " + Arrays.toString(cmd.getArguments().toArray()));
+
+        switch (cmd.getName()) {
+            case OperationResponse: {
+                TaskOperationMessageResponseHandler responseHandler = (TaskOperationMessageResponseHandler) responseHandlers.remove(cmd.getId());
+                if (responseHandler != null) {
+                    if (!cmd.getArguments().isEmpty() && cmd.getArguments().get(0) instanceof RuntimeException) {
+                        responseHandler.setError((RuntimeException) cmd.getArguments().get(0));
+                    } else {
+                        responseHandler.setIsDone(true);
+                        System.out.println("IS DONDEEEE");
+                    }
+                }
+                break;
+            }
+            case GetTaskResponse: {
+                GetTaskMessageResponseHandler responseHandler = (GetTaskMessageResponseHandler) responseHandlers.remove(cmd.getId());
+                if (responseHandler != null) {                    
+                    if (!cmd.getArguments().isEmpty() && cmd.getArguments().get(0) instanceof RuntimeException) {
+                        responseHandler.setError((RuntimeException) cmd.getArguments().get(0));
+                    } else {
+                        Task task = (Task) cmd.getArguments().get(0);
+                        responseHandler.execute(task);
+                    }
+                }
+                break;
+            }
+            case AddTaskResponse: {
+                AddTaskMessageResponseHandler responseHandler = (AddTaskMessageResponseHandler) responseHandlers.remove(msg.getResponseId());
+                System.out.println("response id searched: " + msg.getResponseId());
+                if (responseHandler != null) {
+                    if (!cmd.getArguments().isEmpty() && cmd.getArguments().get(0) instanceof RuntimeException) {
+                        responseHandler.setError((RuntimeException) cmd.getArguments().get(0));
+                    } else {
+                        long taskId = (Long) cmd.getArguments().get(0);
+                        responseHandler.execute(taskId);
+                    }
+                }
+                break;
+            }
+            case AddCommentResponse: {
+                AddCommentMessageResponseHandler responseHandler = (AddCommentMessageResponseHandler) responseHandlers.remove(cmd.getId());
+                if (responseHandler != null) {
+                    if (!cmd.getArguments().isEmpty() && cmd.getArguments().get(0) instanceof RuntimeException) {
+                        responseHandler.setError((RuntimeException) cmd.getArguments().get(0));
+                    } else {
+                        long commentId = (Long) cmd.getArguments().get(0);
+                        responseHandler.execute(commentId);
+                    }
+                }
+                break;
+            }
+            case DeleteCommentResponse: {
+                DeleteCommentMessageResponseHandler responseHandler = (DeleteCommentMessageResponseHandler) responseHandlers.remove(cmd.getId());
+                if (responseHandler != null) {
+                    if (!cmd.getArguments().isEmpty() && cmd.getArguments().get(0) instanceof RuntimeException) {
+                        responseHandler.setError((RuntimeException) cmd.getArguments().get(0));
+                    } else {
+                        responseHandler.setIsDone(true);
+                    }
+                }
+                break;
+            }
+            case AddAttachmentResponse: {
+                AddAttachmentMessageResponseHandler responseHandler = (AddAttachmentMessageResponseHandler) responseHandlers.remove(cmd.getId());
+                if (responseHandler != null) {
+                    if (!cmd.getArguments().isEmpty() && cmd.getArguments().get(0) instanceof RuntimeException) {
+                        responseHandler.setError((RuntimeException) cmd.getArguments().get(0));
+                    } else {
+                        long attachmentId = (Long) cmd.getArguments().get(0);
+                        long contentId = (Long) cmd.getArguments().get(1);
+                        responseHandler.execute(attachmentId,
+                                contentId);
+                    }
+                }
+                break;
+            }
+            case DeleteAttachmentResponse: {
+                DeleteAttachmentMessageResponseHandler responseHandler = (DeleteAttachmentMessageResponseHandler) responseHandlers.remove(cmd.getId());
+                if (responseHandler != null) {
+                    if (!cmd.getArguments().isEmpty() && cmd.getArguments().get(0) instanceof RuntimeException) {
+                        responseHandler.setError((RuntimeException) cmd.getArguments().get(0));
+                    } else {
+                        responseHandler.setIsDone(true);
+                    }
+                }
+                break;
+            }
+            case GetContentResponse: {
+                GetContentMessageResponseHandler responseHandler = (GetContentMessageResponseHandler) responseHandlers.remove(cmd.getId());
+                if (responseHandler != null) {
+                    if (!cmd.getArguments().isEmpty() && cmd.getArguments().get(0) instanceof RuntimeException) {
+                        responseHandler.setError((RuntimeException) cmd.getArguments().get(0));
+                    } else {
+                        Content content = (Content) cmd.getArguments().get(0);
+                        responseHandler.execute(content);
+                    }
+                }
+                break;
+            }
+            case SetDocumentContentResponse: {
+                SetDocumentMessageResponseHandler responseHandler = (SetDocumentMessageResponseHandler) responseHandlers.remove(cmd.getId());
+                if (responseHandler != null) {
+                    if (!cmd.getArguments().isEmpty() && cmd.getArguments().get(0) instanceof RuntimeException) {
+                        responseHandler.setError((RuntimeException) cmd.getArguments().get(0));
+                    } else {
+                        long contentId = (Long) cmd.getArguments().get(0);
+                        responseHandler.execute(contentId);
+                    }
+                }
+                break;
+            }
+            case QueryTaskSummaryResponse: {
+            	BlockingTaskSummaryMessageResponseHandler responseHandler = (BlockingTaskSummaryMessageResponseHandler) responseHandlers.remove(msg.getResponseId());
+                System.out.println("responseHandler: " + responseHandler + " id searched: " + msg.getResponseId());
+                if (responseHandler != null) {
+                    if (!cmd.getArguments().isEmpty() && cmd.getArguments().get(0) instanceof RuntimeException) {
+                        responseHandler.setError((RuntimeException) cmd.getArguments().get(0));
+                    } else {
+                        List<TaskSummary> results = (List<TaskSummary>) cmd.getArguments().get(0);
+                        responseHandler.execute(results);
+                    }
+                }
+                break;
+            }
+            case EventTriggerResponse: {
+                EventMessageResponseHandler responseHandler = (EventMessageResponseHandler) responseHandlers.remove(cmd.getId()); //@TODO view messaging stuff
+                System.out.println("EVENT TRIGGER RESPONSE " + responseHandler + " size " + responseHandlers.size() + " id " + cmd.getId());
+                if (responseHandler != null) {
+                	System.out.println("responseHandler---: " + responseHandler);
+                    if (!cmd.getArguments().isEmpty() && cmd.getArguments().get(0) instanceof RuntimeException) {
+                        responseHandler.setError((RuntimeException) cmd.getArguments().get(0));
+                        System.out.println("EEerror");
+                    } else {
+                        Payload payload = (Payload) cmd.getArguments().get(0);
+                        System.out.println("EExecute ");
+                        responseHandler.execute(payload);
+                    }
+                }
+                break;
+            }
+        }
+    }
+    
+    public static interface GetTaskMessageResponseHandler
+            extends
+            MessageResponseHandler {
+        public void execute(Task task);
+    }
+
+    public static interface AddTaskMessageResponseHandler
+            extends
+            MessageResponseHandler {
+        public void execute(long taskId);
+    }
+
+    public static interface TaskOperationMessageResponseHandler
+            extends
+            MessageResponseHandler {
+        public void setIsDone(boolean done);
+    }
+
+    public static interface AddCommentMessageResponseHandler
+            extends
+            MessageResponseHandler {
+        public void execute(long commentId);
+    }
+
+    public static interface DeleteCommentMessageResponseHandler
+            extends
+            MessageResponseHandler {
+        public void setIsDone(boolean done);
+    }
+
+    public static interface AddAttachmentMessageResponseHandler
+            extends
+            MessageResponseHandler {
+        public void execute(long attachmentId,
+                            long contentId);
+    }
+
+    public static interface DeleteAttachmentMessageResponseHandler
+            extends
+            MessageResponseHandler {
+        public void setIsDone(boolean done);
+    }
+
+    public static interface SetDocumentMessageResponseHandler
+            extends
+            MessageResponseHandler {
+        public void execute(long contentId);
+    }
+
+    public static interface GetContentMessageResponseHandler
+            extends
+            MessageResponseHandler {
+        public void execute(Content content);
+    }
+
+    public static interface TaskSummaryMessageResponseHandler
+            extends
+            MessageResponseHandler {
+        public void execute(List<TaskSummary> results);
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/TaskServerMessageHandlerImpl.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/TaskServerMessageHandlerImpl.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/TaskServerMessageHandlerImpl.java	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,437 @@
+package org.drools.services.task;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.mina.core.session.IdleStatus;
+import org.apache.mina.core.session.IoSession;
+import org.drools.SystemEventListener;
+import org.drools.eventmessaging.EventKey;
+import org.drools.services.generic.GenericIoWriter;
+import org.drools.services.generic.GenericMessageHandler;
+import org.drools.services.generic.Message;
+import org.drools.task.Attachment;
+import org.drools.task.Comment;
+import org.drools.task.Content;
+import org.drools.task.Task;
+import org.drools.task.query.TaskSummary;
+import org.drools.task.service.Command;
+import org.drools.task.service.CommandName;
+import org.drools.task.service.ContentData;
+import org.drools.task.service.Operation;
+import org.drools.task.service.TaskService;
+import org.drools.task.service.TaskServiceSession;
+
+
+public class TaskServerMessageHandlerImpl implements GenericMessageHandler {
+    private final TaskService service;
+    private final Map<String, GenericIoWriter> clients;
+
+    /**
+     * Listener used for logging
+     */
+    private final SystemEventListener systemEventListener;
+
+    public TaskServerMessageHandlerImpl(TaskService service, SystemEventListener systemEventListener) {
+        this.service = service;
+        this.clients = new HashMap<String, GenericIoWriter>();
+        this.systemEventListener = systemEventListener;
+    }
+
+    
+    public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
+        systemEventListener.exception("Uncaught exception on Server", cause);
+    }
+
+    
+    public void messageReceived(GenericIoWriter session, Message msg) throws Exception {
+        Command cmd = (Command) ((Message)msg).getPayload();
+        TaskServiceSession taskSession = service.createSession();
+        CommandName response = null;
+        try {
+            systemEventListener.debug("Message received on server : " + cmd.getName());
+            systemEventListener.debug("Arguments : " + Arrays.toString(cmd.getArguments().toArray()));
+            switch (cmd.getName()) {
+                case OperationRequest: {
+                    response = CommandName.OperationResponse;
+                    Operation operation = (Operation) cmd.getArguments().get(0);
+
+                    systemEventListener.debug("Command receieved on server was operation of type: " + operation);
+
+                    long taskId = (Long) cmd.getArguments().get(1);
+                    String userId = (String) cmd.getArguments().get(2);
+                    String targetEntityId = null;
+                    if (cmd.getArguments().size() > 3) {
+                        targetEntityId = (String) cmd.getArguments().get(3);
+                    }
+                    ContentData data = null;
+                    if (cmd.getArguments().size() > 4) {
+                        data = (ContentData) cmd.getArguments().get(4);
+                    }
+                    taskSession.taskOperation(operation, taskId, userId, targetEntityId, data);
+
+                    List args = Collections.emptyList();
+
+                    Command resultsCmnd = new Command(cmd.getId(), CommandName.OperationResponse, args);
+                    session.write(new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        resultsCmnd ), null);
+                    break;
+                }
+                case GetTaskRequest: {
+                    response = CommandName.GetTaskResponse;
+                    long taskId = (Long) cmd.getArguments().get(0);
+
+                    Task task = taskSession.getTask(taskId);
+
+                    List args = new ArrayList(1);
+                    args.add(task);
+                    Command resultsCmnd = new Command(cmd.getId(), CommandName.GetTaskResponse, args);
+                    session.write(new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        resultsCmnd ), null);
+
+                    break;
+                }
+                case AddTaskRequest: {
+                    response = CommandName.AddTaskResponse;
+                    Task task = (Task) cmd.getArguments().get(0);
+                    ContentData content = (ContentData) cmd.getArguments().get(1);
+                    taskSession.addTask(task, content);
+
+                    List args = new ArrayList(1);
+                    args.add(task.getId());
+                    Command resultsCmnd = new Command(cmd.getId(),
+                            CommandName.AddTaskResponse,
+                            args);
+                    session.write(new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        resultsCmnd ), null);
+                    break;
+                }
+                case AddCommentRequest: {
+                    response = CommandName.AddCommentResponse;
+                    Comment comment = (Comment) cmd.getArguments().get(1);
+                    taskSession.addComment((Long) cmd.getArguments().get(0),
+                            comment);
+
+                    List args = new ArrayList(1);
+                    args.add(comment.getId());
+                    Command resultsCmnd = new Command(cmd.getId(),
+                            CommandName.AddCommentResponse,
+                            args);
+                    session.write(new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        resultsCmnd ), null);
+                    break;
+                }
+                case DeleteCommentRequest: {
+                    response = CommandName.DeleteCommentResponse;
+                    long taskId = (Long) cmd.getArguments().get(0);
+                    long commentId = (Long) cmd.getArguments().get(1);
+                    taskSession.deleteComment(taskId,
+                            commentId);
+
+                    Command resultsCmnd = new Command(cmd.getId(),
+                            CommandName.DeleteCommentResponse,
+                            Collections.emptyList());
+                    session.write(new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        resultsCmnd ), null);
+                    break;
+                }
+                case AddAttachmentRequest: {
+                    response = CommandName.AddAttachmentResponse;
+                    Attachment attachment = (Attachment) cmd.getArguments().get(1);
+                    Content content = (Content) cmd.getArguments().get(2);
+                    taskSession.addAttachment((Long) cmd.getArguments().get(0),
+                            attachment,
+                            content);
+
+                    List args = new ArrayList(2);
+                    args.add(attachment.getId());
+                    args.add(content.getId());
+                    Command resultsCmnd = new Command(cmd.getId(),
+                            CommandName.AddAttachmentResponse,
+                            args);
+                   session.write(new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        resultsCmnd ), null);
+                    break;
+                }
+                case DeleteAttachmentRequest: {
+                    response = CommandName.DeleteAttachmentResponse;
+                    long taskId = (Long) cmd.getArguments().get(0);
+                    long attachmentId = (Long) cmd.getArguments().get(1);
+                    long contentId = (Long) cmd.getArguments().get(2);
+                    taskSession.deleteAttachment(taskId,
+                            attachmentId,
+                            contentId);
+                    Command resultsCmnd = new Command(cmd.getId(),
+                            CommandName.DeleteAttachmentResponse,
+                            Collections.emptyList());
+                    session.write(new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        resultsCmnd ), null);
+                    break;
+                }
+                case SetDocumentContentRequest: {
+                    response = CommandName.SetDocumentContentResponse;
+                    long taskId = (Long) cmd.getArguments().get(0);
+                    Content content = (Content) cmd.getArguments().get(1);
+                    taskSession.setDocumentContent(taskId,
+                            content);
+
+                    List args = new ArrayList(1);
+                    args.add(content.getId());
+                    Command resultsCmnd = new Command(cmd.getId(),
+                            CommandName.SetDocumentContentResponse,
+                            args);
+                    session.write(new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        resultsCmnd ), null);
+                    break;
+                }
+                case GetContentRequest: {
+                    response = CommandName.GetContentResponse;
+                    long contentId = (Long) cmd.getArguments().get(0);
+                    Content content = taskSession.getContent(contentId);
+                    List args = new ArrayList(1);
+                    args.add(content);
+                    Command resultsCmnd = new Command(cmd.getId(),
+                            CommandName.GetContentResponse,
+                            args);
+                    session.write(new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        resultsCmnd ), null);
+                    break;
+                }
+                case QueryTasksOwned: {
+                    response = CommandName.QueryTaskSummaryResponse;
+                    List<TaskSummary> results = taskSession.getTasksOwned((String) cmd.getArguments().get(0),
+                            (String) cmd.getArguments().get(1));
+                    List args = new ArrayList(1);
+                    args.add(results);
+                    Command resultsCmnd = new Command(cmd.getId(),
+                            CommandName.QueryTaskSummaryResponse,
+                            args);
+                    session.write(new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        resultsCmnd ), null);
+                    break;
+                }
+                case QueryTasksAssignedAsBusinessAdministrator: {
+                    response = CommandName.QueryTaskSummaryResponse;
+                    List<TaskSummary> results = taskSession.getTasksAssignedAsBusinessAdministrator((String) cmd.getArguments().get(0),
+                            (String) cmd.getArguments().get(1));
+                    List args = new ArrayList(1);
+                    args.add(results);
+                    Command resultsCmnd = new Command(cmd.getId(),
+                            CommandName.QueryTaskSummaryResponse,
+                            args);
+                    session.write(new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        resultsCmnd ), null);
+                    break;
+                }
+                case QueryTasksAssignedAsPotentialOwner: {
+                    response = CommandName.QueryTaskSummaryResponse;
+                    List<TaskSummary> results = taskSession.getTasksAssignedAsPotentialOwner((String) cmd.getArguments().get(0),
+                            (String) cmd.getArguments().get(1));
+                    List args = new ArrayList(1);
+                    args.add(results);
+                    Command resultsCmnd = new Command(cmd.getId(),
+                            CommandName.QueryTaskSummaryResponse,
+                            args);
+                    session.write(new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        resultsCmnd ), null);
+                    break;
+                }
+                case QueryTasksAssignedAsPotentialOwnerWithGroup: {
+                    response = CommandName.QueryTaskSummaryResponse;
+                    List<TaskSummary> results = taskSession.getTasksAssignedAsPotentialOwner(
+                    		(String) cmd.getArguments().get(0),
+                            (List<String>) cmd.getArguments().get(1),
+                            (String) cmd.getArguments().get(2));
+                    List args = new ArrayList(1);
+                    args.add(results);
+                    Command resultsCmnd = new Command(cmd.getId(),
+                            CommandName.QueryTaskSummaryResponse,
+                            args);
+                    session.write(new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        resultsCmnd ), null);
+                    break;
+                }
+                case QueryTasksAssignedAsPotentialOwnerByGroup: {
+                    response = CommandName.QueryTaskSummaryResponse;
+                    List<TaskSummary> results = taskSession.getTasksAssignedAsPotentialOwnerByGroup((String) cmd.getArguments().get(0),
+                            (String) cmd.getArguments().get(1));
+                    List args = new ArrayList(1);
+                    args.add(results);
+                    Command resultsCmnd = new Command(cmd.getId(),
+                            CommandName.QueryTaskSummaryResponse,
+                            args);
+                    session.write(new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        resultsCmnd ), null);
+                    break;
+                }
+                case QuerySubTasksAssignedAsPotentialOwner: {
+                    response = CommandName.QueryTaskSummaryResponse;
+                    List<TaskSummary> results = taskSession.getSubTasksAssignedAsPotentialOwner((Long) cmd.getArguments().get(0),
+                            (String) cmd.getArguments().get(1),
+                            (String) cmd.getArguments().get(2));
+                    List args = new ArrayList(1);
+                    args.add(results);
+                    Command resultsCmnd = new Command(cmd.getId(),
+                            CommandName.QueryTaskSummaryResponse,
+                            args);
+                    session.write(new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        resultsCmnd ), null);
+                    break;
+                }
+                case QueryGetSubTasksByParentTaskId: {
+                    response = CommandName.QueryTaskSummaryResponse;
+                    List<TaskSummary> results = taskSession.getSubTasksByParent((Long) cmd.getArguments().get(0),
+                            (String) cmd.getArguments().get(1));
+                    List args = new ArrayList(1);
+                    args.add(results);
+                    Command resultsCmnd = new Command(cmd.getId(),
+                            CommandName.QueryTaskSummaryResponse,
+                            args);
+                    session.write(new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        resultsCmnd ), null);
+                    break;
+                }
+
+
+                case QueryTasksAssignedAsTaskInitiator: {
+                    response = CommandName.QueryTaskSummaryResponse;
+                    List<TaskSummary> results = taskSession.getTasksAssignedAsTaskInitiator((String) cmd.getArguments().get(0),
+                            (String) cmd.getArguments().get(1));
+                    List args = new ArrayList(1);
+                    args.add(results);
+                    Command resultsCmnd = new Command(cmd.getId(),
+                            CommandName.QueryTaskSummaryResponse,
+                            args);
+                    session.write(new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        resultsCmnd ), null);
+                    break;
+                }
+                case QueryTasksAssignedAsExcludedOwner: {
+                    response = CommandName.QueryTaskSummaryResponse;
+                    List<TaskSummary> results = taskSession.getTasksAssignedAsExcludedOwner((String) cmd.getArguments().get(0),
+                            (String) cmd.getArguments().get(1));
+                    List args = new ArrayList(1);
+                    args.add(results);
+                    Command resultsCmnd = new Command(cmd.getId(),
+                            CommandName.QueryTaskSummaryResponse,
+                            args);
+                    session.write(new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        resultsCmnd ), null);
+                    break;
+                }
+                case QueryTasksAssignedAsRecipient: {
+                    response = CommandName.QueryTaskSummaryResponse;
+                    List<TaskSummary> results = taskSession.getTasksAssignedAsRecipient((String) cmd.getArguments().get(0),
+                            (String) cmd.getArguments().get(1));
+                    List args = new ArrayList(1);
+                    args.add(results);
+                    Command resultsCmnd = new Command(cmd.getId(),
+                            CommandName.QueryTaskSummaryResponse,
+                            args);
+                    session.write(new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        resultsCmnd ), null);
+                    break;
+                }
+                case QueryTasksAssignedAsTaskStakeholder: {
+                    response = CommandName.QueryTaskSummaryResponse;
+                    List<TaskSummary> results = taskSession.getTasksAssignedAsTaskStakeholder((String) cmd.getArguments().get(0),
+                            (String) cmd.getArguments().get(1));
+                    List args = new ArrayList(1);
+                    args.add(results);
+                    Command resultsCmnd = new Command(cmd.getId(),
+                            CommandName.QueryTaskSummaryResponse,
+                            args);
+                    session.write(new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        resultsCmnd ), null);
+                    break;
+                }
+                case RegisterForEventRequest: {
+                    response = CommandName.EventTriggerResponse;
+                    EventKey key = (EventKey) cmd.getArguments().get(0);
+                    boolean remove = (Boolean) cmd.getArguments().get(1);
+                    String uuid = (String) cmd.getArguments().get(2);
+                    clients.put(uuid,
+                            session);
+                    GenericEventTransport transport = new GenericEventTransport(String.valueOf(msg.getSessionId()), //this is wrong
+                            msg.getResponseId(), //this is wrong
+                            clients,
+                            remove);
+                    service.getEventKeys().register(key,
+                            transport);
+                    break;
+                }
+                case RegisterClient: {
+                    String uuid = (String) cmd.getArguments().get(0);
+                    clients.put(uuid, session);
+                    break;
+                }
+                default: {
+                    systemEventListener.debug("Unknown command recieved on server");
+                }
+            }
+        } catch (RuntimeException e) {
+            systemEventListener.exception(e.getMessage(),e);
+            e.printStackTrace(System.err);
+            List<Object> list = new ArrayList<Object>(1);
+            list.add(e);
+            Command resultsCmnd = new Command(cmd.getId(), response, list);
+            session.write(new Message( msg.getSessionId(),
+                                        msg.getResponseId(),
+                                        msg.isAsync(),
+                                        resultsCmnd ), null);
+        } finally {
+            taskSession.dispose();
+        }
+    }
+
+    
+    public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
+        systemEventListener.debug("Server IDLE " + session.getIdleCount(status));
+    }
+
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/eventmessaging/EventMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/eventmessaging/EventMessageResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/eventmessaging/EventMessageResponseHandler.java	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,10 @@
+package org.drools.services.task.eventmessaging;
+
+import org.drools.eventmessaging.Payload;
+import org.drools.services.generic.MessageResponseHandler;
+
+
+
+public interface EventMessageResponseHandler extends MessageResponseHandler {
+    public void execute(Payload payload);
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingAddAttachmentMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingAddAttachmentMessageResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingAddAttachmentMessageResponseHandler.java	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,17 @@
+package org.drools.services.task.responseHandlers;
+
+import org.drools.services.generic.Message;
+import org.drools.task.service.Command;
+import org.drools.task.service.responsehandlers.BlockingAddAttachmentResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.AddAttachmentMessageResponseHandler;
+
+public class BlockingAddAttachmentMessageResponseHandler extends BlockingAddAttachmentResponseHandler implements AddAttachmentMessageResponseHandler {
+
+	public void receive(Message message) {
+		Command cmd = (Command) message.getPayload();
+		Long attachmentId = (Long) cmd.getArguments().get(0);
+		Long contentId = (Long) cmd.getArguments().get(1);
+		execute(attachmentId, contentId);
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingAddCommentMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingAddCommentMessageResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingAddCommentMessageResponseHandler.java	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,16 @@
+package org.drools.services.task.responseHandlers;
+
+import org.drools.services.generic.Message;
+import org.drools.task.service.Command;
+import org.drools.task.service.responsehandlers.BlockingAddCommentResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.AddCommentMessageResponseHandler;
+
+public class BlockingAddCommentMessageResponseHandler extends BlockingAddCommentResponseHandler implements AddCommentMessageResponseHandler {
+
+	public void receive(Message message) {
+		Command cmd = (Command) message.getPayload();
+		Long commentId = (Long) cmd.getArguments().get(0);
+		execute(commentId);
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingAddTaskMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingAddTaskMessageResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingAddTaskMessageResponseHandler.java	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,16 @@
+package org.drools.services.task.responseHandlers;
+
+import org.drools.services.generic.Message;
+import org.drools.task.service.Command;
+import org.drools.task.service.responsehandlers.BlockingAddTaskResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.AddTaskMessageResponseHandler;
+
+public class BlockingAddTaskMessageResponseHandler extends BlockingAddTaskResponseHandler implements AddTaskMessageResponseHandler {
+
+	public void receive(Message message) {
+		Command cmd = (Command) message.getPayload();
+		Long taskId = (Long) cmd.getArguments().get(0);
+		execute(taskId);
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingDeleteAttachmentMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingDeleteAttachmentMessageResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingDeleteAttachmentMessageResponseHandler.java	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,13 @@
+package org.drools.services.task.responseHandlers;
+
+import org.drools.services.generic.Message;
+import org.drools.task.service.responsehandlers.BlockingDeleteAttachmentResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.DeleteAttachmentMessageResponseHandler;
+
+public class BlockingDeleteAttachmentMessageResponseHandler extends BlockingDeleteAttachmentResponseHandler implements DeleteAttachmentMessageResponseHandler {
+
+	public void receive(Message message) {
+		setDone(true);
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingDeleteCommentMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingDeleteCommentMessageResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingDeleteCommentMessageResponseHandler.java	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,13 @@
+package org.drools.services.task.responseHandlers;
+
+import org.drools.services.generic.Message;
+import org.drools.task.service.responsehandlers.BlockingDeleteCommentResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.DeleteCommentMessageResponseHandler;
+
+public class BlockingDeleteCommentMessageResponseHandler extends BlockingDeleteCommentResponseHandler implements DeleteCommentMessageResponseHandler {
+
+	public void receive(Message message) {
+		setIsDone(true);
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingEventMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingEventMessageResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingEventMessageResponseHandler.java	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,17 @@
+package org.drools.services.task.responseHandlers;
+
+import org.drools.eventmessaging.Payload;
+import org.drools.services.generic.Message;
+import org.drools.task.service.Command;
+import org.drools.task.service.responsehandlers.BlockingEventResponseHandler;
+import org.drools.services.task.eventmessaging.EventMessageResponseHandler;
+
+public class BlockingEventMessageResponseHandler extends BlockingEventResponseHandler implements EventMessageResponseHandler {
+
+	public void receive(Message message) {
+		Command cmd = (Command) message.getPayload();
+		Payload payload = (Payload) cmd.getArguments().get(0);
+		execute(payload);
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingGetContentMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingGetContentMessageResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingGetContentMessageResponseHandler.java	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,17 @@
+package org.drools.services.task.responseHandlers;
+
+import org.drools.services.generic.Message;
+import org.drools.task.Content;
+import org.drools.task.service.Command;
+import org.drools.task.service.responsehandlers.BlockingGetContentResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.GetContentMessageResponseHandler;
+
+public class BlockingGetContentMessageResponseHandler extends BlockingGetContentResponseHandler implements GetContentMessageResponseHandler {
+
+	public void receive(Message message) {
+		Command cmd = (Command) message.getPayload();
+		Content content = (Content) cmd.getArguments().get(0);
+		execute(content);
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingGetTaskMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingGetTaskMessageResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingGetTaskMessageResponseHandler.java	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,17 @@
+package org.drools.services.task.responseHandlers;
+
+import org.drools.services.generic.Message;
+import org.drools.task.Task;
+import org.drools.task.service.Command;
+import org.drools.task.service.responsehandlers.BlockingGetTaskResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.GetTaskMessageResponseHandler;
+
+public class BlockingGetTaskMessageResponseHandler extends BlockingGetTaskResponseHandler implements GetTaskMessageResponseHandler {
+
+	public void receive(Message message) {
+		Command cmd = (Command) message.getPayload();
+		Task task = (Task) cmd.getArguments().get(0);
+		execute(task);
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingSetContentMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingSetContentMessageResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingSetContentMessageResponseHandler.java	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,16 @@
+package org.drools.services.task.responseHandlers;
+
+import org.drools.services.generic.Message;
+import org.drools.task.service.Command;
+import org.drools.task.service.responsehandlers.BlockingSetContentResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.SetDocumentMessageResponseHandler;
+
+public class BlockingSetContentMessageResponseHandler extends BlockingSetContentResponseHandler implements SetDocumentMessageResponseHandler {
+
+	public void receive(Message message) {
+		Command cmd = (Command) message.getPayload();
+		long contentId = (Long) cmd.getArguments().get(0);
+		execute(contentId);
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingTaskOperationMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingTaskOperationMessageResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingTaskOperationMessageResponseHandler.java	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,13 @@
+package org.drools.services.task.responseHandlers;
+
+import org.drools.services.generic.Message;
+import org.drools.task.service.responsehandlers.BlockingTaskOperationResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.TaskOperationMessageResponseHandler;
+
+public class BlockingTaskOperationMessageResponseHandler extends BlockingTaskOperationResponseHandler implements TaskOperationMessageResponseHandler {
+
+	public void receive(Message message) {
+		setDone(true);
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingTaskSummaryMessageResponseHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingTaskSummaryMessageResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/main/java/org/drools/services/task/responseHandlers/BlockingTaskSummaryMessageResponseHandler.java	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,20 @@
+package org.drools.services.task.responseHandlers;
+
+import java.util.List;
+import org.drools.services.generic.Message;
+
+import org.drools.task.query.TaskSummary;
+import org.drools.task.service.Command;
+import org.drools.task.service.responsehandlers.BlockingTaskSummaryResponseHandler;
+import org.drools.services.task.TaskClientMessageHandlerImpl.TaskSummaryMessageResponseHandler;
+
+public class BlockingTaskSummaryMessageResponseHandler extends BlockingTaskSummaryResponseHandler implements TaskSummaryMessageResponseHandler {
+
+	public void receive(Message message) {
+		Command cmd = (Command) message.getPayload();
+		List<TaskSummary> results = (List<TaskSummary>) cmd.getArguments().get(0);
+		execute(results);
+	}
+
+}
+

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/java/org/drools/services/task/BaseTaskServiceTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/java/org/drools/services/task/BaseTaskServiceTest.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/java/org/drools/services/task/BaseTaskServiceTest.java	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,774 @@
+package org.drools.services.task;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import junit.framework.Assert;
+
+import org.drools.process.instance.WorkItem;
+import org.drools.process.instance.WorkItemHandler;
+import org.drools.process.instance.WorkItemManager;
+import org.drools.process.instance.impl.WorkItemImpl;
+import org.drools.services.ExecutionNode;
+import org.drools.services.task.responseHandlers.BlockingGetContentMessageResponseHandler;
+import org.drools.services.task.responseHandlers.BlockingGetTaskMessageResponseHandler;
+import org.drools.services.task.responseHandlers.BlockingTaskOperationMessageResponseHandler;
+import org.drools.services.task.responseHandlers.BlockingTaskSummaryMessageResponseHandler;
+import org.drools.task.AccessType;
+import org.drools.task.Group;
+import org.drools.task.Status;
+import org.drools.task.Task;
+import org.drools.task.User;
+import org.drools.task.query.TaskSummary;
+import org.drools.task.service.ContentData;
+import org.drools.task.service.PermissionDeniedException;
+import org.junit.Test;
+
+
+
+
+public abstract class BaseTaskServiceTest {
+
+    protected CommandBasedServicesWSHumanTaskHandler handler;
+    protected HumanTaskService humanTaskClient;
+    protected static final int DEFAULT_WAIT_TIME = 5000;
+    protected static final int MANAGER_COMPLETION_WAIT_TIME = DEFAULT_WAIT_TIME;
+    protected static final int MANAGER_ABORT_WAIT_TIME = DEFAULT_WAIT_TIME;
+    protected Map<String, User> users;
+    protected Map<String, Group> groups;
+    protected ExecutionNode node;
+
+
+    @Test
+    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);
+        responseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        List<TaskSummary> tasks = responseHandler.getResults();
+        Assert.assertEquals(1, tasks.size());
+        TaskSummary task = tasks.get(0);
+        Assert.assertEquals("TaskName", task.getName());
+        Assert.assertEquals(10, task.getPriority());
+        Assert.assertEquals("Comment", task.getDescription());
+        Assert.assertEquals(Status.Reserved, task.getStatus());
+        Assert.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());
+        Assert.assertTrue(manager.waitTillCompleted(DEFAULT_WAIT_TIME));
+        Thread.sleep(500);
+    }
+    @Test
+    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);
+        responseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        List<TaskSummary> tasks = responseHandler.getResults();
+        Assert.assertEquals(1, tasks.size());
+        TaskSummary task = tasks.get(0);
+        Assert.assertEquals("TaskName", task.getName());
+        Assert.assertEquals(10, task.getPriority());
+        Assert.assertEquals("Comment", task.getDescription());
+        Assert.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());
+
+        Assert.assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME));
+
+        Thread.sleep(500);
+    }
+    @Test
+    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);
+        responseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        List<TaskSummary> tasks = responseHandler.getResults();
+        Assert.assertEquals(1, tasks.size());
+        TaskSummary taskSummary = tasks.get(0);
+        Assert.assertEquals("TaskName", taskSummary.getName());
+        Assert.assertEquals(10, taskSummary.getPriority());
+        Assert.assertEquals("Comment", taskSummary.getDescription());
+        Assert.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;
+        System.out.println("1");
+        try {
+            operationResponseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+            System.out.println("2");
+        } catch (PermissionDeniedException e) {
+        	System.out.println("EXCEPTION: " + e);
+            denied = e;
+        }
+
+        Assert.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();
+        Assert.assertEquals(Status.Ready, task.getTaskData().getStatus());
+
+        Thread.sleep(500);
+    }
+    @Test
+    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);
+        responseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        List<TaskSummary> tasks = responseHandler.getResults();
+        Assert.assertEquals(2, tasks.size());
+
+        Thread.sleep(500);
+    }
+    @Test
+    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);
+        responseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        List<TaskSummary> tasks = responseHandler.getResults();
+        Assert.assertEquals(1, tasks.size());
+        TaskSummary task = tasks.get(0);
+        Assert.assertEquals("TaskName", task.getName());
+        Assert.assertEquals(10, task.getPriority());
+        Assert.assertEquals("Comment", task.getDescription());
+        Assert.assertEquals(Status.Reserved, task.getStatus());
+        Assert.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());
+
+        Assert.assertTrue(manager.waitTillAborted(MANAGER_ABORT_WAIT_TIME));
+
+        Thread.sleep(500);
+    }
+    @Test
+    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);
+        responseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        List<TaskSummary> tasks = responseHandler.getResults();
+        Assert.assertEquals(1, tasks.size());
+        TaskSummary task = tasks.get(0);
+        Assert.assertEquals("TaskName", task.getName());
+        Assert.assertEquals(10, task.getPriority());
+        Assert.assertEquals("Comment", task.getDescription());
+        Assert.assertEquals(Status.Reserved, task.getStatus());
+        Assert.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());
+
+        Assert.assertTrue(manager.waitTillAborted(MANAGER_ABORT_WAIT_TIME));
+    }
+    @Test
+    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);
+        responseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        List<TaskSummary> tasks = responseHandler.getResults();
+        Assert.assertEquals(0, tasks.size());
+    }
+    @Test
+    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);
+        responseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        List<TaskSummary> tasks = responseHandler.getResults();
+        Assert.assertEquals(1, tasks.size());
+
+        handler.abortWorkItem(workItem, manager);
+
+        Thread.sleep(500);
+
+        responseHandler = new BlockingTaskSummaryMessageResponseHandler();
+        humanTaskClient.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+        tasks = responseHandler.getResults();
+        Assert.assertEquals(1, tasks.size());
+    }
+    @Test
+    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);
+        responseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        List<TaskSummary> tasks = responseHandler.getResults();
+        Assert.assertEquals(1, tasks.size());
+        TaskSummary taskSummary = tasks.get(0);
+        Assert.assertEquals("TaskName", taskSummary.getName());
+        Assert.assertEquals(10, taskSummary.getPriority());
+        Assert.assertEquals("Comment", taskSummary.getDescription());
+        Assert.assertEquals(Status.Reserved, taskSummary.getStatus());
+        Assert.assertEquals("Darth Vader", taskSummary.getActualOwner().getId());
+
+        BlockingGetTaskMessageResponseHandler getTaskResponseHandler = new BlockingGetTaskMessageResponseHandler();
+        humanTaskClient.getTask(taskSummary.getId(), getTaskResponseHandler);
+        Task task = getTaskResponseHandler.getTask();
+        Assert.assertEquals(AccessType.Inline, task.getTaskData().getDocumentAccessType());
+        long contentId = task.getTaskData().getDocumentContentId();
+        Assert.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();
+        Assert.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());
+
+        Assert.assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME));
+        Map<String, Object> results = manager.getResults();
+        Assert.assertNotNull(results);
+        Assert.assertEquals("Darth Vader", results.get("ActorId"));
+        Assert.assertEquals("This is the result", results.get("Result"));
+    }
+    @Test
+    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);
+        responseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        List<TaskSummary> tasks = responseHandler.getResults();
+        Assert.assertEquals(1, tasks.size());
+        TaskSummary task = tasks.get(0);
+        Assert.assertEquals("TaskNameParent", task.getName());
+        Assert.assertEquals(10, task.getPriority());
+        Assert.assertEquals("CommentParent", task.getDescription());
+        Assert.assertEquals(Status.Reserved, task.getStatus());
+        Assert.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();
+        Assert.assertEquals(Status.InProgress, parentTask.getTaskData().getStatus());
+        Assert.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();
+        Assert.assertEquals(2, subTasks.size());
+        TaskSummary subTaskSummary1 = subTasks.get(0);
+        TaskSummary subTaskSummary2 = subTasks.get(1);
+        Assert.assertNotNull(subTaskSummary1);
+        Assert.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();
+        Assert.assertEquals(Status.InProgress, subTask1.getTaskData().getStatus());
+        Assert.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();
+        Assert.assertEquals(Status.InProgress, subTask2.getTaskData().getStatus());
+        Assert.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();
+        Assert.assertEquals(Status.Completed, subTask1.getTaskData().getStatus());
+        Assert.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();
+        Assert.assertEquals(Status.Completed, subTask2.getTaskData().getStatus());
+        Assert.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();
+        Assert.assertEquals(Status.Completed, parentTask.getTaskData().getStatus());
+        Assert.assertEquals(users.get("darth"), parentTask.getTaskData().getActualOwner());
+
+        Assert.assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME));
+    }
+    @Test
+    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);
+        responseHandler.waitTillDone(DEFAULT_WAIT_TIME);
+        List<TaskSummary> tasks = responseHandler.getResults();
+        Assert.assertEquals(1, tasks.size());
+        TaskSummary task = tasks.get(0);
+        Assert.assertEquals("TaskNameParent", task.getName());
+        Assert.assertEquals(10, task.getPriority());
+        Assert.assertEquals("CommentParent", task.getDescription());
+        Assert.assertEquals(Status.Reserved, task.getStatus());
+        Assert.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();
+        Assert.assertEquals(Status.InProgress, parentTask.getTaskData().getStatus());
+        Assert.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();
+        Assert.assertEquals(2, subTasks.size());
+        TaskSummary subTaskSummary1 = subTasks.get(0);
+        TaskSummary subTaskSummary2 = subTasks.get(1);
+        Assert.assertNotNull(subTaskSummary1);
+        Assert.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();
+        Assert.assertEquals(Status.InProgress, subTask1.getTaskData().getStatus());
+        Assert.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();
+        Assert.assertEquals(Status.InProgress, subTask2.getTaskData().getStatus());
+        Assert.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();
+        Assert.assertEquals(Status.Completed, subTask1.getTaskData().getStatus());
+        Assert.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();
+        Assert.assertEquals(Status.Completed, subTask2.getTaskData().getStatus());
+        Assert.assertEquals(users.get("darth"), subTask2.getTaskData().getActualOwner());
+
+        Assert.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) {
+        }
+
+        @Override
+        public void registerWorkItemHandler(String workItemName, org.drools.runtime.process.WorkItemHandler handler) {
+            throw new UnsupportedOperationException("Not supported yet.");
+        }
+
+    }
+
+
+
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/java/org/drools/services/task/CommandBasedServicesWSHumanTaskHandlerTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/java/org/drools/services/task/CommandBasedServicesWSHumanTaskHandlerTest.java	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/java/org/drools/services/task/CommandBasedServicesWSHumanTaskHandlerTest.java	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,218 @@
+package org.drools.services.task;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import org.apache.commons.collections.map.HashedMap;
+
+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.KnowledgeBaseFactoryService;
+import org.drools.SystemEventListenerFactory;
+import org.drools.io.impl.ClassPathResource;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.services.ExecutionNodeConnection;
+import org.drools.services.RemoteExecutionNodeConnection;
+import org.drools.services.generic.ExecutionNodeData;
+import org.drools.services.generic.GenericConnector;
+import org.drools.services.generic.GenericMessageHandlerImpl;
+import org.drools.services.remote.mina.MinaAcceptor;
+import org.drools.services.remote.mina.MinaConnector;
+import org.drools.services.remote.mina.MinaIoHandler;
+import org.drools.task.Group;
+import org.drools.task.User;
+import org.drools.task.service.SendIcal;
+import org.drools.task.service.TaskService;
+import org.drools.task.service.TaskServiceSession;
+import org.junit.After;
+import org.junit.Before;
+import org.mvel2.MVEL;
+import org.mvel2.ParserContext;
+import org.mvel2.compiler.ExpressionCompiler;
+
+public class CommandBasedServicesWSHumanTaskHandlerTest extends BaseTaskServiceTest {
+
+    
+    
+    private MinaAcceptor server;
+    private MinaAcceptor humanTaskServer;
+    private ExecutionNodeConnection nodeConnection;
+  
+    protected EntityManagerFactory emf;
+    
+    protected static TaskService taskService;
+    protected TaskServiceSession taskSession;
+    protected GenericConnector htMinaClient;
+    protected GenericConnector minaClient;
+    @Before
+    public void setUpTaskService() 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(new ClassPathResource("org/drools/task/LoadUsers.mvel").getInputStream());
+            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(new ClassPathResource("org/drools/task/LoadGroups.mvel").getInputStream());
+            groups = (Map<String, Group>) eval(reader, vars);
+            for (Group group : groups.values()) {
+                taskSession.addGroup(group);
+            }
+        } finally {
+            if (reader != null) {
+                reader.close();
+            }
+        }
+    
+        
+        SocketAddress address = new InetSocketAddress("127.0.0.1", 9123);
+        ExecutionNodeData nodeData = new ExecutionNodeData();
+        // Setup Execution Node Server
+        SocketAcceptor acceptor = new NioSocketAcceptor();
+        acceptor.setHandler(new MinaIoHandler(SystemEventListenerFactory.getSystemEventListener(),
+                new GenericMessageHandlerImpl(nodeData,
+                SystemEventListenerFactory.getSystemEventListener())));
+        this.server = new MinaAcceptor(acceptor, address);
+        this.server.start();
+        Thread.sleep(5000);
+        // 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();
+        Thread.sleep(5000);
+        // End Human task Server configuration
+
+        // setup the ht client
+        NioSocketConnector htclientConnector = new NioSocketConnector();
+        htclientConnector.setHandler(new MinaIoHandler(SystemEventListenerFactory.getSystemEventListener()));
+        htMinaClient = new MinaConnector("client ht",
+                htclientConnector,
+                htAddress,
+                SystemEventListenerFactory.getSystemEventListener());
+
+         boolean connected = htMinaClient.connect();
+            if (!connected) {
+                throw new IllegalArgumentException("Could not connect task client");
+            }
+
+        // setup RemoteService client
+        NioSocketConnector clientConnector = new NioSocketConnector();
+        clientConnector.setHandler(new MinaIoHandler(SystemEventListenerFactory.getSystemEventListener()));
+        minaClient = new MinaConnector("client SM",
+                clientConnector,
+                address,
+                SystemEventListenerFactory.getSystemEventListener());
+
+
+        this.nodeConnection = new RemoteExecutionNodeConnection("client Execution Node", minaClient); //new ServiceManagerRemoteClient("client SM", minaClient, services);
+        node =  this.nodeConnection.connect();
+        
+        
+        
+
+        
+        KnowledgeBase kbase = this.node.get(KnowledgeBaseFactoryService.class).newKnowledgeBase();
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        int sessionId = ksession.getId();
+
+        node.set(HumanTaskFactoryService.class, new HumanTaskServiceProviderRemoteClient(htMinaClient, sessionId));
+
+        this.humanTaskClient = this.node.get(HumanTaskFactoryService.class).newHumanTaskService();
+        
+
+        this.handler = new CommandBasedServicesWSHumanTaskHandler(ksession);
+        
+        
+    }
+    @After
+    public void tearDown() throws Exception {
+        this.humanTaskClient.disconnect();
+        this.nodeConnection.disconnect();
+        this.handler.dispose();
+        this.server.stop();
+        this.humanTaskServer.stop();
+        
+        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);
+    }
+}

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/META-INF/drools.email.conf
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/META-INF/drools.email.conf	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/META-INF/drools.email.conf	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,5 @@
+from = from at domain.com
+replyTo = replyTo at domain.com
+mail.smtp.host = localhost
+mail.smtp.port = 25
+defaultLanguage = en-UK
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/META-INF/orm.xml
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/META-INF/orm.xml	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/META-INF/orm.xml	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,535 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
+               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+               xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd"
+               version="1.0">
+      <named-query name="TasksAssignedAsBusinessAdministrator">
+          <query>
+select
+     new org.drools.task.query.TaskSummary(
+     t.id,
+     names.text,
+     subjects.text,
+     descriptions.text,
+     t.taskData.status,
+     t.priority,
+     t.taskData.skipable,
+     t.taskData.actualOwner,
+     t.taskData.createdBy,
+     t.taskData.createdOn,
+     t.taskData.activationTime,
+     t.taskData.expirationTime)
+from
+    Task t left join t.taskData.createdBy,
+    I18NText names,
+    I18NText subjects,
+    I18NText descriptions,
+    OrganizationalEntity businessAdministrator
+where
+    businessAdministrator.id = :userId and
+    businessAdministrator in elements ( t.peopleAssignments.businessAdministrators  )  and
+
+    names.language = :language and
+    names in elements( t.names) and
+
+    (
+    subjects.language = :language and
+    subjects in elements( t.subjects)
+    or t.subjects.size = 0
+    ) and
+
+    (
+    descriptions.language = :language and
+    descriptions in elements( t.descriptions)
+    or t.descriptions.size = 0
+    ) and
+
+    t.taskData.expirationTime is null
+          </query>
+          <!-- hint name="org.hibernate.timeout" value="200"/ -->
+      </named-query>
+      <named-query name="TasksAssignedAsExcludedOwner">
+          <query>
+select
+     new org.drools.task.query.TaskSummary(
+     t.id,
+     names.text,
+     subjects.text,
+     descriptions.text,
+     t.taskData.status,
+     t.priority,
+     t.taskData.skipable,
+     t.taskData.actualOwner,
+     t.taskData.createdBy,
+     t.taskData.createdOn,
+     t.taskData.activationTime,
+     t.taskData.expirationTime)
+from
+    Task t left join t.taskData.createdBy,
+    I18NText names,
+    I18NText subjects,
+    I18NText descriptions,
+    OrganizationalEntity excludedOwners
+where
+    excludedOwners.id = :userId and
+    excludedOwners in elements ( t.peopleAssignments.excludedOwners  )  and
+
+    names.language = :language and
+    names in elements( t.names) and
+
+    (
+    subjects.language = :language and
+    subjects in elements( t.subjects)
+    or t.subjects.size = 0
+    ) and
+
+    (
+    descriptions.language = :language and
+    descriptions in elements( t.descriptions)
+    or t.descriptions.size = 0
+    ) and
+
+    t.taskData.expirationTime is null
+          </query>
+          <!-- hint name="org.hibernate.timeout" value="200"/ -->
+      </named-query>
+      <named-query name="TasksAssignedAsPotentialOwner">
+          <query>
+select
+     new org.drools.task.query.TaskSummary(
+     t.id,
+     names.text,
+     subject.text,
+     descriptions.text,
+     t.taskData.status,
+     t.priority,
+     t.taskData.skipable,
+     t.taskData.actualOwner,
+     t.taskData.createdBy,
+     t.taskData.createdOn,
+     t.taskData.activationTime,
+     t.taskData.expirationTime)
+from
+    Task t
+    left join t.taskData.createdBy
+    left join t.taskData.actualOwner
+    left join t.subjects as subject,
+    I18NText names,
+    I18NText descriptions,
+    OrganizationalEntity potentialOwners
+where
+    potentialOwners.id = :userId and
+    potentialOwners in elements ( t.peopleAssignments.potentialOwners  )  and
+
+    names.language = :language and
+    names in elements( t.names) and
+
+    (
+    subject.language = :language
+    or t.subjects.size = 0
+    ) and
+
+    (
+    descriptions.language = :language and
+    descriptions in elements( t.descriptions)
+    or t.descriptions.size = 0
+    ) and
+
+
+
+
+    t.taskData.status in ('Created', 'Ready', 'Reserved', 'InProgress', 'Suspended') and
+
+    t.taskData.expirationTime is null
+          </query>
+          <!-- hint name="org.hibernate.timeout" value="200"/ -->
+      </named-query>
+            <named-query name="TasksAssignedAsPotentialOwnerWithGroups">
+          <query>
+select
+     new org.drools.task.query.TaskSummary(
+     t.id,
+     names.text,
+     subjects.text,
+     descriptions.text,
+     t.taskData.status,
+     t.priority,
+     t.taskData.skipable,
+     t.taskData.actualOwner,
+     t.taskData.createdBy,
+     t.taskData.createdOn,
+     t.taskData.activationTime,
+     t.taskData.expirationTime)
+from
+    Task t left join t.taskData.createdBy left join t.taskData.actualOwner,
+    I18NText names,
+    I18NText subjects,
+    I18NText descriptions,
+    OrganizationalEntity potentialOwners
+where
+    ( potentialOwners.id = :userId or potentialOwners.id in (:groupIds) ) and
+    potentialOwners in elements ( t.peopleAssignments.potentialOwners )  and
+
+    names.language = :language and
+    names in elements( t.names) and
+
+
+    (
+    subjects.language = :language and
+    subjects in elements( t.subjects)
+    or t.subjects.size = 0
+    ) and
+
+    (
+    descriptions.language = :language and
+    descriptions in elements( t.descriptions)
+    or t.descriptions.size = 0
+    ) and
+
+    t.taskData.status in ('Created', 'Ready', 'Reserved', 'InProgress', 'Suspended') and
+
+    t.taskData.expirationTime is null
+          </query>
+          <!-- hint name="org.hibernate.timeout" value="200"/ -->
+      </named-query>
+
+       <named-query name="TasksAssignedAsPotentialOwnerByGroup">
+          <query>
+select
+     new org.drools.task.query.TaskSummary(
+     t.id,
+     names.text,
+     subjects.text,
+     descriptions.text,
+     t.taskData.status,
+     t.priority,
+     t.taskData.skipable,
+     t.taskData.actualOwner,
+     t.taskData.createdBy,
+     t.taskData.createdOn,
+     t.taskData.activationTime,
+     t.taskData.expirationTime)
+from
+    Task t left join t.taskData.createdBy left join t.taskData.actualOwner,
+    I18NText names,
+    I18NText subjects,
+    I18NText descriptions,
+    OrganizationalEntity potentialOwners
+where
+    potentialOwners.id = :groupId and
+    potentialOwners in elements ( t.peopleAssignments.potentialOwners  )  and
+
+    names.language = :language and
+    names in elements( t.names) and
+
+    (
+    subjects.language = :language and
+    subjects in elements( t.subjects)
+    or t.subjects.size = 0
+    ) and
+
+    (
+    descriptions.language = :language and
+    descriptions in elements( t.descriptions)
+    or t.descriptions.size = 0
+    ) and
+
+    t.taskData.status in ('Created', 'Ready', 'Reserved', 'InProgress', 'Suspended') and
+
+    t.taskData.expirationTime is null
+          </query>
+          <!-- hint name="org.hibernate.timeout" value="200"/ -->
+      </named-query>
+
+      <named-query name="SubTasksAssignedAsPotentialOwner">
+          <query>
+select
+     new org.drools.task.query.TaskSummary(
+     t.id,
+     names.text,
+     subjects.text,
+     descriptions.text,
+     t.taskData.status,
+     t.priority,
+     t.taskData.skipable,
+     t.taskData.actualOwner,
+     t.taskData.createdBy,
+     t.taskData.createdOn,
+     t.taskData.activationTime,
+     t.taskData.expirationTime)
+from
+    Task t left join t.taskData.createdBy left join t.taskData.actualOwner,
+    I18NText names,
+    I18NText subjects,
+    I18NText descriptions,
+    OrganizationalEntity potentialOwners
+where
+    t.taskData.parentId = :parentId and
+    potentialOwners.id = :userId and
+    potentialOwners in elements ( t.peopleAssignments.potentialOwners  )  and
+
+    names.language = :language and
+    names in elements( t.names) and
+
+    (
+    subjects.language = :language and
+    subjects in elements( t.subjects)
+    or t.subjects.size = 0
+    ) and
+
+    (
+    descriptions.language = :language and
+    descriptions in elements( t.descriptions)
+    or t.descriptions.size = 0
+    ) and
+
+    t.taskData.status in ('Created', 'Ready', 'Reserved', 'InProgress', 'Suspended') and
+
+    t.taskData.expirationTime is null
+          </query>
+          <!-- hint name="org.hibernate.timeout" value="200"/ -->
+      </named-query>
+
+<named-query name="GetSubTasksByParentTaskId">
+          <query>
+select
+     new org.drools.task.query.TaskSummary(
+     t.id,
+     names.text,
+     subjects.text,
+     descriptions.text,
+     t.taskData.status,
+     t.priority,
+     t.taskData.skipable,
+     t.taskData.actualOwner,
+     t.taskData.createdBy,
+     t.taskData.createdOn,
+     t.taskData.activationTime,
+     t.taskData.expirationTime)
+from
+    Task t,
+    I18NText names,
+    I18NText subjects,
+    I18NText descriptions
+
+where
+    t.taskData.parentId = :parentId and
+    names.language = :language and
+    names in elements( t.names) and
+
+    (
+    subjects.language = :language and
+    subjects in elements( t.subjects)
+    or t.subjects.size = 0
+    ) and
+
+    (
+    descriptions.language = :language and
+    descriptions in elements( t.descriptions)
+    or t.descriptions.size = 0
+    ) and
+
+    t.taskData.status in ('Created', 'Ready', 'Reserved', 'InProgress', 'Suspended') and
+
+    t.taskData.expirationTime is null
+          </query>
+          <!-- hint name="org.hibernate.timeout" value="200"/ -->
+      </named-query>
+
+
+      <named-query name="TasksAssignedAsRecipient">
+          <query>
+select
+     new org.drools.task.query.TaskSummary(
+     t.id,
+     names.text,
+     subjects.text,
+     descriptions.text,
+     t.taskData.status,
+     t.priority,
+     t.taskData.skipable,
+     t.taskData.actualOwner,
+     t.taskData.createdBy,
+     t.taskData.createdOn,
+     t.taskData.activationTime,
+     t.taskData.expirationTime)
+from
+    Task t left join t.taskData.createdBy,
+    I18NText names,
+    I18NText subjects,
+    I18NText descriptions,
+    OrganizationalEntity recipients
+where
+    recipients.id = :userId and
+    recipients in elements ( t.peopleAssignments.recipients  )  and
+
+    names.language = :language and
+    names in elements( t.names) and
+
+    (
+    subjects.language = :language and
+    subjects in elements( t.subjects)
+    or t.subjects.size = 0
+    ) and
+
+    (
+    descriptions.language = :language and
+    descriptions in elements( t.descriptions)
+    or t.descriptions.size = 0
+    ) and
+
+    t.taskData.expirationTime is null
+          </query>
+          <!-- hint name="org.hibernate.timeout" value="200"/ -->
+      </named-query>
+      <named-query name="TasksAssignedAsTaskInitiator">
+          <query>
+select
+     new org.drools.task.query.TaskSummary(
+     t.id,
+     names.text,
+     subjects.text,
+     descriptions.text,
+     t.taskData.status,
+     t.priority,
+     t.taskData.skipable,
+     t.taskData.actualOwner,
+     t.taskData.createdBy,
+     t.taskData.createdOn,
+     t.taskData.activationTime,
+     t.taskData.expirationTime)
+from
+    Task t left join t.taskData.createdBy,
+    I18NText names,
+    I18NText subjects,
+    I18NText descriptions,
+    OrganizationalEntity taskInitiator
+where
+    taskInitiator.id = :userId and
+    taskInitiator = t.peopleAssignments.taskInitiator and
+
+    names.language = :language and
+    names in elements( t.names) and
+
+    (
+    subjects.language = :language and
+    subjects in elements( t.subjects)
+    or t.subjects.size = 0
+    ) and
+
+    (
+    descriptions.language = :language and
+    descriptions in elements( t.descriptions)
+    or t.descriptions.size = 0
+    ) and
+
+    t.taskData.expirationTime is null
+          </query>
+          <!-- hint name="org.hibernate.timeout" value="200"/ -->
+      </named-query>
+      <named-query name="TasksAssignedAsTaskStakeholder">
+          <query>
+select
+     new org.drools.task.query.TaskSummary(
+     t.id,
+     names.text,
+     subjects.text,
+     descriptions.text,
+     t.taskData.status,
+     t.priority,
+     t.taskData.skipable,
+     t.taskData.actualOwner,
+     t.taskData.createdBy,
+     t.taskData.createdOn,
+     t.taskData.activationTime,
+     t.taskData.expirationTime)
+from
+    Task t left join t.taskData.createdBy,
+    I18NText names,
+    I18NText subjects,
+    I18NText descriptions,
+    OrganizationalEntity taskStakeholder
+where
+    taskStakeholder.id = :userId and
+    taskStakeholder in elements ( t.peopleAssignments.taskStakeholders  )  and
+
+    names.language = :language and
+    names in elements( t.names) and
+
+    (
+    subjects.language = :language and
+    subjects in elements( t.subjects)
+    or t.subjects.size = 0
+    ) and
+
+    (
+    descriptions.language = :language and
+    descriptions in elements( t.descriptions)
+    or t.descriptions.size = 0
+    ) and
+
+    t.taskData.expirationTime is null
+          </query>
+          <!-- hint name="org.hibernate.timeout" value="200"/ -->
+      </named-query>
+      <named-query name="TasksOwned">
+          <query>
+select
+    new org.drools.task.query.TaskSummary(
+    t.id,
+    names.text,
+    subjects.text,
+    descriptions.text,
+    t.taskData.status,
+    t.priority,
+    t.taskData.skipable,
+    t.taskData.actualOwner,
+    t.taskData.createdBy,
+    t.taskData.createdOn,
+    t.taskData.activationTime,
+    t.taskData.expirationTime)
+from
+    Task t left join t.taskData.createdBy,
+    I18NText names,
+    I18NText subjects,
+    I18NText descriptions
+where
+    t.taskData.actualOwner.id = :userId and
+    names in elements( t.names) and
+    names.language = :language and
+              
+    (
+    subjects.language = :language and
+    subjects in elements( t.subjects)
+    or t.subjects.size = 0
+    ) and
+
+    (
+    descriptions.language = :language and
+    descriptions in elements( t.descriptions)
+    or t.descriptions.size = 0
+    ) and
+
+    t.taskData.expirationTime is null
+          </query>
+          <!-- hint name="org.hibernate.timeout" value="200"/ -->
+      </named-query>
+	  <named-query name="UnescalatedDeadlines">
+          <query>
+select
+     new org.drools.task.query.DeadlineSummary(
+     t.id,
+     d.id,
+     d.date)
+from
+    Task t,
+    Deadline d
+where
+    (d in elements( t.deadlines.startDeadlines ) or d in elements( t.deadlines.endDeadlines ) ) and
+    d.escalated = false
+order by
+    d.date
+          </query>
+          <!-- hint name="org.hibernate.timeout" value="200"/ -->
+      </named-query>
+</entity-mappings>

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/META-INF/persistence.xml
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/META-INF/persistence.xml	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/META-INF/persistence.xml	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<persistence version="1.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd
+http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd" xmlns:orm="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/persistence">
+    <persistence-unit name="org.drools.task">
+        <provider>org.hibernate.ejb.HibernatePersistence</provider>
+        <class>org.drools.task.Attachment</class>
+        <class>org.drools.task.Content</class>
+        <class>org.drools.task.BooleanExpression</class>
+        <class>org.drools.task.Comment</class>
+        <class>org.drools.task.Deadline</class>
+        <class>org.drools.task.Comment</class>
+        <class>org.drools.task.Deadline</class>
+        <class>org.drools.task.Delegation</class>
+        <class>org.drools.task.Escalation</class>
+        <class>org.drools.task.Group</class>
+        <class>org.drools.task.I18NText</class>
+        <class>org.drools.task.Notification</class>
+        <class>org.drools.task.EmailNotification</class>
+        <class>org.drools.task.EmailNotificationHeader</class>
+        <class>org.drools.task.PeopleAssignments</class>
+        <class>org.drools.task.Reassignment</class>
+        <class>org.drools.task.Status</class>
+        <class>org.drools.task.Task</class>
+        <class>org.drools.task.TaskData</class>
+        <class>org.drools.task.SubTasksStrategy</class>
+        <class>org.drools.task.OnParentAbortAllSubTasksEndStrategy</class>
+        <class>org.drools.task.OnAllSubTasksEndParentEndStrategy</class>
+
+        <class>org.drools.task.User</class>
+
+	    <properties>
+	        <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
+	        <property name="hibernate.connection.driver_class" value="org.h2.Driver"/>
+	        <property name="hibernate.connection.url" value="jdbc:h2:mem:mydb" />
+	        <!--  property name="hibernate.connection.url" value="jdbc:h2:file:\dev\drools\trunk7\drools-process\drools-process-task\mydb"/ -->
+
+<!--			<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>-->
+<!--	        <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>	  	        -->
+<!--	        <property name="hibernate.connection.url" value="jdbc:postgresql://localhost/postgres"/>-->
+
+
+	        <property name="hibernate.connection.username" value="sa"/>
+	        <property name="hibernate.connection.password" value="sasa"/>
+	        <property name="hibernate.connection.autocommit" value="false" />
+	        <property name="hibernate.max_fetch_depth" value="3"/>
+		    <property name="hibernate.hbm2ddl.auto" value="create" />
+            <property name="hibernate.show_sql" value="true" />
+	    </properties>
+    </persistence-unit>
+
+</persistence>

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/FullyPopulatedTask.mvel
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/FullyPopulatedTask.mvel	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/FullyPopulatedTask.mvel	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,138 @@
+with ( new Task() ) { 
+    priority = 100,
+    peopleAssignments = (with ( new PeopleAssignments() ) {        
+        taskInitiator = users['darth' ],
+        potentialOwners = [users['bobba' ], users['jabba' ]],
+        excludedOwners = [users['dalai' ], users['christoper' ]],
+        taskStakeholders = [users['stuart' ], users['jane' ]],
+        businessAdministrators = [users['peter' ], users['steve' ]],
+        recipients = [users['sly' ], users['liz' ]]
+    }),
+    taskData = (with ( new TaskData() ) {
+        actualOwner = users[ 'liz' ],
+        createdBy = users[ 'sly' ],
+        activationTime = new Date( 10000000 ),
+        createdOn = new Date( 10000000 ),
+        expirationTime = new Date( 10000000 ),
+        status = Status.Ready,
+        documentAccessType = AccessType.Inline,
+        documentType = "mvel",
+        documentContentId = 20,
+        attachments = [ 
+            (with ( new Attachment() ) {
+                accessType = AccessType.Inline,
+                attachedAt = new Date( 10000000 ),                            
+                attachedBy = users['liz' ],
+                contentType = "text",
+                name = "file.txt",
+                size = 5000,
+                attachmentContentId = 5           
+             }),
+             (with ( new Attachment() ) {
+                 accessType = AccessType.Url, 
+                 attachedAt = new Date( 10000000 ),
+                 attachedBy = users['liz' ],
+                 contentType = "text",
+                 name = "file2.txt",
+                 size = 500,
+                 attachmentContentId = 3
+             })
+        ],
+        comments = [ 
+            (with ( new Comment ) {
+                addedBy = users['peter' ],
+                addedAt = new Date( 10000000 ),
+                text = "this is a short comment"
+             }),
+             (with ( new Comment ) {
+                 addedBy = users['steve' ],
+                 addedAt = new Date( 10000000 ),
+                 text = "this is a loooooooooooooooooooooooooooooooooooooooooooooooong comment"
+             })
+        ]
+    }),
+    names = [ new I18NText( "en-UK", "This is my task name" ),
+              new I18NText( "en-DK", "Dies ist mein task Name" )],
+    subjects = [ new I18NText( "en-UK", "This is my task subject" ),
+                 new I18NText( "en-DK", "Das ist mein task Thema" ) ],
+    descriptions = [ new I18NText( "en-UK", "This is my task description" ),
+                     new I18NText( "en-DK", "Das ist mein task Beschreibung" ) ],
+    delegation = ( with( new Delegation() ) {
+        allowed = AllowedToDelegate.PotentialOwners,
+        delegates = [ groups['crusaders' ], groups['knightsTempler' ] ]                                                                
+    }),
+    deadlines = ( with ( new Deadlines() ) {
+        startDeadlines = [ 
+            (with (new Deadline()) {
+                date = new Date( 10000000 ),
+                escalated = true,
+                documentation = [ new I18NText( "en-UK", "Start Deadline documentation" ),
+                                  new I18NText( "en-DK", "Start Termin Dokumentation" ) ],
+                escalations = [ 
+                    (with (new Escalation()) {
+                        name = "My Start Escalation",
+                        constraints = [new BooleanExpression( "mvel", "true" )],
+                        notifications = [ 
+                            (with (new Notification()) {
+                                documentation =  [ new I18NText( "en-UK", "Start Notification documentation" ),
+                                                   new I18NText( "en-DK", "Start Anmeldung Dokumentation" ) ],
+                                businessAdministrators = [ users['bruce' ], users['peter' ] ],
+                                recipients = [ users['tony' ], users['darth' ] ],                                                                                        
+                                names = [ new I18NText( "en-UK", "This is my start notification name" ),
+                                          new I18NText( "en-DK", "Dies ist mein start anmeldung Name" ) ],
+                                subjects = [ new I18NText( "en-UK", "This is my start notification subject" ), 
+                                             new I18NText( "en-DK", "Das ist mein start anmeldung Thema" ) ],
+                                descriptions = [new I18NText( "en-UK", "This is my start notification description" ),
+                                                new I18NText( "en-DK", "Das ist mein start anmeldung Beschreibung" ) ]                                                                                                                                                                                       
+                            }) 
+                        ],
+                        reassignments = [
+                            (with (new Reassignment()) {
+                                documentation =  [ new I18NText( "en-UK", "Start Reassignment documentation" ),
+                                                   new I18NText( "en-DK", "Start Neuzuweisung Dokumentation" ) ], 
+                                potentialOwners = [  users['bobba' ], users['luke' ] ]
+                             })                          
+                        ]                        
+                        
+                    }) 
+                ]
+            })
+        ],
+        endDeadlines = [ 
+            (with (new Deadline()) {
+                date = new Date( 10000000 ),
+                escalated = true,
+                documentation = [ new I18NText( "en-UK", "End Deadline documentation" ),
+                                  new I18NText( "en-DK", "Ende Termin Dokumentation" ) ],
+                escalations = [ 
+                    (with (new Escalation()) {
+                        name = "My End Escalation",
+                        constraints = [new BooleanExpression( "mvel", "true" )],
+                        notifications = [ 
+                            (with (new Notification()) {
+                                documentation =  [ new I18NText( "en-UK", "End Notification documentation" ),
+                                                   new I18NText( "en-DK", "Ende Anmeldung Dokumentation" ) ],
+                                businessAdministrators = [ users['bobba' ], users['darth' ] ],
+                                recipients = [ users['liz' ], users['jane' ] ],                                                                                        
+                                names = [ new I18NText( "en-UK", "This is my end notification name" ),
+                                          new I18NText( "en-DK", "Dies ist mein ende anmeldung Name" ) ],
+                                subjects = [ new I18NText( "en-UK", "This is my end notification subject" ), 
+                                             new I18NText( "en-DK", "Das ist mein ende anmeldung Thema" ) ],
+                                descriptions = [new I18NText( "en-UK", "This is my end notification description" ),
+                                                new I18NText( "en-DK", "Das ist mein ende anmeldung Beschreibung" ) ]                                                                                                  
+                            }) 
+                        ],
+                        reassignments = [
+                            (with (new Reassignment()) {
+                                documentation =  [ new I18NText( "en-UK", "End Reassignment documentation" ),
+                                                   new I18NText( "en-DK", "Ende Neuzuweisung Dokumentation" ) ], 
+                                potentialOwners = [  users['stuart' ], users['dalai' ] ]
+                             })                          
+                        ]                        
+                        
+                    }) 
+                ]
+            })
+        ]
+    })        
+};
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/LoadGroups.mvel
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/LoadGroups.mvel	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/LoadGroups.mvel	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,6 @@
+groups = [ 'knightsTempler' : new Group( "Knights Templer" ),
+           'crusaders' : new Group( "Crusaders" )
+         ];
+
+return groups;
+        
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/LoadUsers.mvel
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/LoadUsers.mvel	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/LoadUsers.mvel	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,12 @@
+users = [ 'darth'  : new User('Darth Vader'),  
+          'bobba'  : new User( 'Bobba Fet'),     'jabba'      : new User('Jabba Hutt'),
+          'dalai'  : new User('Dalai Lama'),     'christoper' : new User('Christoper Columbus'),
+          'stuart' : new User('Stuart Little'),  'jane'       : new User('Jane Austin'),
+          'peter'  : new User('Peter Parker'),   'steve'      : new User('Steve Rogers'),
+          'sly'    : new User('Sly Stalone'),    'liz'        : new User('Elizabeth Windsor'),
+          'bruce'  : new User('Bruce Wayne' ),   'tony'       : new User('Tony Stark'),
+          'luke'   : new User('Luke Cage'),      'admin'      : new User('Administrator')
+        ];       
+
+return users;
+        
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/QueryData_UnescalatedDeadlines.mvel
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/QueryData_UnescalatedDeadlines.mvel	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/QueryData_UnescalatedDeadlines.mvel	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,121 @@
+format = new java.text.SimpleDateFormat( "dd/MMM/yyyy" );
+
+tasks = [
+	(with ( new Task() ) { 
+	    priority = 20,
+	    taskData = (with ( new TaskData() ) {
+	        actualOwner = users[ 'peter' ],
+	        createdBy = users[ 'sly' ],
+	        createdOn = format.parse( "15/Jan/2008" ),	        
+	        activationTime = format.parse( "20/Jan/2008" ),
+	        status = Status.Created,
+	    }),
+	    deadlines = ( with ( new Deadlines() ) {
+	        startDeadlines = [ 
+	            (with (new Deadline()) {
+	                date = new Date( now.getTime() + 20000 ),
+	                escalated = false,
+	                escalations = [ 
+	                    (with (new Escalation()) {
+	                        name = "My Start Escalation",
+	                        constraints = [new BooleanExpression( "mvel", "true" )],
+	                        notifications = [ 
+	                            (with (new Notification()) {
+	                                recipients = [ users['tony' ], users['darth' ] ],                                                                                                                                                                                                                                                                               
+	                            }) 
+	                        ],
+	                        reassignments = [
+	                            (with (new Reassignment()) { 
+	                                potentialOwners = [  users['bobba' ], users['luke' ] ]
+	                             })                          
+	                        ]                        
+	                        
+	                    }) 
+	                ]
+	            })
+	        ],
+	        endDeadlines = [ 
+	            (with (new Deadline()) {
+	                date =  new Date( now.getTime() + 22000 ),
+	                escalated = false,
+	                escalations = [ 
+	                    (with (new Escalation()) {
+	                        name = "My End Escalation",
+	                        constraints = [new BooleanExpression( "mvel", "true" )],
+	                        notifications = [ 
+	                            (with (new Notification()) {
+	                                recipients = [ users['liz' ], users['jane' ] ],                                                                                                                                                                                          
+	                            }) 
+	                        ],
+	                        reassignments = [
+	                            (with (new Reassignment()) { 
+	                                potentialOwners = [  users['stuart' ], users['dalai' ] ]
+	                             })                          
+	                        ]                        
+	                        
+	                    }) 
+	                ]
+	            })
+	        ]
+	    })  	    	    
+	}),
+	(with ( new Task() ) { 
+	    priority = 150,
+	    taskData = (with ( new TaskData() ) {
+	        actualOwner = users[ 'steve' ],
+	        createdBy = users[ 'tony' ],
+	        createdOn = format.parse( "15/Feb/2008" ),
+	        activationTime = format.parse( "20/Feb/2008" ),
+	        status = Status.Created,
+	    }),   
+	    deadlines = ( with ( new Deadlines() ) {
+	        startDeadlines = [ 
+	            (with (new Deadline()) {
+	                date = new Date( now.getTime() - 1000 ),
+	                escalated = true,
+	                escalations = [ 
+	                    (with (new Escalation()) {
+	                        name = "My Start Escalation",
+	                        constraints = [new BooleanExpression( "mvel", "true" )],
+	                        notifications = [ 
+	                            (with (new Notification()) {
+	                                recipients = [ users['tony' ], users['darth' ] ],                                                                                                                                                                                                                                                                               
+	                            }) 
+	                        ],
+	                        reassignments = [
+	                            (with (new Reassignment()) { 
+	                                potentialOwners = [  users['bobba' ], users['luke' ] ]
+	                             })                          
+	                        ]                        
+	                        
+	                    }) 
+	                ]
+	            })
+	        ],
+	        endDeadlines = [ 
+	            (with (new Deadline()) {
+	                date =  new Date( now.getTime() + 24000 ),
+	                escalations = [ 
+	                    (with (new Escalation()) {
+	                        name = "My End Escalation",
+	                        constraints = [new BooleanExpression( "mvel", "true" )],
+	                        notifications = [ 
+	                            (with (new Notification()) {
+	                                recipients = [ users['liz' ], users['jane' ] ],                                                                                                                                                                                          
+	                            }) 
+	                        ],
+	                        reassignments = [
+	                            (with (new Reassignment()) { 
+	                                potentialOwners = [  users['stuart' ], users['dalai' ] ]
+	                             })                          
+	                        ]                        
+	                        
+	                    }) 
+	                ]
+	            })
+	        ]
+	    }) 	         
+	})
+]
+
+return tasks;
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/service/DeadlineWithNotification.mvel
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/service/DeadlineWithNotification.mvel	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/service/DeadlineWithNotification.mvel	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,29 @@
+with ( new Task() ) { 
+    taskData = (with ( new TaskData() ) {
+                   documentAccessType = AccessType.Inline,
+                   documentType = "MVEL"
+                }),
+    deadlines = ( with ( new Deadlines() ) {
+        startDeadlines = [ 
+            (with (new Deadline()) {
+                date = new Date( now.time + 5000 ),            
+                escalations = [ 
+                    (with (new Escalation()) {
+                        name = "My Start Escalation",
+                        constraints = [new BooleanExpression( "mvel", "true" )],
+                        notifications = [ 
+                            (with (new EmailNotification()) {
+                                recipients = [ users['tony' ], users['darth' ] ],
+                                emailHeaders = [ 'en-UK' : (with (new EmailNotificationHeader()) { 
+                                    language = 'en-UK',
+                                    subject = "@{doc.subject}",
+                                    body = "@{doc.body}"
+                                }) ]                                                                                                                                                                                  
+                            }) 
+                        ]                                               
+                    }) 
+                ]
+            })
+        ]
+    })        
+};
\ No newline at end of file

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

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/service/QueryData_TasksOwned.mvel
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/service/QueryData_TasksOwned.mvel	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/service/QueryData_TasksOwned.mvel	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,117 @@
+format = new java.text.SimpleDateFormat( "dd/MMM/yyyy" );
+
+tasks = [
+	(with ( new Task() ) { 
+	    priority = 20,
+	    taskData = (with ( new TaskData() ) {
+	        actualOwner = users[ 'peter' ],
+	        createdOn = format.parse( "15/Jan/2008" ),	        
+	        activationTime = format.parse( "20/Jan/2008" ),
+	        status = Status.Created,
+	    }),
+	    peopleAssignments = (with ( new PeopleAssignments() ) {        
+	        taskInitiator = users['darth' ],
+	        potentialOwners = [users['bobba' ], users['jabba' ]],
+	        excludedOwners = [users['liz' ], users['dalai' ], users['christoper' ]]
+	    }),	    
+        names = [ new I18NText( "en-UK", "This is my task name Jan" ),
+                  new I18NText( "en-DK", "Dies ist mein task Name Jan" )],
+        subjects = [ new I18NText( "en-UK", "This is my task subject Jan" ),
+                     new I18NText( "en-DK", "Das ist mein task Thema Jan" ) ],
+        descriptions = [ new I18NText( "en-UK", "This is my task description Jan" ),
+                         new I18NText( "en-DK", "Das ist mein task Beschreibung Jan" ) ]    
+	}),
+	(with ( new Task() ) { 
+	    priority = 150,
+	    peopleAssignments = (with ( new PeopleAssignments() ) {     
+	        excludedOwners = [users['liz' ], users['dalai' ], users['christoper' ]],
+	        potentialOwners = [users['bobba' ], users['jabba' ]], 
+	        taskStakeholders = [users['liz' ], users['stuart' ], users['jane' ]],
+	        businessAdministrators = [users['peter' ], users['steve' ]],
+	        recipients = [users['sly' ], users['bobba' ], users['liz' ]]
+	    }),	 	    
+	    taskData = (with ( new TaskData() ) {
+	        actualOwner = users[ 'steve' ],
+	        createdBy = users[ 'tony' ],
+	        createdOn = format.parse( "15/Feb/2008" ),
+	        activationTime = format.parse( "20/Feb/2008" ),
+	        status = Status.Created,
+	    }),
+        names = [ new I18NText( "en-UK", "This is my task name Feb" ),
+                  new I18NText( "en-DK", "Dies ist mein task Name Feb" )],
+        subjects = [ new I18NText( "en-UK", "This is my task subject Feb" ),
+                     new I18NText( "en-DK", "Das ist mein task Thema Feb" ) ],
+        descriptions = [ new I18NText( "en-UK", "This is my task description Feb" ),
+                         new I18NText( "en-DK", "Das ist mein task Beschreibung Feb" ) ]          
+	}),
+	(with ( new Task() ) { 
+	    priority = 90,
+	    peopleAssignments = (with ( new PeopleAssignments() ) {
+	    businessAdministrators = [users['liz' ], users['darth' ]],     
+	        potentialOwners = [users['bobba' ], users['jabba' ]], 
+	    }),	 	    
+	    taskData = (with ( new TaskData() ) {
+	        actualOwner = users[ 'peter' ],
+	        createdBy = users[ 'steve' ],
+	        createdOn = format.parse( "15/Mar/2008" ),	        
+	        activationTime = format.parse( "20/Mar/2008" ),
+	        status = Status.Created,
+	    }),
+        names = [ new I18NText( "en-UK", "This is my task name Mar" ),
+                  new I18NText( "en-DK", "Dies ist mein task Name Mar" )],
+        subjects = [ new I18NText( "en-UK", "This is my task subject Mar" ),
+                     new I18NText( "en-DK", "Das ist mein task Thema Mar" ) ],
+        descriptions = [ new I18NText( "en-UK", "This is my task description Mar" ),
+                         new I18NText( "en-DK", "Das ist mein task Beschreibung Mar" ) ]       
+	}),
+	(with ( new Task() ) { 
+	    priority = 20,
+	    taskData = (with ( new TaskData() ) {
+	        actualOwner = users[ 'darth' ],
+	        createdBy = users[ 'bobba' ],
+	        createdOn = format.parse( "15/Apr/2008" ),	        
+	        activationTime = format.parse( "20/Apr/2008" ),
+	        status = Status.Created,
+	    }),
+        names = [ new I18NText( "en-UK", "This is my task name Apr" ),
+                  new I18NText( "en-DK", "Dies ist mein task Name Apr" )],
+        subjects = [ new I18NText( "en-UK", "This is my task subject Apr" ),
+                     new I18NText( "en-DK", "Das ist mein task Thema Apr" ) ],
+        descriptions = [ new I18NText( "en-UK", "This is my task description Apr" ),
+                         new I18NText( "en-DK", "Das ist mein task Beschreibung Apr" ) ]     
+	}),
+	(with ( new Task() ) { 
+	    priority = 20,
+	    taskData = (with ( new TaskData() ) {
+	        actualOwner = users[ 'peter' ],
+	        createdBy = users[ 'steve' ],
+	        createdOn = format.parse( "15/May/2008" ),	        
+	        activationTime = format.parse( "20/May/2008" ),
+	        status = Status.Created,
+	    }),
+        names = [ new I18NText( "en-UK", "This is my task name May" ),
+                  new I18NText( "en-DK", "Dies ist mein task Name May" )],
+        subjects = [ new I18NText( "en-UK", "This is my task subject May" ),
+                     new I18NText( "en-DK", "Das ist mein task Thema May" ) ],
+        descriptions = [ new I18NText( "en-UK", "This is my task description May" ),
+                         new I18NText( "en-DK", "Das ist mein task Beschreibung May" ) ]   
+	}),	
+	(with ( new Task() ) { 
+	    priority = 15,
+	    taskData = (with ( new TaskData() ) {
+	        actualOwner = users[ 'steve' ],
+	        createdBy = users[ 'steve' ],
+	        createdOn = format.parse( "15/Jun/2008" ),	        
+	        activationTime = format.parse( "20/Jun/2008" ),
+	        status = Status.Created,
+	    }),
+        names = [ new I18NText( "en-UK", "This is my task name Jun" ),
+                  new I18NText( "en-DK", "Dies ist mein task Name Jun" )],
+        subjects = [ new I18NText( "en-UK", "This is my task subject Jun" ),
+                     new I18NText( "en-DK", "Das ist mein task Thema Jun" ) ],
+        descriptions = [ new I18NText( "en-UK", "This is my task description Jun" ),
+                         new I18NText( "en-DK", "Das ist mein task Beschreibung Jun" ) ]    
+	})			
+]
+
+return tasks;
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/service/QueryResults_PeopleAssignmentQuerries.mvel
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/service/QueryResults_PeopleAssignmentQuerries.mvel	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/service/QueryResults_PeopleAssignmentQuerries.mvel	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,27 @@
+format = new java.text.SimpleDateFormat( "dd/MMM/yyyy" );
+        
+[ 'darth' : [ new TaskSummary( 1, 'This is my task name Jan', 'This is my task subject Jan', 'This is my task description Jan',
+                               Status.Ready, 20, false, users[ 'peter' ], null,
+                               format.parse( "15/Jan/2008" ), format.parse( "20/Jan/2008" ), null ) ],
+  'bobba' : [ new TaskSummary( 1, 'This is my task name Jan', 'This is my task subject Jan', 'This is my task description Jan',
+                               Status.Ready, 20, false, users[ 'peter' ], null,
+                               format.parse( "15/Jan/2008" ), format.parse( "20/Jan/2008" ), null ),
+              new TaskSummary( 1, 'This is my task name Feb', 'This is my task subject Feb', 'This is my task description Feb',
+                               Status.Ready, 150, false, users[ 'steve' ], users[ 'tony' ], 
+                               format.parse( "15/Feb/2008" ), format.parse( "20/Feb/2008" ), null ),  
+              new TaskSummary( 1, 'This is my task name Mar', 'This is my task subject Mar', 'This is my task description Mar',
+                               Status.Ready, 90, false, users[ 'peter' ], users[ 'steve' ], 
+                               format.parse( "15/Mar/2008" ), format.parse( "20/Mar/2008" ), null ) ],
+   'steve' : [ new TaskSummary( 1, 'This is my task name Feb', 'This is my task subject Feb', 'This is my task description Feb',
+                                Status.Ready, 150, false, users[ 'steve' ], users[ 'tony' ], 
+                                format.parse( "15/Feb/2008" ), format.parse( "20/Feb/2008" ), null  ) ],
+   'liz' : [ new TaskSummary( 1, 'This is my task name Jan', 'This is my task subject Jan', 'This is my task description Jan',
+                              Status.Ready, 20, false, users[ 'peter' ], null,
+                              format.parse( "15/Jan/2008" ), format.parse( "20/Jan/2008" ), null ),
+            new TaskSummary( 1, 'This is my task name Feb', 'This is my task subject Feb', 'This is my task description Feb',
+                             Status.Ready, 150, false, users[ 'steve' ], users[ 'tony' ], 
+                             format.parse( "15/Feb/2008" ), format.parse( "20/Feb/2008" ), null ) ],
+   'sly' : [ new TaskSummary( 1, 'This is my task name Feb', 'This is my task subject Feb', 'This is my task description Feb',
+                                Status.Ready, 150, false, users[ 'steve' ], users[ 'tony' ], 
+                                format.parse( "15/Feb/2008" ), format.parse( "20/Feb/2008" ), null  ) ]                                                 
+]
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/service/QueryResults_TasksOwnedInEnglish.mvel
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/service/QueryResults_TasksOwnedInEnglish.mvel	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/service/QueryResults_TasksOwnedInEnglish.mvel	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,21 @@
+format = new java.text.SimpleDateFormat( "dd/MMM/yyyy" );
+        
+[ 'peter' : [ new TaskSummary( 1, 'This is my task name Jan', 'This is my task subject Jan', 'This is my task description Jan',
+                               Status.Ready, 20, false, users[ 'peter' ], null, 
+                               format.parse( "15/Jan/2008" ), format.parse( "20/Jan/2008" ), null ),
+              new TaskSummary( 1, 'This is my task name May', 'This is my task subject May', 'This is my task description May',
+                               Status.Created, 20, false, users[ 'peter' ], users[ 'steve' ], 
+                               format.parse( "15/May/2008" ), format.parse( "20/May/2008" ), null ),
+              new TaskSummary( 1, 'This is my task name Mar', 'This is my task subject Mar', 'This is my task description Mar',
+                               Status.Ready, 90, false, users[ 'peter' ], users[ 'steve' ], 
+                               format.parse( "15/Mar/2008" ), format.parse( "20/Mar/2008" ), null ) ],                                                                     
+  'steve' : [new TaskSummary( 1, 'This is my task name Feb', 'This is my task subject Feb', 'This is my task description Feb',
+                              Status.Ready, 150, false, users[ 'steve' ], users[ 'tony' ], 
+                              format.parse( "15/Feb/2008" ), format.parse( "20/Feb/2008" ), null ),
+             new TaskSummary( 1, 'This is my task name Jun', 'This is my task subject Jun', 'This is my task description Jun',
+                              Status.Created, 15, false, users[ 'steve' ], users[ 'steve' ], 
+                              format.parse( "15/Jun/2008" ), format.parse( "20/Jun/2008" ), null ) ]                      
+  'darth' : [ new TaskSummary( 1, 'This is my task name Apr', 'This is my task subject Apr', 'This is my task description Apr',
+                               Status.Created, 20, false, users[ 'darth' ], users[ 'bobba' ], 
+                               format.parse( "15/Apr/2008" ), format.parse( "20/Apr/2008" ), null ) ]                                                                                                                                              
+]
\ No newline at end of file

Added: labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/service/QueryResults_TasksOwnedInGerman.mvel
===================================================================
--- labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/service/QueryResults_TasksOwnedInGerman.mvel	                        (rev 0)
+++ labs/jbossrules/branches/salaboy_ServiceAPIs/drools-services-task/src/test/resources/org/drools/task/service/QueryResults_TasksOwnedInGerman.mvel	2010-03-12 19:53:36 UTC (rev 32063)
@@ -0,0 +1,21 @@
+format = new java.text.SimpleDateFormat( "dd/MMM/yyyy" );
+        
+[ 'peter' : [ new TaskSummary( 1, 'Dies ist mein task Name Jan', 'Das ist mein task Thema Jan', 'Das ist mein task Beschreibung Jan',
+                               Status.Ready, 20, false, users[ 'peter' ], null, 
+                               format.parse( "15/Jan/2008" ), format.parse( "20/Jan/2008" ), null ),
+              new TaskSummary( 1, 'Dies ist mein task Name May', 'Das ist mein task Thema May', 'Das ist mein task Beschreibung May',
+                               Status.Created, 20, false, users[ 'peter' ], users[ 'steve' ], 
+                               format.parse( "15/May/2008" ), format.parse( "20/May/2008" ),null ),
+              new TaskSummary( 1, 'Dies ist mein task Name Mar', 'Das ist mein task Thema Mar', 'Das ist mein task Beschreibung Mar',
+                               Status.Ready, 90, false, users[ 'peter' ], users[ 'steve' ], 
+                               format.parse( "15/Mar/2008" ), format.parse( "20/Mar/2008" ), null ) ],                                                                     
+  'steve' : [ new TaskSummary( 1, 'Dies ist mein task Name Feb', 'Das ist mein task Thema Feb', 'Das ist mein task Beschreibung Feb',
+                               Status.Ready, 150, false, users[ 'steve' ], users[ 'tony' ], 
+                               format.parse( "15/Feb/2008" ), format.parse( "20/Feb/2008" ), null ),
+              new TaskSummary( 1, 'Dies ist mein task Name Jun', 'Das ist mein task Thema Jun', 'Das ist mein task Beschreibung Jun',
+                               Status.Created, 15, false, users[ 'steve' ], users[ 'steve' ], 
+                               format.parse( "15/Jun/2008" ), format.parse( "20/Jun/2008" ), null ) ]                      
+  'darth' : [ new TaskSummary( 1, 'Dies ist mein task Name Apr', 'Das ist mein task Thema Apr', 'Das ist mein task Beschreibung Apr',
+                               Status.Created, 20, false, users[ 'darth' ], users[ 'bobba' ], 
+                               format.parse( "15/Apr/2008" ), format.parse( "20/Apr/2008" ), null ) ]                                                                                                                                              
+]
\ No newline at end of file



More information about the jboss-svn-commits mailing list