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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Dec 10 15:56:44 EST 2009


Author: salaboy21
Date: 2009-12-10 15:56:44 -0500 (Thu, 10 Dec 2009)
New Revision: 30584

Added:
   labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/task/
   labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/task/GenericEventTransport.java
   labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/task/TaskClientMessageHandlerImpl.java
   labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/task/TaskServerMessageHandlerImpl.java
   labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/vsm/ServiceManagerHumanTaskMinaRemoteTest.java
Modified:
   labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/pom.xml
   labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/local/ServiceManagerLocalClient.java
   labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/remote/ServiceManagerRemoteClient.java
   labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/vsm/ServiceManagerTestBase.java
Log:
adapt VSM to use HumanTaskService inside it

Modified: labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/pom.xml
===================================================================
--- labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/pom.xml	2009-12-10 16:33:39 UTC (rev 30583)
+++ labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/pom.xml	2009-12-10 20:56:44 UTC (rev 30584)
@@ -88,8 +88,13 @@
             <artifactId>cli</artifactId>
             <version>4.0-M3-SNAPSHOT</version>
         </dependency>
-
-
+            <dependency>
+                  <groupId>org.drools</groupId>
+                  <artifactId>drools-process-task</artifactId>
+                  <version>5.1.0.SNAPSHOT</version>
+                  
+                  <type>jar</type>
+            </dependency>
       </dependencies>
        <repositories>
         <repository>
@@ -119,5 +124,6 @@
 
         </pluginRepository>
     </pluginRepositories>
-                  
+
 </project>
+

Modified: labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/local/ServiceManagerLocalClient.java
===================================================================
--- labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/local/ServiceManagerLocalClient.java	2009-12-10 16:33:39 UTC (rev 30583)
+++ labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/local/ServiceManagerLocalClient.java	2009-12-10 20:56:44 UTC (rev 30584)
@@ -83,6 +83,10 @@
 
     }
 
+    public HumanTaskServiceProvider getHumanTaskService() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
     public static class RemoveKnowledgeBuilderProvider
         implements
         KnowledgeBuilderProvider {

Modified: labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/remote/ServiceManagerRemoteClient.java
===================================================================
--- labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/remote/ServiceManagerRemoteClient.java	2009-12-10 16:33:39 UTC (rev 30583)
+++ labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/remote/ServiceManagerRemoteClient.java	2009-12-10 20:56:44 UTC (rev 30584)
@@ -1,6 +1,7 @@
 package org.drools.vsm.remote;
 
 import java.util.Collection;
+import java.util.List;
 import java.util.Properties;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -32,15 +33,20 @@
     ServiceManager {
     public GenericConnector client;
 
+    public List<GenericConnector> services;
+
     public AtomicInteger    counter;
 
+    private int sessionId = -1;
+
     public ServiceManagerRemoteClient(String name,
-                                      GenericConnector client) {
+                                      GenericConnector client, List<GenericConnector> services) {
         this.client = client;
         this.counter = new AtomicInteger();
+        this.services = services;
     }
    
-    private int sessionId = -1;
+    
 
     public boolean connect() {
         boolean connected = this.client.connect();
@@ -73,7 +79,40 @@
                                             e );
             }
         }
+        //Connecting with services
+        for(GenericConnector connector : services){
+            boolean serviceConnected = connector.connect();
+              if ( serviceConnected ) {
+                String commandId = "service.connected" + getNextId();
+                String kresultsId = "kresults_" + getSessionId();
 
+                Message msg = new Message( -1,
+                                           counter.incrementAndGet(),
+                                           false,
+                                           new KnowledgeContextResolveFromContextCommand( new ServiceManagerClientConnectCommand( commandId ),
+                                                                                          null,
+                                                                                          null,
+                                                                                          null,
+                                                                                          kresultsId ) );
+
+                try {
+                    Object object = connector.write( msg ).getPayload();
+
+                    if ( object == null ) {
+                        throw new RuntimeException( "Response was not correctly received" );
+                    }
+
+                    System.out.println("Service Connected");
+
+
+                } catch ( Exception e ) {
+                    throw new RuntimeException( "Unable to execute message",
+                                                e );
+                }
+            }
+        }
+
+
         return connected;
     }
 
@@ -197,6 +236,10 @@
 
     }
 
+    public HumanTaskServiceProvider getHumanTaskService() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
     public static class RemoveKnowledgeBuilderProvider
         implements
         KnowledgeBuilderProvider {

Added: labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/task/GenericEventTransport.java
===================================================================
--- labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/task/GenericEventTransport.java	                        (rev 0)
+++ labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/task/GenericEventTransport.java	2009-12-10 20:56:44 UTC (rev 30584)
@@ -0,0 +1,42 @@
+package org.drools.vsm.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.task.service.Command;
+import org.drools.task.service.CommandName;
+import org.drools.vsm.GenericIoWriter;
+import org.drools.vsm.Message;
+
+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;
+    }
+}

Added: labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/task/TaskClientMessageHandlerImpl.java
===================================================================
--- labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/task/TaskClientMessageHandlerImpl.java	                        (rev 0)
+++ labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/task/TaskClientMessageHandlerImpl.java	2009-12-10 20:56:44 UTC (rev 30584)
@@ -0,0 +1,243 @@
+package org.drools.vsm.task;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.SystemEventListener;
+import org.drools.eventmessaging.EventResponseHandler;
+import org.drools.eventmessaging.Payload;
+import org.drools.task.Content;
+import org.drools.task.Task;
+import org.drools.task.query.TaskSummary;
+import org.drools.task.service.BaseMinaHandler.ResponseHandler;
+import org.drools.task.service.Command;
+import org.drools.vsm.GenericIoWriter;
+import org.drools.vsm.GenericMessageHandler;
+import org.drools.vsm.Message;
+
+public class TaskClientMessageHandlerImpl implements GenericMessageHandler {
+
+    /**
+     * Listener used for logging
+     */
+    private SystemEventListener systemEventListener;
+    protected Map<Integer, ResponseHandler> responseHandlers;
+
+    public TaskClientMessageHandlerImpl(SystemEventListener systemEventListener) {
+        this.systemEventListener = systemEventListener;
+    }
+
+    
+    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 on client : " + cmd.getName());
+        systemEventListener.debug("Arguments : " + Arrays.toString(cmd.getArguments().toArray()));
+
+        switch (cmd.getName()) {
+            case OperationResponse: {
+                TaskOperationResponseHandler responseHandler = (TaskOperationResponseHandler) 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 GetTaskResponse: {
+                GetTaskResponseHandler responseHandler = (GetTaskResponseHandler) 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: {
+                AddTaskResponseHandler responseHandler = (AddTaskResponseHandler) 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 taskId = (Long) cmd.getArguments().get(0);
+                        responseHandler.execute(taskId);
+                    }
+                }
+                break;
+            }
+            case AddCommentResponse: {
+                AddCommentResponseHandler responseHandler = (AddCommentResponseHandler) 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: {
+                DeleteCommentResponseHandler responseHandler = (DeleteCommentResponseHandler) 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: {
+                AddAttachmentResponseHandler responseHandler = (AddAttachmentResponseHandler) 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: {
+                DeleteAttachmentResponseHandler responseHandler = (DeleteAttachmentResponseHandler) 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: {
+                GetContentResponseHandler responseHandler = (GetContentResponseHandler) 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: {
+                SetDocumentResponseHandler responseHandler = (SetDocumentResponseHandler) 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: {
+                TaskSummaryResponseHandler responseHandler = (TaskSummaryResponseHandler) 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 {
+                        List<TaskSummary> results = (List<TaskSummary>) cmd.getArguments().get(0);
+                        responseHandler.execute(results);
+                    }
+                }
+                break;
+            }
+            case EventTriggerResponse: {
+                EventResponseHandler responseHandler = (EventResponseHandler) 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 {
+                        Payload payload = (Payload) cmd.getArguments().get(0);
+                        responseHandler.execute(payload);
+                    }
+                }
+                break;
+            }
+        }
+    }
+    public void addResponseHandler(int id, ResponseHandler responseHandler) {
+        responseHandlers.put( id, responseHandler );
+    }
+
+
+    public static interface GetTaskResponseHandler
+            extends
+            ResponseHandler {
+        public void execute(Task task);
+    }
+
+    public static interface AddTaskResponseHandler
+            extends
+            ResponseHandler {
+        public void execute(long taskId);
+    }
+
+    public static interface TaskOperationResponseHandler
+            extends
+            ResponseHandler {
+        public void setIsDone(boolean done);
+    }
+
+    public static interface AddCommentResponseHandler
+            extends
+            ResponseHandler {
+        public void execute(long commentId);
+    }
+
+    public static interface DeleteCommentResponseHandler
+            extends
+            ResponseHandler {
+        public void setIsDone(boolean done);
+    }
+
+    public static interface AddAttachmentResponseHandler
+            extends
+            ResponseHandler {
+        public void execute(long attachmentId,
+                            long contentId);
+    }
+
+    public static interface DeleteAttachmentResponseHandler
+            extends
+            ResponseHandler {
+        public void setIsDone(boolean done);
+    }
+
+    public static interface SetDocumentResponseHandler
+            extends
+            ResponseHandler {
+        public void execute(long contentId);
+    }
+
+    public static interface GetContentResponseHandler
+            extends
+            ResponseHandler {
+        public void execute(Content content);
+    }
+
+    public static interface TaskSummaryResponseHandler
+            extends
+            ResponseHandler {
+        public void execute(List<TaskSummary> results);
+    }
+}
\ No newline at end of file

Added: labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/task/TaskServerMessageHandlerImpl.java
===================================================================
--- labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/task/TaskServerMessageHandlerImpl.java	                        (rev 0)
+++ labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/main/java/org/drools/vsm/task/TaskServerMessageHandlerImpl.java	2009-12-10 20:56:44 UTC (rev 30584)
@@ -0,0 +1,434 @@
+package org.drools.vsm.task;
+
+import org.apache.mina.core.service.IoHandlerAdapter;
+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.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.vsm.GenericIoWriter;
+import org.drools.vsm.Message;
+
+import java.util.*;
+import org.drools.task.service.Command;
+import org.drools.task.service.CommandName;
+import org.drools.task.service.ContentData;
+import org.drools.task.service.MinaEventTransport;
+import org.drools.task.service.Operation;
+import org.drools.task.service.TaskService;
+import org.drools.task.service.TaskServiceSession;
+import org.drools.vsm.GenericMessageHandler;
+
+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 receieved 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(uuid, //this is wrong
+                            cmd.getId(), //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/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/vsm/ServiceManagerHumanTaskMinaRemoteTest.java
===================================================================
--- labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/vsm/ServiceManagerHumanTaskMinaRemoteTest.java	                        (rev 0)
+++ labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/vsm/ServiceManagerHumanTaskMinaRemoteTest.java	2009-12-10 20:56:44 UTC (rev 30584)
@@ -0,0 +1,108 @@
+package org.drools.vsm;
+
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+
+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.SystemEventListenerFactory;
+import org.drools.task.service.TaskClientHandler;
+import org.drools.task.service.TaskServerHandler;
+import org.drools.task.service.TaskService;
+import org.drools.task.service.TaskServiceSession;
+import org.drools.vsm.mina.MinaAcceptor;
+import org.drools.vsm.mina.MinaConnector;
+import org.drools.vsm.mina.MinaIoHandler;
+import org.drools.vsm.remote.ServiceManagerRemoteClient;
+import org.drools.vsm.task.TaskClientMessageHandlerImpl;
+import org.drools.vsm.task.TaskServerMessageHandlerImpl;
+
+public class ServiceManagerHumanTaskMinaRemoteTest extends ServiceManagerTestBase {
+
+    AcceptorService server;
+    AcceptorService humanTaskServer;
+    private EntityManagerFactory emf;
+    private TaskService taskService;
+    protected TaskServiceSession taskSession;
+
+    protected void setUp() throws Exception {
+        // Configure persistence to be used inside the WSHT Service
+        // 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);
+
+        // END
+
+        // Execution Server
+        SocketAddress address = new InetSocketAddress("127.0.0.1",
+                9123);
+        ServiceManagerData serverData = new ServiceManagerData();
+        // setup Server
+        SocketAcceptor acceptor = new NioSocketAcceptor();
+        acceptor.setHandler(new MinaIoHandler(SystemEventListenerFactory.getSystemEventListener(),
+                new GenericMessageHandlerImpl(serverData,
+                SystemEventListenerFactory.getSystemEventListener())));
+        this.server = new MinaAcceptor(acceptor,
+                address);
+        this.server.start();
+        // End Execution Server
+       
+
+        // Human task Server configuration
+        SocketAddress htAddress = new InetSocketAddress("127.0.0.1",
+                9124);
+        SocketAcceptor htAcceptor = new NioSocketAcceptor();
+
+        htAcceptor.setHandler(new MinaIoHandler(SystemEventListenerFactory.getSystemEventListener(),
+                new TaskServerMessageHandlerImpl(taskService,
+                SystemEventListenerFactory.getSystemEventListener())));
+        this.humanTaskServer = new MinaAcceptor(htAcceptor, htAddress);
+        this.humanTaskServer.start();
+
+
+        // End Human task Server configuration
+
+        // setup the Service Manager Client
+        NioSocketConnector htclientConnector = new NioSocketConnector();
+        htclientConnector.setHandler(new MinaIoHandler(SystemEventListenerFactory.getSystemEventListener() //Now I need to use MinaIoHandler because mina needs one
+                , new TaskClientMessageHandlerImpl(SystemEventListenerFactory.getSystemEventListener()) ));
+        GenericConnector htMinaClient = new MinaConnector( "client 1",
+                                                         htclientConnector,
+                                                         address,
+                                                         SystemEventListenerFactory.getSystemEventListener() );
+
+        NioSocketConnector clientConnector = new NioSocketConnector();
+        clientConnector.setHandler(new MinaIoHandler(SystemEventListenerFactory.getSystemEventListener()));
+        GenericConnector minaClient = new MinaConnector("client 1",
+                clientConnector,
+                address,
+                SystemEventListenerFactory.getSystemEventListener());
+
+        // Service Manager client, that contains a list of service beside the execution Server, in this case the HumanTaskService
+        List<GenericConnector> services = new ArrayList<GenericConnector>();
+        services.add(htMinaClient);
+        this.client = new ServiceManagerRemoteClient("client 1",
+                minaClient
+                //List of service
+                , services);
+
+        ((ServiceManagerRemoteClient) client).connect();
+
+        
+
+    }
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        ((ServiceManagerRemoteClient) client).disconnect();
+        this.server.stop();
+    }
+}

Modified: labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/vsm/ServiceManagerTestBase.java
===================================================================
--- labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/vsm/ServiceManagerTestBase.java	2009-12-10 16:33:39 UTC (rev 30583)
+++ labs/jbossrules/branches/human-task-vsm_lucaz-salaboy/drools-vsm/src/test/java/org/drools/vsm/ServiceManagerTestBase.java	2009-12-10 20:56:44 UTC (rev 30584)
@@ -11,7 +11,9 @@
 import org.drools.io.ResourceFactory;
 import org.drools.runtime.ExecutionResults;
 import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.process.ProcessInstance;
 
+
 public class ServiceManagerTestBase extends TestCase {
 
     protected ServiceManager client;
@@ -174,4 +176,51 @@
         //       
         //        assertEquals( 2, (int ) ( Integer) results.getValue( "fired" ) );
     }
+
+     public void testHumanTasks() throws Exception {
+        String str = "";
+        str += "package org.drools \n";
+        str += "global java.util.List list \n";
+        str += "rule rule1 \n";
+        str += "    dialect \"java\" \n";
+        str += "when \n";
+        str += "then \n";
+        str += "    System.out.println( \"hello1!!!\" ); \n";
+        str += "end \n";
+        str += "rule rule2 \n";
+        str += "    dialect \"java\" \n";
+        str += "when \n";
+        str += "then \n";
+        str += "    System.out.println( \"hello2!!!\" ); \n";
+        str += "end \n";
+
+        KnowledgeBuilderProvider kbuilderFactory = this.client.getKnowledgeBuilderFactory();
+        KnowledgeBuilder kbuilder = kbuilderFactory.newKnowledgeBuilder();
+        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+                      ResourceType.DRF );
+
+        if ( kbuilder.hasErrors() ) {
+            System.out.println( "Errors: " + kbuilder.getErrors() );
+        }
+
+        KnowledgeBaseProvider kbaseFactory = this.client.getKnowledgeBaseFactory();
+        KnowledgeBase kbase = kbaseFactory.newKnowledgeBase();
+
+        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        
+        ProcessInstance processInstance = ksession.startProcess("org.drools.flow.example");
+        HumanTaskServiceProvider humanTaskServiceFactory = this.client.getHumanTaskService();
+        HumanTaskService htClient = humanTaskServiceClientFactory.newHumanTaskServiceClient();
+
+        ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new CommandBasedWSHumanTaskHandler(htClient));
+        int fired = ksession.fireAllRules();
+        assertEquals( 2,
+                      fired );
+
+        List<TaskSummary> tasks = htClient.getAssignedTasksAssignedAsPotentialOwner(actorId);
+
+
+    }
 }



More information about the jboss-svn-commits mailing list