[jboss-svn-commits] JBL Code SVN: r23047 - in labs/jbossrules/trunk: drools-eclipse/drools-eclipse-task/META-INF and 10 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Sep 24 09:37:13 EDT 2008


Author: KrisVerlaenen
Date: 2008-09-24 09:37:13 -0400 (Wed, 24 Sep 2008)
New Revision: 23047

Added:
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/src/main/java/org/drools/eclipse/task/views/AbstractBlockingResponseHandler.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/src/main/java/org/drools/eclipse/task/views/BlockingTaskOperationResponseHandler.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/src/main/java/org/drools/eclipse/task/views/BlockingTaskSummaryResponseHandler.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/AbstractBlockingResponseHandler.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/BlockingAddTaskResponseHandler.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/BlockingEventResponseHandler.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/BlockingGetTaskResponseHandler.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskCompletedEvent.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/RunTaskService.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingTaskSummaryResponseHandler.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskLifeCycleTest.java
Removed:
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskClosedEvent.java
   labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/wsht/
Modified:
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/.classpath
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/META-INF/MANIFEST.MF
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/build.properties
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/src/main/java/org/drools/eclipse/task/views/TaskView.java
   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/event/DefaultTaskEventListener.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/MessagingTaskEventListener.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEventListener.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEventSupport.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServiceSession.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/MockEventMessagingTest.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceLifeCycleTest.java
Log:
JBRULES-1757: Add WS-HT service views to IDE
 - updated views to new task API
 - added more event listeners + WS-HT work item handler

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/.classpath	2008-09-24 10:50:10 UTC (rev 23046)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/.classpath	2008-09-24 13:37:13 UTC (rev 23047)
@@ -1,12 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry exported="true" kind="lib" path="lib/slf4j-api-1.5.2.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/slf4j-jdk14-1.5.2.jar"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="lib" path="lib/drools-process-task-5.0.0.SNAPSHOT.jar"/>
 	<classpathentry kind="lib" path="lib/mina-core-2.0.0-M3.jar"/>
-	<classpathentry kind="lib" path="lib/ejb3-persistence-1.0.2.GA.jar"/>
-	<classpathentry kind="lib" path="lib/slf4j-jdk14-1.5.2.jar"/>
-	<classpathentry kind="lib" path="lib/slf4j-api-1.5.2.jar"/>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/META-INF/MANIFEST.MF
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/META-INF/MANIFEST.MF	2008-09-24 10:50:10 UTC (rev 23046)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/META-INF/MANIFEST.MF	2008-09-24 13:37:13 UTC (rev 23047)
@@ -12,5 +12,4 @@
  lib/drools-process-task-5.0.0.SNAPSHOT.jar,
  lib/mina-core-2.0.0-M3.jar,
  lib/slf4j-api-1.5.2.jar,
- lib/slf4j-jdk14-1.5.2.jar,
- lib/ejb3-persistence-1.0.2.GA.jar
+ lib/slf4j-jdk14-1.5.2.jar

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/build.properties
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/build.properties	2008-09-24 10:50:10 UTC (rev 23046)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/build.properties	2008-09-24 13:37:13 UTC (rev 23047)
@@ -8,5 +8,4 @@
                lib/drools-process-task-5.0.0.SNAPSHOT.jar,\
                lib/mina-core-2.0.0-M3.jar,\
                lib/slf4j-api-1.5.2.jar,\
-               lib/slf4j-jdk14-1.5.2.jar,\
-               lib/ejb3-persistence-1.0.2.GA.jar
+               lib/slf4j-jdk14-1.5.2.jar

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/src/main/java/org/drools/eclipse/task/views/AbstractBlockingResponseHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/src/main/java/org/drools/eclipse/task/views/AbstractBlockingResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/src/main/java/org/drools/eclipse/task/views/AbstractBlockingResponseHandler.java	2008-09-24 13:37:13 UTC (rev 23047)
@@ -0,0 +1,54 @@
+/**
+ * 
+ */
+package org.drools.eclipse.task.views;
+
+import org.drools.task.service.BaseMinaHandler.ResponseHandler;
+import org.drools.task.service.TaskClientHandler.AddCommentResponseHandler;
+
+public abstract class AbstractBlockingResponseHandler
+    implements
+    ResponseHandler {
+    protected volatile Boolean done = Boolean.FALSE;
+    private String error;
+    
+    public boolean hasError() {
+        return error != null;
+    }
+
+    public String getError() {
+        return error;
+    }
+
+    public void setError(String error) {
+        this.error = error;
+    }
+
+    public boolean isDone() {
+        synchronized ( done ) {
+            return done;
+        }
+    }
+
+    public boolean waitTillDone(long time) {
+        long totalWaitTime = 0;
+        try {
+            while ( true ) {
+                synchronized ( done ) {
+                    if ( done ) {
+                        return true;
+                    }
+                }
+                if ( totalWaitTime >= time ) {
+                    break;
+                }
+                Thread.sleep( 250 );
+                totalWaitTime += 250;
+            }
+        } catch ( Exception e ) {
+            // swallow, as we are either true or false
+        }
+        return false;
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/src/main/java/org/drools/eclipse/task/views/BlockingTaskOperationResponseHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/src/main/java/org/drools/eclipse/task/views/BlockingTaskOperationResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/src/main/java/org/drools/eclipse/task/views/BlockingTaskOperationResponseHandler.java	2008-09-24 13:37:13 UTC (rev 23047)
@@ -0,0 +1,16 @@
+/**
+ * 
+ */
+package org.drools.eclipse.task.views;
+
+import org.drools.eventmessaging.EventResponseHandler;
+import org.drools.eventmessaging.Payload;
+import org.drools.task.service.TaskClientHandler.TaskOperationResponseHandler;
+
+public class BlockingTaskOperationResponseHandler extends AbstractBlockingResponseHandler implements TaskOperationResponseHandler {
+      public void setIsDone(boolean done) {
+          synchronized ( this.done ) {
+            this.done = done;
+        }
+      }
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/src/main/java/org/drools/eclipse/task/views/BlockingTaskSummaryResponseHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/src/main/java/org/drools/eclipse/task/views/BlockingTaskSummaryResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/src/main/java/org/drools/eclipse/task/views/BlockingTaskSummaryResponseHandler.java	2008-09-24 13:37:13 UTC (rev 23047)
@@ -0,0 +1,43 @@
+package org.drools.eclipse.task.views;
+
+import java.util.List;
+
+import org.drools.task.query.TaskSummary;
+import org.drools.task.service.TaskClientHandler.TaskSummaryResponseHandler;
+
+public class BlockingTaskSummaryResponseHandler extends AbstractBlockingResponseHandler implements TaskSummaryResponseHandler {
+	
+	private volatile List<TaskSummary> results;
+
+	public synchronized void execute(List<TaskSummary> results) {
+        synchronized ( this.done ) {        
+    		this.results = results;
+            this.done = true;
+            notifyAll(); 
+        }
+	}
+
+	public synchronized List<TaskSummary> getResults() {
+        boolean isDone;
+        synchronized ( done ) {
+            isDone = this.done;
+        }
+        if ( !isDone ) {                  
+            try {
+                wait( 10000 );
+            } catch ( InterruptedException e ) {
+                // swallow as this is just a notification
+            }
+        }        
+        synchronized ( done ) {
+            isDone = this.done;
+        }        
+        if ( !isDone ) {
+            throw new RuntimeException("Timeout : unable to retrieve results" );
+        }
+        
+        return results;
+	}
+
+};
+

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/src/main/java/org/drools/eclipse/task/views/TaskView.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/src/main/java/org/drools/eclipse/task/views/TaskView.java	2008-09-24 10:50:10 UTC (rev 23046)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/src/main/java/org/drools/eclipse/task/views/TaskView.java	2008-09-24 13:37:13 UTC (rev 23047)
@@ -14,7 +14,6 @@
 import org.drools.task.query.TaskSummary;
 import org.drools.task.service.MinaTaskClient;
 import org.drools.task.service.TaskClientHandler;
-import org.drools.task.service.TaskClientHandler.TaskSummaryResponseHandler;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IMenuListener;
 import org.eclipse.jface.action.IMenuManager;
@@ -75,7 +74,7 @@
 		STATUSSES.put(Status.Exited, "Exited");
 		STATUSSES.put(Status.Failed, "Failed");
 		STATUSSES.put(Status.InProgress, "InProgress");
-		STATUSSES.put(Status.Obselete, "Obsolete");
+		STATUSSES.put(Status.Obsolete, "Obsolete");
 		STATUSSES.put(Status.Ready, "Ready");
 		STATUSSES.put(Status.Reserved, "Reserved");
 		STATUSSES.put(Status.Suspended, "Suspended");
@@ -129,7 +128,7 @@
 						if (user == null) {
 							return null;
 						}
-						return user.getDisplayName();
+						return user.getId();
 					case 3:
 						return taskSummary.getDescription();
 					default:
@@ -323,7 +322,7 @@
 				suspendButton.setEnabled(selected && 
 					(Status.Ready.equals(task.getStatus()) || Status.Reserved.equals(task.getStatus()) || Status.InProgress.equals(task.getStatus())));
 				resumeButton.setEnabled(selected && Status.Suspended.equals(task.getStatus()));
-				skipButton.setEnabled(selected && !Status.Completed.equals(task.getStatus()) && !Status.Failed.equals(task.getStatus()));
+				skipButton.setEnabled(selected && !Status.Completed.equals(task.getStatus()) && !Status.Failed.equals(task.getStatus())&& !Status.Obsolete.equals(task.getStatus()));
 				completeButton.setEnabled(selected && Status.InProgress.equals(task.getStatus()));
 				failButton.setEnabled(selected && Status.InProgress.equals(task.getStatus()));
 			}
@@ -384,7 +383,7 @@
 	}
 	
 	private void refresh() {
-		Long userId = getUserId();
+		String userId = getUserId();
 		if (userId == null) {
 			return;
 		}
@@ -410,7 +409,7 @@
 			return;
 		}
 		
-		Long userId = getUserId();
+		String userId = getUserId();
 		if (userId == null) {
 			return;
 		}
@@ -420,7 +419,8 @@
 			return;
 		}
 		
-		client.claim(taskSummary.getId(), userId);
+		BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
+		client.claim(taskSummary.getId(), userId, responseHandler);
         client.disconnect();
         refresh();
 	}
@@ -431,7 +431,7 @@
 			return;
 		}
 		
-		Long userId = getUserId();
+		String userId = getUserId();
 		if (userId == null) {
 			return;
 		}
@@ -441,7 +441,8 @@
 			return;
 		}
 		
-		client.start(taskSummary.getId(), userId);
+		BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
+		client.start(taskSummary.getId(), userId, responseHandler);
         client.disconnect();
         refresh();
 	}
@@ -452,7 +453,7 @@
 			return;
 		}
 		
-		Long userId = getUserId();
+		String userId = getUserId();
 		if (userId == null) {
 			return;
 		}
@@ -462,7 +463,8 @@
 			return;
 		}
 		
-		client.stop(taskSummary.getId(), userId);
+		BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
+		client.stop(taskSummary.getId(), userId, responseHandler);
         client.disconnect();
         refresh();
 	}
@@ -473,7 +475,7 @@
 			return;
 		}
 		
-		Long userId = getUserId();
+		String userId = getUserId();
 		if (userId == null) {
 			return;
 		}
@@ -483,7 +485,8 @@
 			return;
 		}
 		
-		client.release(taskSummary.getId(), userId);
+		BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
+		client.release(taskSummary.getId(), userId, responseHandler);
         client.disconnect();
         refresh();
 	}
@@ -494,7 +497,7 @@
 			return;
 		}
 		
-		Long userId = getUserId();
+		String userId = getUserId();
 		if (userId == null) {
 			return;
 		}
@@ -504,7 +507,8 @@
 			return;
 		}
 		
-		client.suspend(taskSummary.getId(), userId);
+		BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
+		client.suspend(taskSummary.getId(), userId, responseHandler);
         client.disconnect();
         refresh();
 	}
@@ -515,7 +519,7 @@
 			return;
 		}
 		
-		Long userId = getUserId();
+		String userId = getUserId();
 		if (userId == null) {
 			return;
 		}
@@ -525,7 +529,8 @@
 			return;
 		}
 		
-		client.resume(taskSummary.getId(), userId);
+		BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
+		client.resume(taskSummary.getId(), userId, responseHandler);
         client.disconnect();
         refresh();
 	}
@@ -536,7 +541,7 @@
 			return;
 		}
 		
-		Long userId = getUserId();
+		String userId = getUserId();
 		if (userId == null) {
 			return;
 		}
@@ -546,7 +551,8 @@
 			return;
 		}
 		
-		client.skip(taskSummary.getId(), userId);
+		BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
+		client.skip(taskSummary.getId(), userId, responseHandler);
         client.disconnect();
         refresh();
 	}
@@ -557,7 +563,7 @@
 			return;
 		}
 		
-		Long userId = getUserId();
+		String userId = getUserId();
 		if (userId == null) {
 			return;
 		}
@@ -567,7 +573,8 @@
 			return;
 		}
 		
-		client.complete(taskSummary.getId(), userId);
+		BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
+		client.complete(taskSummary.getId(), userId, responseHandler);
         client.disconnect();
         refresh();
 	}
@@ -578,7 +585,7 @@
 			return;
 		}
 		
-		Long userId = getUserId();
+		String userId = getUserId();
 		if (userId == null) {
 			return;
 		}
@@ -588,7 +595,8 @@
 			return;
 		}
 		
-		client.fail(taskSummary.getId(), userId);
+		BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
+		client.fail(taskSummary.getId(), userId, responseHandler);
         client.disconnect();
         refresh();
 	}
@@ -606,15 +614,8 @@
 		return client;
 	}
 	
-	private Long getUserId() {
-		Long userId = null;
-		try {
-			userId = new Long(userNameText.getText());
-		} catch (NumberFormatException e) {
-			showMessage("Could not convert user id, should be a long value.");
-			return null;
-		}
-		return userId;
+	private String getUserId() {
+		return userNameText.getText();
 	}
 	
 	private TaskSummary getSelectedTask() {
@@ -628,26 +629,4 @@
 		return null;
 	}
 	
-	private class BlockingTaskSummaryResponseHandler implements TaskSummaryResponseHandler {
-        private volatile List<TaskSummary> results;
-		public void execute(List<TaskSummary> results) {
-            this.results = results;
-		}
-		public List<TaskSummary> getResults() {
-			int retryCounter = 0;
-			while (results == null && retryCounter < 5 ) {
-				try {
-					Thread.sleep(1000);
-				} catch (Throwable t) {
-					t.printStackTrace();
-				}
-				retryCounter++;
-			}
-			if (results == null) {
-				throw new RuntimeException("Timeout : unable to retrieve results");
-			}
-			return results;
-		}
-	}
-	
 }
\ No newline at end of file

Copied: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht (from rev 23020, labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/wsht)


Property changes on: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht
___________________________________________________________________
Name: svn:mergeinfo
   + 

Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/AbstractBlockingResponseHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/AbstractBlockingResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/AbstractBlockingResponseHandler.java	2008-09-24 13:37:13 UTC (rev 23047)
@@ -0,0 +1,53 @@
+/**
+ * 
+ */
+package org.drools.process.workitem.wsht;
+
+import org.drools.task.service.BaseMinaHandler.ResponseHandler;
+
+public abstract class AbstractBlockingResponseHandler
+    implements
+    ResponseHandler {
+    protected volatile Boolean done = Boolean.FALSE;
+    private String error;
+    
+    public boolean hasError() {
+        return error != null;
+    }
+
+    public String getError() {
+        return error;
+    }
+
+    public void setError(String error) {
+        this.error = error;
+    }
+
+    public boolean isDone() {
+        synchronized ( done ) {
+            return done;
+        }
+    }
+
+    public boolean waitTillDone(long time) {
+        long totalWaitTime = 0;
+        try {
+            while ( true ) {
+                synchronized ( done ) {
+                    if ( done ) {
+                        return true;
+                    }
+                }
+                if ( totalWaitTime >= time ) {
+                    break;
+                }
+                Thread.sleep( 250 );
+                totalWaitTime += 250;
+            }
+        } catch ( Exception e ) {
+            // swallow, as we are either true or false
+        }
+        return false;
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/BlockingAddTaskResponseHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/BlockingAddTaskResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/BlockingAddTaskResponseHandler.java	2008-09-24 13:37:13 UTC (rev 23047)
@@ -0,0 +1,40 @@
+/**
+ * 
+ */
+package org.drools.process.workitem.wsht;
+
+import org.drools.task.service.TaskClientHandler.AddTaskResponseHandler;
+
+public class BlockingAddTaskResponseHandler extends AbstractBlockingResponseHandler implements AddTaskResponseHandler {
+    private volatile long taskId;
+
+    public synchronized void execute(long taskId) {
+        synchronized ( this.done ) {        
+            this.taskId = taskId;
+            this.done = true;
+            notifyAll(); 
+        }
+    }
+    
+    public synchronized long getTaskId() {
+        boolean isDone;
+        synchronized ( done ) {
+            isDone = this.done;
+        }
+        if ( !isDone ) {                  
+            try {
+                wait( 10000 );
+            } catch ( InterruptedException e ) {
+                // swallow as this is just a notification
+            }
+        }        
+        synchronized ( done ) {
+            isDone = this.done;
+        }        
+        if ( !isDone ) {
+            throw new RuntimeException("Timeout : unable to retrieve Task Id" );
+        }
+        
+        return taskId;
+    }       
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/BlockingEventResponseHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/BlockingEventResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/BlockingEventResponseHandler.java	2008-09-24 13:37:13 UTC (rev 23047)
@@ -0,0 +1,41 @@
+/**
+ * 
+ */
+package org.drools.process.workitem.wsht;
+
+import org.drools.eventmessaging.EventResponseHandler;
+import org.drools.eventmessaging.Payload;
+
+public class BlockingEventResponseHandler extends AbstractBlockingResponseHandler implements EventResponseHandler {
+    private volatile Payload payload;
+
+    public synchronized void execute(Payload payload) {
+        synchronized ( this.done ) {            
+            this.payload = payload;        
+            this.done = true;
+        }
+        notifyAll();        
+    }
+    
+    public synchronized Payload getPayload() {
+        boolean isDone;
+        synchronized ( done ) {
+            isDone = this.done;
+        }
+        if ( !isDone ) {                  
+            try {
+                wait( 1000000 );
+            } catch ( InterruptedException e ) {
+                // swallow as this is just a notification
+            }
+        }        
+        synchronized ( done ) {
+            isDone = this.done;
+        }        
+        if ( !isDone ) {
+            throw new RuntimeException("Timeout : unable to retrieve event payload" );
+        }
+        
+        return payload;
+    }       
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/BlockingGetTaskResponseHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/BlockingGetTaskResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/BlockingGetTaskResponseHandler.java	2008-09-24 13:37:13 UTC (rev 23047)
@@ -0,0 +1,35 @@
+/**
+ * 
+ */
+package org.drools.process.workitem.wsht;
+
+import org.drools.task.Task;
+import org.drools.task.service.TaskClientHandler.GetTaskResponseHandler;
+
+public class BlockingGetTaskResponseHandler extends AbstractBlockingResponseHandler implements GetTaskResponseHandler {
+    private volatile Task task;
+
+    public synchronized void execute(Task task) {
+        synchronized ( this.done ) {        
+            this.task = task;
+            this.done = true;
+            notifyAll();     
+        }
+    }
+    
+    public synchronized Task getTask() {
+        if ( task == null ) {                  
+            try {
+                wait( 10000 );
+            } catch ( InterruptedException e ) {
+                // swallow as this is just a notifiation
+            }
+        }
+        
+        if ( task == null ) {
+            throw new RuntimeException("Timeout : unable to retrieve Task Id" );
+        }
+        
+        return task;
+    }       
+}
\ No newline at end of file

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-workitems/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java	2008-09-23 16:50:02 UTC (rev 23020)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java	2008-09-24 13:37:13 UTC (rev 23047)
@@ -3,116 +3,126 @@
 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.process.instance.WorkItem;
-//import org.drools.process.instance.WorkItemHandler;
-//import org.drools.process.instance.WorkItemManager;
-//import org.drools.task.I18NText;
-//import org.drools.task.OrganizationalEntity;
-//import org.drools.task.PeopleAssignments;
-//import org.drools.task.Status;
-//import org.drools.task.Task;
-//import org.drools.task.TaskData;
-//import org.drools.task.User;
-//import org.drools.task.service.MinaTaskClient;
-//import org.drools.task.service.TaskClientHandler;
-//import org.drools.task.service.TaskClientHandler.AddTaskResponseHandler;
+import org.apache.mina.transport.socket.nio.NioSocketConnector;
+import org.drools.eventmessaging.EventKey;
+import org.drools.process.instance.WorkItem;
+import org.drools.process.instance.WorkItemHandler;
+import org.drools.process.instance.WorkItemManager;
+import org.drools.task.I18NText;
+import org.drools.task.OrganizationalEntity;
+import org.drools.task.PeopleAssignments;
+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.TaskEventKey;
+import org.drools.task.service.MinaTaskClient;
+import org.drools.task.service.TaskClientHandler;
 
-public class WSHumanTaskHandler {//implements WorkItemHandler {
-//
-//	private String ipAddress = "127.0.0.1";
-//	private int port = 9123;
-//
-//	public void setConnection(String ipAddress, int port) {
-//		this.ipAddress = ipAddress;
-//		this.port = port;
-//	}
-//
-//	public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
-//		// TODO: cache client and keep client open ?
-//		MinaTaskClient client = new MinaTaskClient(
-//			"org.drools.process.workitem.wsht.WSHumanTaskHandler", new TaskClientHandler());
-//		NioSocketConnector connector = new NioSocketConnector();
-//		SocketAddress address = new InetSocketAddress(ipAddress, port);
-//		client.connect(connector, address);
-//		
-//		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 priority = (String) workItem.getParameter("Priority");
-//		if (priority != null) {
-//			try {
-//				task.setPriority(new Integer(priority));
-//			} catch (NumberFormatException e) {
-//				// do nothing
-//			}
-//		}
-//		TaskData taskData = new TaskData();
-//		taskData.setWorkItemId(workItem.getId());
-//		taskData.setStatus(Status.Created);
-//		task.setTaskData(taskData);
-//		String actorId = (String) workItem.getParameter("ActorId");
-//		if (actorId != null) {
-//			PeopleAssignments assignments = new PeopleAssignments();
-//			List<OrganizationalEntity> potentialOwners = new ArrayList<OrganizationalEntity>();
-//			User user = new User();
-//			user.setId(new Long(actorId));
-//			potentialOwners.add(user);
-//			assignments.setPotentialOwners(potentialOwners);
-//			task.setPeopleAssignments(assignments);
-//			//taskData.setActualOwner(user);
-//			//taskData.setCreatedBy(user);
-//			//taskData.setCreatedOn(new Date());
-//			//taskData.setActivationTime(new Date());
-//		}
-//		client.addTask(task, new BlockingAddTaskResponseHandler());
-//		client.disconnect();
-//	}
-//
-//	public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
-//		// TODO
-//	}
-//	
-//	private class BlockingAddTaskResponseHandler implements AddTaskResponseHandler {
-//        private volatile long taskId;
-//        private volatile boolean wait = true;
-//
-//        public synchronized void execute(long taskId) {
-//            this.taskId = taskId;
-//            wait = false;
-//            notifyAll();                
-//        }
-//        
-//        public synchronized long getTaskId() {
-//            if ( wait ) {                  
-//                try {
-//                    wait( 3000 );
-//                } catch ( InterruptedException e ) {
-//                    // swallow as this is just a notifiation
-//                }
-//            }
-//            
-//            if ( wait ) {
-//                throw new RuntimeException("Timeout : unable to retrieve Task Id" );
-//            }
-//            
-//            return taskId;
-//        }       
-//    }
+public class WSHumanTaskHandler implements WorkItemHandler {
 
+	private String ipAddress = "127.0.0.1";
+	private int port = 9123;
+	private MinaTaskClient client;
+	private Map<Long, WorkItemManager> managers = new HashMap<Long, WorkItemManager>();
+
+	public void setConnection(String ipAddress, int port) {
+		this.ipAddress = ipAddress;
+		this.port = port;
+	}
+	
+	private void createClient() {
+		client = new MinaTaskClient(
+			"org.drools.process.workitem.wsht.WSHumanTaskHandler", new TaskClientHandler());
+		NioSocketConnector connector = new NioSocketConnector();
+		SocketAddress address = new InetSocketAddress(ipAddress, port);
+		client.connect(connector, address);
+	}
+
+	public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+		if (client == null) {
+			createClient();
+		}
+		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 priority = (String) workItem.getParameter("Priority");
+		if (priority != null) {
+			try {
+				task.setPriority(new Integer(priority));
+			} catch (NumberFormatException e) {
+				// do nothing
+			}
+		}
+		TaskData taskData = new TaskData();
+		taskData.setWorkItemId(workItem.getId());
+		task.setTaskData(taskData);
+		String actorId = (String) workItem.getParameter("ActorId");
+		if (actorId != null) {
+			PeopleAssignments assignments = new PeopleAssignments();
+			List<OrganizationalEntity> potentialOwners = new ArrayList<OrganizationalEntity>();
+			User user = new User();
+			user.setId(actorId);
+			potentialOwners.add(user);
+			assignments.setPotentialOwners(potentialOwners);
+			task.setPeopleAssignments(assignments);
+		}
+		
+		BlockingAddTaskResponseHandler taskResponseHandler = new BlockingAddTaskResponseHandler();
+		client.addTask(task, taskResponseHandler);
+		long taskId = taskResponseHandler.getTaskId();
+		managers.put(taskId, manager);
+		System.out.println("Created task " + taskId + " for work item " + workItem.getId());
+		
+		new Thread(new WaitForEvent(taskId)).run();
+	}
+	
+	public void dispose() {
+		if (client != null) {
+			client.disconnect();
+		}
+	}
+
+	public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+		// TODO
+	}
+	
+	private class WaitForEvent implements Runnable {
+		private long taskId;
+		public WaitForEvent(long taskId) {
+			this.taskId = taskId;
+		}
+		public void run() {
+			EventKey key = new TaskEventKey(TaskCompletedEvent.class, taskId );           
+	        BlockingEventResponseHandler eventResponseHandler = new BlockingEventResponseHandler(); 
+	        client.registerForEvent( key, true, eventResponseHandler );
+	        eventResponseHandler.getPayload();
+	        
+	        BlockingGetTaskResponseHandler getTaskResponseHandler = new BlockingGetTaskResponseHandler();
+	        client.getTask(taskId, getTaskResponseHandler);
+	        Task task = getTaskResponseHandler.getTask();
+	        long workItemId = task.getTaskData().getWorkItemId();
+        	System.out.println("Completing work item " + workItemId);
+	        
+	        managers.get(taskId).completeWorkItem(workItemId, null);
+		}
+	}
+
 }

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/DefaultTaskEventListener.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/DefaultTaskEventListener.java	2008-09-24 10:50:10 UTC (rev 23046)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/DefaultTaskEventListener.java	2008-09-24 13:37:13 UTC (rev 23047)
@@ -5,7 +5,7 @@
     public void taskClaimed(TaskClaimedEvent event) {        
     }
 
-    public void taskClosed(TaskClosedEvent event) {
+    public void taskCompleted(TaskCompletedEvent event) {
     }
 
 }

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/MessagingTaskEventListener.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/MessagingTaskEventListener.java	2008-09-24 10:50:10 UTC (rev 23046)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/MessagingTaskEventListener.java	2008-09-24 13:37:13 UTC (rev 23047)
@@ -34,8 +34,8 @@
         }
     }
 
-    public void taskClosed(TaskClosedEvent event) {
-        EventKey key = new TaskEventKey(TaskClosedEvent.class, event.getTaskId() );
+    public void taskCompleted(TaskCompletedEvent event) {
+        EventKey key = new TaskEventKey(TaskCompletedEvent.class, event.getTaskId() );
         List<EventTriggerTransport> targets = keys.getTargets( key );
         if ( targets == null ){
             return;

Deleted: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskClosedEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskClosedEvent.java	2008-09-24 10:50:10 UTC (rev 23046)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskClosedEvent.java	2008-09-24 13:37:13 UTC (rev 23047)
@@ -1,29 +0,0 @@
-package org.drools.task.event;
-
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-
-public class TaskClosedEvent extends TaskEvent implements Externalizable {
-    private String userId;
-    
-    public TaskClosedEvent(long taskId, String userId) {
-        super( taskId );
-        this.userId = userId;
-    }
-    
-    public void writeExternal(ObjectOutput out) throws IOException {
-        out.writeUTF(  userId  );
-    }   
-    
-    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-        userId = in.readUTF();
-    }
-
-
-    public String getUserId() {
-        return userId;
-    }
-
-}

Copied: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskCompletedEvent.java (from rev 22778, labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskClosedEvent.java)
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskCompletedEvent.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskCompletedEvent.java	2008-09-24 13:37:13 UTC (rev 23047)
@@ -0,0 +1,35 @@
+package org.drools.task.event;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+public class TaskCompletedEvent extends TaskEvent implements Externalizable {
+	
+    private String userId;
+    
+    public TaskCompletedEvent() {
+    	
+    }
+    
+    public TaskCompletedEvent(long taskId, String userId) {
+        super( taskId );
+        this.userId = userId;
+    }
+    
+    public void writeExternal(ObjectOutput out) throws IOException {
+    	super.writeExternal(out);
+        out.writeUTF( userId );
+    }   
+    
+    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+    	super.readExternal(in);
+    	userId = in.readUTF();
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+}


Property changes on: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskCompletedEvent.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEventListener.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEventListener.java	2008-09-24 10:50:10 UTC (rev 23046)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEventListener.java	2008-09-24 13:37:13 UTC (rev 23047)
@@ -24,6 +24,6 @@
     
     void taskClaimed(TaskClaimedEvent event);
     
-    void taskClosed(TaskClosedEvent event);
+    void taskCompleted(TaskCompletedEvent event);
     
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEventSupport.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEventSupport.java	2008-09-24 10:50:10 UTC (rev 23046)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEventSupport.java	2008-09-24 13:37:13 UTC (rev 23047)
@@ -17,19 +17,14 @@
  */
 
 import java.io.Externalizable;
-import java.io.ObjectOutput;
 import java.io.IOException;
 import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 
-import org.drools.WorkingMemory;
-import org.drools.common.InternalWorkingMemory;
-import org.drools.spi.Activation;
-import org.drools.spi.AgendaGroup;
 
-
 public class TaskEventSupport
     implements
     Externalizable {
@@ -73,26 +68,29 @@
     }
     
     public void fireTaskClaimed(final long taskId, final String userId) {
-      if ( this.listeners.isEmpty() ) {
+    	System.out.println("Task " + taskId + " claimed");
+        if ( this.listeners.isEmpty() ) {
           return;
       }
 
       final TaskClaimedEvent event = new TaskClaimedEvent(taskId, userId);
       
       for ( TaskEventListener listener: listeners) {
+      	  System.out.println("notifying listener " + listener);
           listener.taskClaimed( event );
       }
   }    
 
-    public void fireTaskClosed(final long taskId, final String userId) {
+    public void fireTaskCompleted(final long taskId, final String userId) {
         if ( this.listeners.isEmpty() ) {
             return;
         }
 
-        final TaskClosedEvent event = new TaskClosedEvent( taskId, userId );
+        final TaskCompletedEvent event = new TaskCompletedEvent( taskId, userId );
         
         for ( TaskEventListener listener: listeners) {
-            listener.taskClosed( event );
+        	System.out.println("notifying listener " + listener);
+            listener.taskCompleted( event );
         }
     } 
     

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServiceSession.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServiceSession.java	2008-09-24 10:50:10 UTC (rev 23046)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServiceSession.java	2008-09-24 13:37:13 UTC (rev 23047)
@@ -16,7 +16,6 @@
 import org.drools.task.Comment;
 import org.drools.task.Content;
 import org.drools.task.Deadline;
-import org.drools.task.Delegation;
 import org.drools.task.Group;
 import org.drools.task.OrganizationalEntity;
 import org.drools.task.PeopleAssignments;
@@ -326,6 +325,13 @@
                                                                task.getTaskData().getActualOwner().getId() );
                     break;
                 }
+                
+                case Complete : {
+                    // trigger event support
+                    service.getEventSupport().fireTaskCompleted( task.getId(),
+                                                                 task.getTaskData().getActualOwner().getId() );
+                    break;
+                }
             }
 
         } catch ( Exception e ) {

Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/RunTaskService.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/RunTaskService.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/RunTaskService.java	2008-09-24 13:37:13 UTC (rev 23047)
@@ -0,0 +1,107 @@
+package org.drools.task;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.Date;
+import java.util.Map;
+import java.util.Properties;
+
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+
+import org.apache.commons.collections.map.HashedMap;
+import org.drools.task.service.MinaTaskServer;
+import org.drools.task.service.SendIcal;
+import org.drools.task.service.TaskService;
+import org.drools.task.service.TaskServiceSession;
+import org.mvel.MVEL;
+import org.mvel.ParserContext;
+import org.mvel.compiler.ExpressionCompiler;
+
+public class RunTaskService {
+
+	private EntityManagerFactory emf;
+	private TaskService taskService;
+	private TaskServiceSession taskSession;
+	private MinaTaskServer server;
+
+	public static void main(String[] args) throws Exception {
+		new RunTaskService().start();
+	}
+
+	@SuppressWarnings("unchecked")
+	private void start() 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);
+		taskSession = taskService.createSession();
+		MockUserInfo userInfo = new MockUserInfo();
+		taskService.setUserinfo(userInfo);
+		Map<String, Object> vars = new HashedMap();
+
+		Reader reader = new InputStreamReader(RunTaskService.class.getResourceAsStream("LoadUsers.mvel"));
+		Map<String, User> users = (Map<String, User>) eval(reader, vars);
+		for (User user : users.values()) {
+			taskSession.addUser(user);
+		}
+
+		reader = new InputStreamReader(RunTaskService.class.getResourceAsStream("LoadGroups.mvel"));
+		Map<String, Group> groups = (Map<String, Group>) eval(reader, vars);
+		for (Group group : groups.values()) {
+			taskSession.addGroup(group);
+		}
+		
+		server = new MinaTaskServer( taskService );
+        Thread thread = new Thread( server );
+        thread.start();
+        Thread.sleep( 500 );
+        System.out.println("Server started ...");
+	}
+
+	protected void stop() throws Exception {
+        server.stop();
+		taskSession.dispose();
+		emf.close();
+	}
+
+	public Object eval(Reader reader, Map<String, Object> vars) {
+		try {
+			return eval(toString(reader), vars);
+		} catch (IOException e) {
+			throw new RuntimeException("Exception Thrown", e);
+		}
+	}
+
+	public String toString(Reader reader) throws IOException {
+		int charValue = 0;
+		StringBuffer sb = new StringBuffer(1024);
+		while ((charValue = reader.read()) != -1) {
+			// result = result + (char) charValue;
+			sb.append((char) charValue);
+		}
+		return sb.toString();
+	}
+
+	public Object eval(String str, Map<String, Object> 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/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingTaskSummaryResponseHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingTaskSummaryResponseHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingTaskSummaryResponseHandler.java	2008-09-24 13:37:13 UTC (rev 23047)
@@ -0,0 +1,43 @@
+package org.drools.task.service;
+
+import java.util.List;
+
+import org.drools.task.query.TaskSummary;
+import org.drools.task.service.TaskClientHandler.TaskSummaryResponseHandler;
+
+public class BlockingTaskSummaryResponseHandler extends AbstractBlockingResponseHandler implements TaskSummaryResponseHandler {
+	
+	private volatile List<TaskSummary> results;
+
+	public synchronized void execute(List<TaskSummary> results) {
+        synchronized ( this.done ) {        
+    		this.results = results;
+            this.done = true;
+            notifyAll(); 
+        }
+	}
+
+	public synchronized List<TaskSummary> getResults() {
+        boolean isDone;
+        synchronized ( done ) {
+            isDone = this.done;
+        }
+        if ( !isDone ) {                  
+            try {
+                wait( 10000 );
+            } catch ( InterruptedException e ) {
+                // swallow as this is just a notification
+            }
+        }        
+        synchronized ( done ) {
+            isDone = this.done;
+        }        
+        if ( !isDone ) {
+            throw new RuntimeException("Timeout : unable to retrieve results" );
+        }
+        
+        return results;
+	}
+
+};
+

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/MockEventMessagingTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/MockEventMessagingTest.java	2008-09-24 10:50:10 UTC (rev 23046)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/MockEventMessagingTest.java	2008-09-24 13:37:13 UTC (rev 23047)
@@ -18,7 +18,7 @@
 import org.drools.task.Task;
 import org.drools.task.event.EventPayload;
 import org.drools.task.event.TaskClaimedEvent;
-import org.drools.task.event.TaskClosedEvent;
+import org.drools.task.event.TaskCompletedEvent;
 import org.drools.task.event.TaskEventKey;
 import org.drools.task.service.MinaTaskClient;
 import org.drools.task.service.MinaTaskServer;

Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskLifeCycleTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskLifeCycleTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskLifeCycleTest.java	2008-09-24 13:37:13 UTC (rev 23047)
@@ -0,0 +1,192 @@
+package org.drools.task.service;
+
+import java.io.StringReader;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.collections.map.HashedMap;
+import org.apache.mina.transport.socket.nio.NioSocketConnector;
+import org.drools.eventmessaging.EventKey;
+import org.drools.eventmessaging.Payload;
+import org.drools.task.BaseTest;
+import org.drools.task.Status;
+import org.drools.task.Task;
+import org.drools.task.event.TaskCompletedEvent;
+import org.drools.task.event.TaskEventKey;
+import org.drools.task.query.TaskSummary;
+
+public class TaskLifeCycleTest extends BaseTest {
+	
+    MinaTaskServer server;
+    MinaTaskClient client;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        server = new MinaTaskServer( taskService );
+        Thread thread = new Thread( server );
+        thread.start();
+        Thread.sleep( 500 );
+        
+        client = new MinaTaskClient( "client 1",
+                                     new TaskClientHandler() );
+        NioSocketConnector connector = new NioSocketConnector();
+        SocketAddress address = new InetSocketAddress( "127.0.0.1",
+                                                       9123 );
+        client.connect( connector,
+                        address );
+    }
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        client.disconnect();
+        server.stop();
+    }    
+    
+    @SuppressWarnings("unchecked")
+	public void testLifeCycle() throws Exception {      
+        Map<String, Object> vars = new HashedMap();     
+        vars.put( "users", users );
+        vars.put( "groups", groups );        
+        vars.put( "now", new Date() );                
+
+        // One potential owner, should go straight to state Reserved
+        String str = "(with (new Task()) { priority = 55, taskData = (with( new TaskData()) { workItemId = 1 } ), ";
+        str += "peopleAssignments = (with ( new PeopleAssignments() ) { potentialOwners = [users['bobba']], }),";                        
+        str += "descriptions = [ new I18NText( 'en-UK', 'This is my description')], ";
+        str += "subjects = [ new I18NText( 'en-UK', 'This is my subject')], ";
+        str += "names = [ new I18NText( 'en-UK', 'This is my task name')] })";
+            
+        BlockingAddTaskResponseHandler addTaskResponseHandler = new BlockingAddTaskResponseHandler();
+        Task task = ( Task )  eval( new StringReader( str ), vars );
+        client.addTask( task, addTaskResponseHandler );
+        
+        long taskId = addTaskResponseHandler.getTaskId();
+        
+        EventKey key = new TaskEventKey(TaskCompletedEvent.class, taskId );           
+        BlockingEventResponseHandler handler = new BlockingEventResponseHandler(); 
+        client.registerForEvent( key, true, handler );
+        
+        BlockingTaskSummaryResponseHandler taskSummaryResponseHandler = new BlockingTaskSummaryResponseHandler();
+        client.getTasksAssignedAsPotentialOwner(users.get( "bobba" ).getId(), "en-UK", taskSummaryResponseHandler);
+        List<TaskSummary> tasks = taskSummaryResponseHandler.getResults(); 
+        assertEquals(1, tasks.size());
+        assertEquals(Status.Reserved, tasks.get(0).getStatus());
+        
+        BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
+        client.start( taskId, users.get( "bobba" ).getId(), responseHandler );  
+
+        taskSummaryResponseHandler = new BlockingTaskSummaryResponseHandler();
+        client.getTasksAssignedAsPotentialOwner(users.get( "bobba" ).getId(), "en-UK", taskSummaryResponseHandler);
+        tasks = taskSummaryResponseHandler.getResults(); 
+        assertEquals(1, tasks.size());
+        assertEquals(Status.InProgress, tasks.get(0).getStatus());
+        
+        responseHandler = new BlockingTaskOperationResponseHandler();
+        client.complete( taskId, users.get( "bobba" ).getId(), responseHandler );
+        
+        taskSummaryResponseHandler = new BlockingTaskSummaryResponseHandler();
+        client.getTasksAssignedAsPotentialOwner(users.get( "bobba" ).getId(), "en-UK", taskSummaryResponseHandler);
+        tasks = taskSummaryResponseHandler.getResults(); 
+        assertEquals(1, tasks.size());
+        assertEquals(Status.Completed, tasks.get(0).getStatus());
+        
+        Payload payload = handler.getPayload();
+        TaskCompletedEvent event = ( TaskCompletedEvent ) payload.get();
+        assertNotNull( event );
+        
+        BlockingGetTaskResponseHandler getTaskResponseHandler = new BlockingGetTaskResponseHandler(); 
+        client.getTask( taskId, getTaskResponseHandler );
+        Task task1 = getTaskResponseHandler.getTask();
+        assertEquals( Status.Completed , task1.getTaskData().getStatus() );         
+    }
+  
+    @SuppressWarnings("unchecked")
+	public void testLifeCycleMultipleTasks() throws Exception {      
+        Map<String, Object> vars = new HashedMap();     
+        vars.put( "users", users );
+        vars.put( "groups", groups );        
+        vars.put( "now", new Date() );                
+
+        // One potential owner, should go straight to state Reserved
+        String str = "(with (new Task()) { priority = 55, taskData = (with( new TaskData()) { workItemId = 1 } ), ";
+        str += "peopleAssignments = (with ( new PeopleAssignments() ) { potentialOwners = [users['bobba']], }),";                        
+        str += "descriptions = [ new I18NText( 'en-UK', 'This is my description')], ";
+        str += "subjects = [ new I18NText( 'en-UK', 'This is my subject')], ";
+        str += "names = [ new I18NText( 'en-UK', 'This is my task name')] })";
+            
+        BlockingAddTaskResponseHandler addTaskResponseHandler = new BlockingAddTaskResponseHandler();
+        Task task = ( Task )  eval( new StringReader( str ), vars );
+        client.addTask( task, addTaskResponseHandler );
+        long taskId = addTaskResponseHandler.getTaskId();
+        
+        EventKey key = new TaskEventKey(TaskCompletedEvent.class, taskId );           
+        BlockingEventResponseHandler handler = new BlockingEventResponseHandler(); 
+        client.registerForEvent( key, true, handler );
+        
+        BlockingTaskSummaryResponseHandler taskSummaryResponseHandler = new BlockingTaskSummaryResponseHandler();
+        client.getTasksAssignedAsPotentialOwner(users.get( "bobba" ).getId(), "en-UK", taskSummaryResponseHandler);
+        List<TaskSummary> tasks = taskSummaryResponseHandler.getResults(); 
+        assertEquals(1, tasks.size());
+        assertEquals(Status.Reserved, tasks.get(0).getStatus());
+        
+        BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
+        client.start( taskId, users.get( "bobba" ).getId(), responseHandler );  
+
+        taskSummaryResponseHandler = new BlockingTaskSummaryResponseHandler();
+        client.getTasksAssignedAsPotentialOwner(users.get( "bobba" ).getId(), "en-UK", taskSummaryResponseHandler);
+        tasks = taskSummaryResponseHandler.getResults(); 
+        assertEquals(1, tasks.size());
+        assertEquals(Status.InProgress, tasks.get(0).getStatus());
+        
+        BlockingAddTaskResponseHandler addTaskResponseHandler2 = new BlockingAddTaskResponseHandler();
+        Task task2 = ( Task )  eval( new StringReader( str ), vars );
+        client.addTask( task2, addTaskResponseHandler2 );
+        long taskId2 = addTaskResponseHandler.getTaskId();
+        
+        EventKey key2 = new TaskEventKey(TaskCompletedEvent.class, taskId2 );           
+        BlockingEventResponseHandler handler2 = new BlockingEventResponseHandler(); 
+        client.registerForEvent( key2, true, handler2 );
+        
+        taskSummaryResponseHandler = new BlockingTaskSummaryResponseHandler();
+        client.getTasksAssignedAsPotentialOwner(users.get( "bobba" ).getId(), "en-UK", taskSummaryResponseHandler);
+        tasks = taskSummaryResponseHandler.getResults(); 
+        assertEquals(2, tasks.size());
+        
+        responseHandler = new BlockingTaskOperationResponseHandler();
+        client.complete( taskId, users.get( "bobba" ).getId(), responseHandler );
+        
+        responseHandler = new BlockingTaskOperationResponseHandler();
+        client.start( taskId2, users.get( "bobba" ).getId(), responseHandler );  
+
+        taskSummaryResponseHandler = new BlockingTaskSummaryResponseHandler();
+        client.getTasksAssignedAsPotentialOwner(users.get( "bobba" ).getId(), "en-UK", taskSummaryResponseHandler);
+        tasks = taskSummaryResponseHandler.getResults(); 
+        assertEquals(2, tasks.size());
+        
+        Payload payload = handler.getPayload();
+        TaskCompletedEvent event = ( TaskCompletedEvent ) payload.get();
+        assertNotNull( event );
+        
+        BlockingGetTaskResponseHandler getTaskResponseHandler = new BlockingGetTaskResponseHandler(); 
+        client.getTask( taskId, getTaskResponseHandler );
+        task = getTaskResponseHandler.getTask();
+        assertEquals( Status.Completed , task.getTaskData().getStatus() );
+        
+        responseHandler = new BlockingTaskOperationResponseHandler();
+        client.complete( taskId2, users.get( "bobba" ).getId(), responseHandler );
+        
+        payload = handler.getPayload();
+        event = ( TaskCompletedEvent ) payload.get();
+        assertNotNull( event );
+        
+        BlockingGetTaskResponseHandler getTaskResponseHandler2 = new BlockingGetTaskResponseHandler(); 
+        client.getTask( taskId2, getTaskResponseHandler2 );
+        task2 = getTaskResponseHandler2.getTask();
+        assertEquals( Status.Completed , task2.getTaskData().getStatus() );
+    }
+    
+}

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceLifeCycleTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceLifeCycleTest.java	2008-09-24 10:50:10 UTC (rev 23046)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceLifeCycleTest.java	2008-09-24 13:37:13 UTC (rev 23047)
@@ -1,40 +1,17 @@
 package org.drools.task.service;
 
-import java.io.InputStreamReader;
-import java.io.Reader;
 import java.io.StringReader;
 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 javax.persistence.EntityManager;
-
 import org.apache.commons.collections.map.HashedMap;
 import org.apache.mina.transport.socket.nio.NioSocketConnector;
-import org.drools.task.AccessType;
-import org.drools.task.Attachment;
-import org.drools.task.Content;
 import org.drools.task.BaseTest;
-import org.drools.task.Comment;
-import org.drools.task.Deadline;
 import org.drools.task.Status;
 import org.drools.task.Task;
-import org.drools.task.query.TaskSummary;
-import org.drools.task.service.TaskClientHandler.AddAttachmentResponseHandler;
-import org.drools.task.service.TaskClientHandler.AddCommentResponseHandler;
-import org.drools.task.service.TaskClientHandler.AddTaskResponseHandler;
-import org.drools.task.service.TaskClientHandler.GetContentResponseHandler;
-import org.drools.task.service.TaskClientHandler.GetTaskResponseHandler;
-import org.drools.task.service.TaskClientHandler.TaskSummaryResponseHandler;
-import org.drools.task.service.TaskServiceEscalationTest.MockEscalatedDeadlineHandler.Item;
-import org.drools.task.service.TaskServiceTest.BlockingAllOpenTasksForUseResponseHandler;
-import org.drools.task.utils.CollectionUtils;
 
-import junit.framework.TestCase;
-
 public class TaskServiceLifeCycleTest extends BaseTest {
     MinaTaskServer server;
     MinaTaskClient client;




More information about the jboss-svn-commits mailing list