[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