[jboss-svn-commits] JBL Code SVN: r22685 - in labs/jbossrules/trunk/drools-process/drools-workitems: src/main/java/org/drools/process/workitem and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Sep 11 10:36:39 EDT 2008


Author: KrisVerlaenen
Date: 2008-09-11 10:36:39 -0400 (Thu, 11 Sep 2008)
New Revision: 22685

Added:
   labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/wsht/
   labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java
Removed:
   labs/jbossrules/trunk/drools-process/drools-workitems/.settings/
Modified:
   labs/jbossrules/trunk/drools-process/drools-workitems/
   labs/jbossrules/trunk/drools-process/drools-workitems/.classpath
   labs/jbossrules/trunk/drools-process/drools-workitems/.project
   labs/jbossrules/trunk/drools-process/drools-workitems/pom.xml
   labs/jbossrules/trunk/drools-process/drools-workitems/src/test/java/org/drools/process/workitem/email/EmailWorkItemHandlerTest.java
Log:
JBRULES-1762: Add work item handler for human task management
 - initial implementation


Property changes on: labs/jbossrules/trunk/drools-process/drools-workitems
___________________________________________________________________
Name: svn:ignore
   - target

   + target
.settings


Modified: labs/jbossrules/trunk/drools-process/drools-workitems/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/.classpath	2008-09-11 14:09:02 UTC (rev 22684)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/.classpath	2008-09-11 14:36:39 UTC (rev 22685)
@@ -1,31 +1,48 @@
-<classpath>
-  <classpathentry kind="src" path="src/main/java"/>
-  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
-  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
-  <classpathentry kind="output" path="target/classes"/>
-  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-  <classpathentry kind="var" path="M2_REPO/commons-io/commons-io/1.4/commons-io-1.4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.1/activation-1.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/javax/mail/mail/1.4/mail-1.4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-compress/1.0-SNAPSHOT/commons-compress-1.0-SNAPSHOT.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-exec/1.0.0-SNAPSHOT/commons-exec-1.0.0-SNAPSHOT.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-finder/1.0-SNAPSHOT/commons-finder-1.0-SNAPSHOT.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-cli/2.0-SNAPSHOT/commons-cli-2.0-SNAPSHOT.jar"/>
-  <classpathentry kind="src" path="/drools-compiler"/>
-  <classpathentry kind="src" path="/drools-core"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-SNAPSHOT/mvel-2.0-SNAPSHOT.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0.1/antlr-runtime-3.0.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/antlr/gunit/1.0.1/gunit-1.0.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr/3.0.1/antlr-3.0.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.7/antlr-2.7.7.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
-  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/subethamail/subethasmtp-wiser/1.2/subethasmtp-wiser-1.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/subethamail/subethasmtp-smtp/1.2/subethasmtp-smtp-1.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.1/commons-logging-1.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
-  <classpathentry kind="var" path="M2_REPO/logkit/logkit/1.0.1/logkit-1.0.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/avalon-framework/avalon-framework/4.1.3/avalon-framework-4.1.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar"/>
+<classpath>
+  <classpathentry kind="src" path="src/main/java"/>
+  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
+  <classpathentry kind="output" path="target/classes"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="var" path="M2_REPO/commons-io/commons-io/1.4/commons-io-1.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.1/activation-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/mail/mail/1.4/mail-1.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-compress/1.0-SNAPSHOT/commons-compress-1.0-SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-exec/1.0.0-SNAPSHOT/commons-exec-1.0.0-SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-finder/1.0-SNAPSHOT/commons-finder-1.0-SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-cli/2.0-SNAPSHOT/commons-cli-2.0-SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/drools/drools-compiler/5.0.0.SNAPSHOT/drools-compiler-5.0.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-compiler/5.0.0.SNAPSHOT/drools-compiler-5.0.0.SNAPSHOT-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/drools/drools-core/5.0.0.SNAPSHOT/drools-core-5.0.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-core/5.0.0.SNAPSHOT/drools-core-5.0.0.SNAPSHOT-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-SNAPSHOT/mvel-2.0-SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0.1/antlr-runtime-3.0.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/antlr/gunit/1.0.1/gunit-1.0.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr/3.0.1/antlr-3.0.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.7/antlr-2.7.7.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
+  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/drools/drools-process-task/5.0.0.SNAPSHOT/drools-process-task-5.0.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-process-task/5.0.0.SNAPSHOT/drools-process-task-5.0.0.SNAPSHOT-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/mina/mina-core/2.0.0-M3/mina-core-2.0.0-M3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.4.3/slf4j-api-1.4.3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-jdk14/1.5.2/slf4j-jdk14-1.5.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-entitymanager/3.4.0.GA/hibernate-entitymanager-3.4.0.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/ejb3-persistence/1.0.2.GA/ejb3-persistence-1.0.2.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-commons-annotations/3.1.0.GA/hibernate-commons-annotations-3.1.0.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-annotations/3.4.0.GA/hibernate-annotations-3.4.0.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-core/3.3.0.SP1/hibernate-core-3.3.0.SP1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.1/commons-collections-3.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/transaction/jta/1.1/jta-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.4.GA/javassist-3.4.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/h2database/h2/1.0.77/h2-1.0.77.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.0.1/jmock-2.5.0.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/subethamail/subethasmtp-wiser/1.2/subethasmtp-wiser-1.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/subethamail/subethasmtp-smtp/1.2/subethasmtp-smtp-1.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.1/commons-logging-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
+  <classpathentry kind="var" path="M2_REPO/logkit/logkit/1.0.1/logkit-1.0.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/avalon-framework/avalon-framework/4.1.3/avalon-framework-4.1.3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar"/>
 </classpath>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-process/drools-workitems/.project
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/.project	2008-09-11 14:09:02 UTC (rev 22684)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/.project	2008-09-11 14:36:39 UTC (rev 22685)
@@ -1,16 +1,13 @@
-<projectDescription>
-  <name>drools-workitems</name>
-  <comment>A rule production system</comment>
-  <projects>
-    <project>drools-compiler</project>
-    <project>drools-core</project>
-  </projects>
-  <buildSpec>
-    <buildCommand>
-      <name>org.eclipse.jdt.core.javabuilder</name>
-    </buildCommand>
-  </buildSpec>
-  <natures>
-    <nature>org.eclipse.jdt.core.javanature</nature>
-  </natures>
+<projectDescription>
+  <name>drools-workitems</name>
+  <comment>A rule production system</comment>
+  <projects/>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+  </natures>
 </projectDescription>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-process/drools-workitems/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/pom.xml	2008-09-11 14:09:02 UTC (rev 22684)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/pom.xml	2008-09-11 14:36:39 UTC (rev 22685)
@@ -24,6 +24,11 @@
       <groupId>org.drools</groupId>
       <artifactId>drools-compiler</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-process-task</artifactId>
+      <version>5.0.0.SNAPSHOT</version>
+    </dependency>
 
     <!-- External dependencies -->
     <dependency>
@@ -41,15 +46,7 @@
       <artifactId>commons-finder</artifactId>
       <version>1.0-SNAPSHOT</version>
     </dependency>
-    
     <dependency>
-      <groupId>org.subethamail</groupId>
-      <artifactId>subethasmtp-wiser</artifactId>
-      <version>1.2</version>
-      <scope>test</scope>
-    </dependency>
-        
-    <dependency>
       <groupId>commons-io</groupId>
       <artifactId>commons-io</artifactId>
       <version>1.4</version>
@@ -64,6 +61,15 @@
       <artifactId>commons-exec</artifactId>
       <version>1.0.0-SNAPSHOT</version>
     </dependency>
+    
+    <!-- External test dependencies -->
+    <dependency>
+      <groupId>org.subethamail</groupId>
+      <artifactId>subethasmtp-wiser</artifactId>
+      <version>1.2</version>
+      <scope>test</scope>
+    </dependency>
+        
   </dependencies>
 
 </project>

Added: labs/jbossrules/trunk/drools-process/drools-workitems/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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java	2008-09-11 14:36:39 UTC (rev 22685)
@@ -0,0 +1,118 @@
+package org.drools.process.workitem.wsht;
+
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.util.ArrayList;
+import java.util.List;
+
+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;
+
+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;
+        }       
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-process/drools-workitems/src/test/java/org/drools/process/workitem/email/EmailWorkItemHandlerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/src/test/java/org/drools/process/workitem/email/EmailWorkItemHandlerTest.java	2008-09-11 14:09:02 UTC (rev 22684)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/test/java/org/drools/process/workitem/email/EmailWorkItemHandlerTest.java	2008-09-11 14:36:39 UTC (rev 22685)
@@ -1,21 +1,20 @@
 package org.drools.process.workitem.email;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
 import javax.mail.internet.InternetAddress;
 import javax.mail.internet.MimeMessage;
 import javax.mail.internet.MimeMessage.RecipientType;
 
+import junit.framework.TestCase;
+
 import org.drools.process.instance.WorkItemManager;
+import org.drools.process.instance.impl.DefaultWorkItemManager;
 import org.drools.process.instance.impl.WorkItemImpl;
 import org.subethamail.wiser.Wiser;
 import org.subethamail.wiser.WiserMessage;
 
-
-import junit.framework.TestCase;
-
 public class EmailWorkItemHandlerTest extends TestCase {
     Wiser wiser;
     @Override
@@ -40,7 +39,7 @@
         workItem.setParameter( "Subject", "Subject 1" );
         workItem.setParameter( "Body", "Body 1" );
         
-        WorkItemManager manager = new WorkItemManager();
+        WorkItemManager manager = new DefaultWorkItemManager(null);
         handler.executeWorkItem( workItem, manager );
         
         assertEquals( 1, wiser.getMessages().size() );
@@ -68,7 +67,7 @@
         workItem.setParameter( "Subject", "Subject 1" );
         workItem.setParameter( "Body", "Body 1" );
         
-        WorkItemManager manager = new WorkItemManager();
+        WorkItemManager manager = new DefaultWorkItemManager(null);
         handler.executeWorkItem( workItem, manager );
         
         assertEquals( 3, wiser.getMessages().size() );
@@ -124,7 +123,7 @@
         workItem.setParameter( "Subject", "Subject 1" );
         workItem.setParameter( "Body", "Body 1" );
         
-        WorkItemManager manager = new WorkItemManager();
+        WorkItemManager manager = new DefaultWorkItemManager(null);
         handler.executeWorkItem( workItem, manager );
         
         assertEquals( 6, wiser.getMessages().size() );




More information about the jboss-svn-commits mailing list