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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Nov 13 22:15:43 EST 2008


Author: KrisVerlaenen
Date: 2008-11-13 22:15:43 -0500 (Thu, 13 Nov 2008)
New Revision: 23868

Modified:
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/ContentData.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/process/workitem/wsht/WSHumanTaskHandlerTest.java
Log:
JBRULES-1834: Data for Tasks
 - added result data + ActorId to task results

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java	2008-11-14 01:44:20 UTC (rev 23867)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java	2008-11-14 03:15:43 UTC (rev 23868)
@@ -1,7 +1,9 @@
 package org.drools.process.workitem.wsht;
 
+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;
@@ -18,6 +20,7 @@
 import org.drools.runtime.process.WorkItemHandler;
 import org.drools.runtime.process.WorkItemManager;
 import org.drools.task.AccessType;
+import org.drools.task.Content;
 import org.drools.task.I18NText;
 import org.drools.task.OrganizationalEntity;
 import org.drools.task.PeopleAssignments;
@@ -33,6 +36,8 @@
 import org.drools.task.service.MinaTaskClient;
 import org.drools.task.service.TaskClientHandler;
 import org.drools.task.service.TaskClientHandler.AddTaskResponseHandler;
+import org.drools.task.service.TaskClientHandler.GetContentResponseHandler;
+import org.drools.task.service.TaskClientHandler.GetTaskResponseHandler;
 
 public class WSHumanTaskHandler implements WorkItemHandler {
 
@@ -177,7 +182,8 @@
             System.out.println("Created task " + taskId + " for work item " + workItemId);
             
             EventKey key = new TaskEventKey(TaskCompletedEvent.class, taskId );           
-            TaskCompletedHandler eventResponseHandler = new TaskCompletedHandler(workItemId, taskId, managers); 
+            TaskCompletedHandler eventResponseHandler =
+            	new TaskCompletedHandler(workItemId, taskId, managers, client); 
             client.registerForEvent( key, true, eventResponseHandler );
             key = new TaskEventKey(TaskFailedEvent.class, taskId );           
             client.registerForEvent( key, true, eventResponseHandler );
@@ -186,7 +192,7 @@
         }
 
         public void setError(String error) {
-            this.error = error;         
+            this.error = error;
         }
         
         public String getError() {
@@ -200,11 +206,14 @@
         private long workItemId;
         private long taskId;
         private Map<Long, WorkItemManager> managers;
+        private MinaTaskClient client;
         
-        public TaskCompletedHandler(long workItemId, long taskId, Map<Long, WorkItemManager> managers) {
+        public TaskCompletedHandler(long workItemId, long taskId, Map<Long, WorkItemManager> managers,
+        		MinaTaskClient client) {
             this.workItemId = workItemId;
             this.taskId = taskId;
             this.managers = managers;
+            this.client = client;
         }
 
         public void execute(Payload payload) {
@@ -218,7 +227,9 @@
 		        synchronized ( this.managers ) {
 		            WorkItemManager manager = this.managers.get(taskId);
 		            if (manager != null) {
-		            	manager.completeWorkItem(workItemId, null);   
+		            	GetTaskResponseHandler getTaskResponseHandler =
+		            		new GetCompletedTaskResponseHandler(manager, client);
+		            	client.getTask(taskId, getTaskResponseHandler);   
 		            }
 		        }
         	} else {
@@ -239,5 +250,78 @@
             return this.error;
         }
     }
+    
+    private static class GetCompletedTaskResponseHandler implements GetTaskResponseHandler {
 
+    	private WorkItemManager manager;
+    	private String error;
+    	private MinaTaskClient client;
+    	
+    	public GetCompletedTaskResponseHandler(WorkItemManager manager, MinaTaskClient client) {
+    		this.manager = manager;
+    		this.client = client;
+    	}
+    	
+		public void execute(Task task) {
+			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) {
+				GetContentResponseHandler getContentResponseHandler =
+					new GetResultContentResponseHandler(manager, task, results);
+				client.getContent(contentId, getContentResponseHandler);
+			} else {
+				manager.completeWorkItem(workItemId, results);
+			}
+		}
+
+		public void setError(String error) {
+            this.error = error;
+        }
+        
+        public String getError() {
+            return this.error;
+        }
+    }
+    
+    private static class GetResultContentResponseHandler implements GetContentResponseHandler {
+
+    	private WorkItemManager manager;
+    	private Task task;
+    	private Map<String, Object> results;
+    	private String error;
+    	
+    	public GetResultContentResponseHandler(WorkItemManager manager, Task task, Map<String, Object> results) {
+    		this.manager = manager;
+    		this.task = task;
+    		this.results = results;
+    	}
+    	
+		public void execute(Content content) {
+			ByteArrayInputStream bis = new ByteArrayInputStream(content.getContent());
+			ObjectInputStream in;
+			try {
+				in = new ObjectInputStream(bis);
+				Object result = in.readObject();
+				in.close();
+				results.put("Result", result);
+				manager.completeWorkItem(task.getTaskData().getWorkItemId(), results);
+			} catch (IOException e) {
+				e.printStackTrace();
+			} catch (ClassNotFoundException e) {
+				e.printStackTrace();
+			}
+		}
+
+		public void setError(String error) {
+            this.error = error;
+        }
+        
+        public String getError() {
+            return this.error;
+        }
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/ContentData.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/ContentData.java	2008-11-14 01:44:20 UTC (rev 23867)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/ContentData.java	2008-11-14 03:15:43 UTC (rev 23868)
@@ -38,18 +38,39 @@
 	}
 
 	public void writeExternal(ObjectOutput out) throws IOException {
-        out.writeObject( accessType );
-        out.writeUTF( type );
-        out.writeInt( content.length );
-        out.write( content );        
+		if ( accessType != null ) {
+            out.writeBoolean( true );
+            out.writeUTF( accessType.toString() );
+		} else {
+            out.writeBoolean( false );
+        }
+		if ( type != null ) {
+            out.writeBoolean( true );
+            out.writeUTF( type );
+		} else {
+            out.writeBoolean( false );
+        }
+		if ( content != null ) {
+            out.writeBoolean( true );
+            out.writeInt( content.length );
+            out.write( content );
+		} else {
+            out.writeBoolean( false );
+        }
     }
     
     public void readExternal(ObjectInput in) throws IOException,
                                             ClassNotFoundException {
-        accessType = (AccessType) in.readObject();
-        type = in.readUTF();
-        content = new byte[ in.readInt() ];
-        in.read( content );
+    	if (in.readBoolean()) {
+    		accessType = AccessType.valueOf(in.readUTF());
+    	}
+    	if (in.readBoolean()) {
+    		type = in.readUTF();
+    	}
+    	if (in.readBoolean()) {
+    		content = new byte[ in.readInt() ];
+    		in.read( content );
+    	}
     }
 
 }

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/process/workitem/wsht/WSHumanTaskHandlerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/process/workitem/wsht/WSHumanTaskHandlerTest.java	2008-11-14 01:44:20 UTC (rev 23867)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/process/workitem/wsht/WSHumanTaskHandlerTest.java	2008-11-14 03:15:43 UTC (rev 23868)
@@ -1,5 +1,10 @@
 package org.drools.process.workitem.wsht;
 
+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.List;
@@ -11,11 +16,17 @@
 import org.drools.runtime.process.WorkItem;
 import org.drools.runtime.process.WorkItemHandler;
 import org.drools.runtime.process.WorkItemManager;
+import org.drools.task.AccessType;
 import org.drools.task.BaseTest;
+import org.drools.task.Content;
 import org.drools.task.Status;
+import org.drools.task.Task;
 import org.drools.task.query.TaskSummary;
+import org.drools.task.service.BlockingGetContentResponseHandler;
+import org.drools.task.service.BlockingGetTaskResponseHandler;
 import org.drools.task.service.BlockingTaskOperationResponseHandler;
 import org.drools.task.service.BlockingTaskSummaryResponseHandler;
+import org.drools.task.service.ContentData;
 import org.drools.task.service.MinaTaskClient;
 import org.drools.task.service.MinaTaskServer;
 import org.drools.task.service.TaskClientHandler;
@@ -248,10 +259,76 @@
 		assertEquals(1, tasks.size());
 	}
 	
+	public void testTaskData() throws Exception {
+		TestWorkItemManager manager = new TestWorkItemManager();
+		WorkItemImpl workItem = new WorkItemImpl();
+		workItem.setName("Human Task");
+		workItem.setParameter("TaskName", "TaskName");
+		workItem.setParameter("Comment", "Comment");
+		workItem.setParameter("Priority", "10");
+		workItem.setParameter("ActorId", "Darth Vader");
+		workItem.setParameter("Content", "This is the content");
+		handler.executeWorkItem(workItem, manager);
+		
+		Thread.sleep(500);
+		
+		BlockingTaskSummaryResponseHandler responseHandler = new BlockingTaskSummaryResponseHandler();
+		client.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+		List<TaskSummary> tasks = responseHandler.getResults();
+		assertEquals(1, tasks.size());
+		TaskSummary taskSummary = tasks.get(0);
+		assertEquals("TaskName", taskSummary.getName());
+		assertEquals(10, taskSummary.getPriority());
+		assertEquals("Comment", taskSummary.getDescription());
+		assertEquals(Status.Reserved, taskSummary.getStatus());
+		assertEquals("Darth Vader", taskSummary.getActualOwner().getId());
+		
+		BlockingGetTaskResponseHandler getTaskResponseHandler = new BlockingGetTaskResponseHandler();
+		client.getTask(taskSummary.getId(), getTaskResponseHandler);
+		Task task = getTaskResponseHandler.getTask();
+		assertEquals(AccessType.Inline, task.getTaskData().getDocumentAccessType());
+		long contentId = task.getTaskData().getDocumentContentId();
+		assertTrue(contentId != -1);
+		BlockingGetContentResponseHandler getContentResponseHandler = new BlockingGetContentResponseHandler();
+		client.getContent(contentId, getContentResponseHandler);
+		ByteArrayInputStream bis = new ByteArrayInputStream(getContentResponseHandler.getContent().getContent());
+		ObjectInputStream in = new ObjectInputStream(bis);
+		Object data = in.readObject();
+		in.close();
+		assertEquals("This is the content", data);
+		
+		System.out.println("Starting task " + task.getId());
+		BlockingTaskOperationResponseHandler operationResponseHandler = new BlockingTaskOperationResponseHandler();
+		client.start(task.getId(), "Darth Vader", operationResponseHandler);
+		operationResponseHandler.waitTillDone(5000);
+		System.out.println("Started task " + task.getId());
+		
+		System.out.println("Completing task " + task.getId());
+		operationResponseHandler = new BlockingTaskOperationResponseHandler();
+		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());
+		client.complete(task.getId(), "Darth Vader", result, operationResponseHandler);
+		operationResponseHandler.waitTillDone(5000);
+		System.out.println("Completed task " + task.getId());
+		
+		assertTrue(manager.isCompleted());
+		Map<String, Object> results = manager.getResults();
+		assertNotNull(results);
+		assertEquals("Darth Vader", results.get("ActorId"));
+		assertEquals("This is the result", results.get("Result"));
+	}
+	
 	private class TestWorkItemManager implements WorkItemManager  {
 		
 		private boolean completed;
 		private boolean aborted;
+		private Map<String, Object> results;
 		
 		public void abortWorkItem(long id) {
 			aborted = true;
@@ -263,6 +340,7 @@
 
 		public void completeWorkItem(long id, Map<String, Object> results) {
 			completed = true;
+			this.results = results;
 		}
 		
 		public boolean isCompleted() {
@@ -276,6 +354,10 @@
 		public Set<WorkItem> getWorkItems() {
 			return null;
 		}
+		
+		public Map<String, Object> getResults() {
+			return results;
+		}
 
 		public void internalAbortWorkItem(long id) {
 		}




More information about the jboss-svn-commits mailing list