[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