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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Nov 10 21:19:18 EST 2008


Author: KrisVerlaenen
Date: 2008-11-10 21:19:18 -0500 (Mon, 10 Nov 2008)
New Revision: 23814

Added:
   labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/transform/
   labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/transform/TransformWorkItemHandler.java
   labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/transform/Transformer.java
   labs/jbossrules/trunk/drools-process/drools-workitems/src/test/java/org/drools/process/workitem/transform/
   labs/jbossrules/trunk/drools-process/drools-workitems/src/test/java/org/drools/process/workitem/transform/FileTransformer.java
Modified:
   labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/EmailWorkItemHandler.java
   labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/exec/ExecWorkItemHandler.java
   labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/finder/FinderWorkItemHandler.java
   labs/jbossrules/trunk/drools-process/drools-workitems/src/test/java/com/sample/RuleFlowTest.java
   labs/jbossrules/trunk/drools-process/drools-workitems/src/test/resources/FileFinder.rf
   labs/jbossrules/trunk/drools-process/drools-workitems/src/test/resources/SampleWorkDefinitions.conf
Log:
JBRULES-1835: Transform work item
 - added transform work item + updated example

Modified: labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/EmailWorkItemHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/EmailWorkItemHandler.java	2008-11-11 01:13:40 UTC (rev 23813)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/EmailWorkItemHandler.java	2008-11-11 02:19:18 UTC (rev 23814)
@@ -1,7 +1,7 @@
 package org.drools.process.workitem.email;
 
+import org.drools.process.instance.WorkItemHandler;
 import org.drools.runtime.process.WorkItem;
-import org.drools.runtime.process.WorkItemHandler;
 import org.drools.runtime.process.WorkItemManager;
 
 /**

Modified: labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/exec/ExecWorkItemHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/exec/ExecWorkItemHandler.java	2008-11-11 01:13:40 UTC (rev 23813)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/exec/ExecWorkItemHandler.java	2008-11-11 02:19:18 UTC (rev 23814)
@@ -2,8 +2,8 @@
 
 import org.apache.commons.exec.CommandLine;
 import org.apache.commons.exec.DefaultExecutor;
+import org.drools.process.instance.WorkItemHandler;
 import org.drools.runtime.process.WorkItem;
-import org.drools.runtime.process.WorkItemHandler;
 import org.drools.runtime.process.WorkItemManager;
 
 public class ExecWorkItemHandler implements WorkItemHandler {

Modified: labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/finder/FinderWorkItemHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/finder/FinderWorkItemHandler.java	2008-11-11 01:13:40 UTC (rev 23813)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/finder/FinderWorkItemHandler.java	2008-11-11 02:19:18 UTC (rev 23814)
@@ -8,8 +8,8 @@
 
 import org.apache.commons.finder.FileFinder;
 import org.apache.commons.finder.Finder;
+import org.drools.process.instance.WorkItemHandler;
 import org.drools.runtime.process.WorkItem;
-import org.drools.runtime.process.WorkItemHandler;
 import org.drools.runtime.process.WorkItemManager;
 
 public class FinderWorkItemHandler implements WorkItemHandler {

Added: labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/transform/TransformWorkItemHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/transform/TransformWorkItemHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/transform/TransformWorkItemHandler.java	2008-11-11 02:19:18 UTC (rev 23814)
@@ -0,0 +1,74 @@
+package org.drools.process.workitem.transform;
+
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.process.instance.WorkItemHandler;
+import org.drools.runtime.process.WorkItem;
+import org.drools.runtime.process.WorkItemManager;
+
+public class TransformWorkItemHandler implements WorkItemHandler {
+
+	private static String INPUT_KEY = "InputObject";
+	private static String OUTPUT_TYPE_KEY = "OutputType";
+	private static String VARIABLE_OUTPUT_NAME = "OutputObject";
+
+	// Keyed on the return type of the transformer with a second key of the parameter type
+	private Map<Class<?>, Map<Class<?>, Method>> transforms =
+		new HashMap<Class<?>, Map<Class<?>, Method>>();
+
+	public void executeWorkItem(WorkItem inputItem, WorkItemManager itemMgr) {
+		try {
+			Object in = inputItem.getParameter(INPUT_KEY);
+			String outputType = (String) inputItem.getParameter(OUTPUT_TYPE_KEY);
+			Object output = Class.forName(outputType).newInstance();
+			Method txMethod = this.findTransform(output.getClass(), in.getClass());
+
+			if (txMethod != null) {
+				Object out = txMethod.invoke(null, in);
+				Map<String, Object> result = new HashMap<String, Object>();
+				result.put(VARIABLE_OUTPUT_NAME, out);
+				itemMgr.completeWorkItem(inputItem.getId(), result);
+			} else {
+				System.err.println("Failed to find a transform ");
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	public void registerTransformer(Class<?> transformer) {
+		Method[] methods = transformer.getMethods();
+		if (methods == null) {
+			return;
+		}
+		for (Method meth : methods) {
+			// Only consider methods that have the @Transformer annotation
+			if (meth.getAnnotation(Transformer.class) == null) {
+				continue;
+			}
+			Class<?> returnType = meth.getReturnType();
+			Class<?> paramType = meth.getParameterTypes()[0];
+
+			Map<Class<?>, Method> index = transforms.get(returnType);
+			if (index == null) {
+				index = new HashMap<Class<?>, Method>();
+				transforms.put(returnType, index);
+			}
+			index.put(paramType, meth);
+		}
+	}
+
+	private Method findTransform(Class<?> returnClass, Class<?> paramClass) {
+		Map<Class<?>, Method> indexedTxForm = transforms.get(returnClass);
+		if (indexedTxForm == null) {
+			return null;
+		}
+		return indexedTxForm.get(paramClass);
+	}
+
+	public void abortWorkItem(WorkItem arg0, WorkItemManager arg1) {
+		// Do nothing
+	}
+}

Added: labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/transform/Transformer.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/transform/Transformer.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/transform/Transformer.java	2008-11-11 02:19:18 UTC (rev 23814)
@@ -0,0 +1,12 @@
+package org.drools.process.workitem.transform;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target({ElementType.TYPE, ElementType.METHOD })
+public @interface Transformer {
+
+}

Modified: labs/jbossrules/trunk/drools-process/drools-workitems/src/test/java/com/sample/RuleFlowTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/src/test/java/com/sample/RuleFlowTest.java	2008-11-11 01:13:40 UTC (rev 23813)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/test/java/com/sample/RuleFlowTest.java	2008-11-11 02:19:18 UTC (rev 23814)
@@ -8,13 +8,15 @@
 import org.drools.StatefulSession;
 import org.drools.audit.WorkingMemoryFileLogger;
 import org.drools.compiler.PackageBuilder;
+import org.drools.process.instance.WorkItemHandler;
 import org.drools.process.workitem.archive.ArchiveWorkItemHandler;
 import org.drools.process.workitem.email.EmailWorkItemHandler;
 import org.drools.process.workitem.exec.ExecWorkItemHandler;
 import org.drools.process.workitem.finder.FinderWorkItemHandler;
+import org.drools.process.workitem.transform.FileTransformer;
+import org.drools.process.workitem.transform.TransformWorkItemHandler;
 import org.drools.rule.Package;
 import org.drools.runtime.process.WorkItem;
-import org.drools.runtime.process.WorkItemHandler;
 import org.drools.runtime.process.WorkItemManager;
 
 /**
@@ -41,7 +43,9 @@
 			EmailWorkItemHandler emailWorkItemHandler = new EmailWorkItemHandler();
 			emailWorkItemHandler.setConnection("mail-out.example.com", "25", null, null);
 			session.getWorkItemManager().registerWorkItemHandler("Email", emailWorkItemHandler);
-			
+			TransformWorkItemHandler transformWorkItemHandler = new TransformWorkItemHandler();
+			transformWorkItemHandler.registerTransformer(FileTransformer.class);
+			session.getWorkItemManager().registerWorkItemHandler("Transform", transformWorkItemHandler);
 			WorkingMemoryFileLogger logger = new WorkingMemoryFileLogger(session);
 			session.startProcess("com.sample.ruleflow");
 			logger.writeToDisk();

Added: labs/jbossrules/trunk/drools-process/drools-workitems/src/test/java/org/drools/process/workitem/transform/FileTransformer.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/src/test/java/org/drools/process/workitem/transform/FileTransformer.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/test/java/org/drools/process/workitem/transform/FileTransformer.java	2008-11-11 02:19:18 UTC (rev 23814)
@@ -0,0 +1,36 @@
+package org.drools.process.workitem.transform;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+
+public class FileTransformer {
+
+	// All transform methods must be static and must contain the @Transformer annotation
+	@Transformer
+	public static String fileToString(File file) {
+		try {
+			String fileString = "";
+			BufferedReader reader = new BufferedReader(new FileReader(file));
+			String line = "";
+			while ((line = reader.readLine()) != null) {
+				fileString += line;
+			}
+			return fileString;
+		} catch (Exception e) {
+			System.err.println("Failed to read file " + file.getName());
+		}
+		return null;
+	}
+
+	@Transformer
+	public static BufferedReader fileToBufferedReader(File file) {
+		try {
+			BufferedReader reader = new BufferedReader(new FileReader(file));
+			return reader;
+		} catch (Exception e) {
+			System.err.println("Failed to read file " + file.getName());
+		}
+		return null;
+	}
+}

Modified: labs/jbossrules/trunk/drools-process/drools-workitems/src/test/resources/FileFinder.rf
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/src/test/resources/FileFinder.rf	2008-11-11 01:13:40 UTC (rev 23813)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/test/resources/FileFinder.rf	2008-11-11 02:19:18 UTC (rev 23814)
@@ -9,6 +9,9 @@
       <variable name="files" >
         <type name="org.drools.process.core.datatype.impl.type.UndefinedDataType" />
       </variable>
+      <variable name="content" >
+        <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+      </variable>
     </variables>
   </header>
 
@@ -17,11 +20,11 @@
       <work name="Finder" >
         <parameter name="Path" >
           <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-          <value>/some/data/directory</value>
+          <value>/some/directory</value>
         </parameter>
         <parameter name="Regex" >
           <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-          <value>.*pdf</value>
+          <value>.*txt</value>
         </parameter>
       </work>
       <mapping type="out" from="Files" to="files" />
@@ -30,19 +33,19 @@
       <work name="Exec" >
         <parameter name="Command" >
           <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-          <value>cp /some/data/directory/pdfs.tar /some/data/directory/newpdfs.tar</value>
+          <value>cp /some/directory/texts.tar /some/directory/newtexts.tar</value>
         </parameter>
       </work>
     </workItem>
     <workItem id="6" name="Archive" x="462" y="16" width="80" height="40" >
       <work name="Archive" >
+        <parameter name="Archive" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+          <value>/some/directory/texts.tar</value>
+        </parameter>
         <parameter name="Files" >
           <type name="org.drools.process.core.datatype.impl.type.ListDataType" className="null" />
         </parameter>
-        <parameter name="Archive" >
-          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-          <value>/some/data/directory/pdfs.tar</value>
-        </parameter>
       </work>
       <mapping type="in" from="files" to="Files" />
     </workItem>
@@ -50,39 +53,53 @@
     <end id="3" name="End" x="559" y="141" width="80" height="40" />
     <workItem id="7" name="Email" x="560" y="77" width="80" height="40" >
       <work name="Email" >
+        <parameter name="To" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+          <value>you at mail.com</value>
+        </parameter>
         <parameter name="Body" >
           <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
           <value>An archive has been created for you !</value>
         </parameter>
+        <parameter name="Subject" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+          <value>Archive</value>
+        </parameter>
         <parameter name="From" >
           <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
           <value>me at mail.com</value>
         </parameter>
-        <parameter name="To" >
-          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-          <value>you at mail.com</value>
-        </parameter>
-        <parameter name="Subject" >
-          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-          <value>Archive</value>
-        </parameter>
       </work>
     </workItem>
-    <forEach id="5" name="ForEach" x="238" y="16" width="186" height="109" variableName="file" collectionExpression="files" >
+    <forEach id="5" name="ForEach" x="238" y="16" width="186" height="148" variableName="file" collectionExpression="files" >
       <nodes>
-    <workItem id="4" name="Log" x="46" y="34" width="80" height="40" >
+    <workItem id="4" name="Log" x="86" y="87" width="80" height="40" >
       <work name="Log" >
         <parameter name="Message" >
           <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
-          <value>Found file #{file}</value>
+          <value>Found file #{file} with content "#{content}"</value>
         </parameter>
       </work>
     </workItem>
+    <workItem id="7" name="Transform" x="18" y="29" width="99" height="40" >
+      <work name="Transform" >
+        <parameter name="OutputType" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+          <value>java.lang.String</value>
+        </parameter>
+        <parameter name="InputObject" >
+          <type name="org.drools.process.core.datatype.impl.type.ObjectDataType" className="null" />
+        </parameter>
+      </work>
+      <mapping type="in" from="file" to="InputObject" />
+      <mapping type="out" from="OutputObject" to="content" />
+    </workItem>
       </nodes>
       <connections>
+    <connection from="7" to="4" />
       </connections>
       <in-ports>
-        <in-port type="DROOLS_DEFAULT" nodeId="4" nodeInType="DROOLS_DEFAULT" />
+        <in-port type="DROOLS_DEFAULT" nodeId="7" nodeInType="DROOLS_DEFAULT" />
       </in-ports>
       <out-ports>
         <out-port type="DROOLS_DEFAULT" nodeId="4" nodeOutType="DROOLS_DEFAULT" />

Modified: labs/jbossrules/trunk/drools-process/drools-workitems/src/test/resources/SampleWorkDefinitions.conf
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/src/test/resources/SampleWorkDefinitions.conf	2008-11-11 01:13:40 UTC (rev 23813)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/test/resources/SampleWorkDefinitions.conf	2008-11-11 02:19:18 UTC (rev 23814)
@@ -53,6 +53,19 @@
       "Command" : new StringDataType()
     ],
     "displayName" : "Exec",
+  ],
+    
+  [
+    "name" : "Transform",
+    "parameters" : [
+    	"InputObject" : new ObjectDataType(),
+    	"OutputType" : new ObjectDataType(),
+    ],
+    "results" : [
+    	"OutputObject" : new ObjectDataType(),
+    ],
+    "displayName" : "Transform",
+    "icon" : "icons/import_statement.gif"
   ]
-    
+     
 ]
\ No newline at end of file




More information about the jboss-svn-commits mailing list