[jboss-svn-commits] JBL Code SVN: r21463 - in labs/jbossrules/trunk/drools-process/drools-workitems: src and 15 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Aug 12 08:28:33 EDT 2008


Author: KrisVerlaenen
Date: 2008-08-12 08:28:33 -0400 (Tue, 12 Aug 2008)
New Revision: 21463

Added:
   labs/jbossrules/trunk/drools-process/drools-workitems/src/
   labs/jbossrules/trunk/drools-process/drools-workitems/src/main/
   labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/
   labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/
   labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/
   labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/
   labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/
   labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/archive/
   labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/archive/ArchiveWorkItemHandler.java
   labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/
   labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/Connection.java
   labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/Email.java
   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/Message.java
   labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/Recipient.java
   labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/Recipients.java
   labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/SendHtml.java
   labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/exec/
   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/
   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/
   labs/jbossrules/trunk/drools-process/drools-workitems/src/test/java/
   labs/jbossrules/trunk/drools-process/drools-workitems/src/test/java/com/
   labs/jbossrules/trunk/drools-process/drools-workitems/src/test/java/com/sample/
   labs/jbossrules/trunk/drools-process/drools-workitems/src/test/java/com/sample/RuleFlowTest.java
   labs/jbossrules/trunk/drools-process/drools-workitems/src/test/resources/
   labs/jbossrules/trunk/drools-process/drools-workitems/src/test/resources/FileFinder.rf
   labs/jbossrules/trunk/drools-process/drools-workitems/src/test/resources/SampleWorkDefinitions.conf
   labs/jbossrules/trunk/drools-process/drools-workitems/src/test/resources/drools.rulebase.conf
Modified:
   labs/jbossrules/trunk/drools-process/drools-workitems/
   labs/jbossrules/trunk/drools-process/drools-workitems/.classpath
   labs/jbossrules/trunk/drools-process/drools-workitems/pom.xml
Log:
JBRULES-1729: Sample work item implementations
 - initial commit


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


Modified: labs/jbossrules/trunk/drools-process/drools-workitems/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/.classpath	2008-08-12 12:16:46 UTC (rev 21462)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/.classpath	2008-08-12 12:28:33 UTC (rev 21463)
@@ -12,5 +12,5 @@
 	<classpathentry kind="var" path="M2_REPO/commons-io/commons-io/1.4/commons-io-1.4.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="output" path="bin"/>
+	<classpathentry kind="output" path="target/classes"/>
 </classpath>

Modified: labs/jbossrules/trunk/drools-process/drools-workitems/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/pom.xml	2008-08-12 12:16:46 UTC (rev 21462)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/pom.xml	2008-08-12 12:28:33 UTC (rev 21463)
@@ -20,6 +20,10 @@
       <groupId>org.drools</groupId>
       <artifactId>drools-core</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-compiler</artifactId>
+    </dependency>
 
     <!-- External dependencies -->
     <dependency>
@@ -32,6 +36,26 @@
       <artifactId>activation</artifactId>
       <version>1.1</version>
     </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-finder</artifactId>
+      <version>1.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>commons-io</groupId>
+      <artifactId>commons-io</artifactId>
+      <version>1.4</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-compress</artifactId>
+      <version>1.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-exec</artifactId>
+      <version>1.0.0-SNAPSHOT</version>
+    </dependency>
   </dependencies>
 
 </project>

Added: labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/archive/ArchiveWorkItemHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/archive/ArchiveWorkItemHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/archive/ArchiveWorkItemHandler.java	2008-08-12 12:28:33 UTC (rev 21463)
@@ -0,0 +1,36 @@
+package org.drools.process.workitem.archive;
+
+import java.io.File;
+import java.util.List;
+
+import org.apache.commons.compress.Archive;
+import org.apache.commons.compress.ArchiverFactory;
+import org.drools.process.instance.WorkItem;
+import org.drools.process.instance.WorkItemHandler;
+import org.drools.process.instance.WorkItemManager;
+
+public class ArchiveWorkItemHandler implements WorkItemHandler {
+
+	public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+		String archive = (String) workItem.getParameter("Archive");
+		List<File> files = (List<File>) workItem.getParameter("Files");
+		try {
+			Archive archiver = ArchiverFactory.getInstance("tar");
+			if (files != null) {
+				for (File file: files) {
+					archiver.add(file);
+				}
+			}
+			archiver.save(new File(archive));
+			manager.completeWorkItem(workItem.getId(), null);
+		} catch (Throwable t) {
+			t.printStackTrace();
+			manager.abortWorkItem(workItem.getId());
+		}
+	}
+
+	public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+		// Do nothing, this work item cannot be aborted
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/Connection.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/Connection.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/Connection.java	2008-08-12 12:28:33 UTC (rev 21463)
@@ -0,0 +1,72 @@
+package org.drools.process.workitem.email;
+
+public class Connection {
+	
+    private String host;
+    private String port;
+    private String userName;
+    private String password;
+
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((host == null) ? 0 : host.hashCode());
+        result = prime * result + ((password == null) ? 0 : password.hashCode());
+        result = prime * result + ((port == null) ? 0 : port.hashCode());
+        result = prime * result + ((userName == null) ? 0 : userName.hashCode());
+        return result;
+    }
+
+    public boolean equals(Object obj) {
+        if ( this == obj ) return true;
+        if ( obj == null ) return false;
+        if ( getClass() != obj.getClass() ) return false;
+        final Connection other = (Connection) obj;
+        if ( host == null ) {
+            if ( other.host != null ) return false;
+        } else if ( !host.equals( other.host ) ) return false;
+        if ( password == null ) {
+            if ( other.password != null ) return false;
+        } else if ( !password.equals( other.password ) ) return false;
+        if ( port == null ) {
+            if ( other.port != null ) return false;
+        } else if ( !port.equals( other.port ) ) return false;
+        if ( userName == null ) {
+            if ( other.userName != null ) return false;
+        } else if ( !userName.equals( other.userName ) ) return false;
+        return true;
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    public void setHost(String host) {
+        this.host = host;
+    }
+
+    public String getPort() {
+        return port;
+    }
+
+    public void setPort(String port) {
+        this.port = port;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/Email.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/Email.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/Email.java	2008-08-12 12:28:33 UTC (rev 21463)
@@ -0,0 +1,55 @@
+package org.drools.process.workitem.email;
+
+public class Email {
+	
+    private Message    message;
+    private Connection connection;
+
+    public String[] getUsedIdentigiers() {
+        return null;
+    }
+
+    public Email() {
+        this.message = new Message();
+        this.connection = new Connection();
+    }
+
+    public Message getMessage() {
+        return message;
+    }
+
+    public void setMessage(Message message) {
+        this.message = message;
+    }
+
+    public Connection getConnection() {
+        return connection;
+    }
+
+    public void setConnection(Connection connection) {
+        this.connection = connection;
+    }
+
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((connection == null) ? 0 : connection.hashCode());
+        result = prime * result + ((message == null) ? 0 : message.hashCode());
+        return result;
+    }
+
+    public boolean equals(Object obj) {
+        if ( this == obj ) return true;
+        if ( obj == null ) return false;
+        if ( getClass() != obj.getClass() ) return false;
+        final Email other = (Email) obj;
+        if ( connection == null ) {
+            if ( other.connection != null ) return false;
+        } else if ( !connection.equals( other.connection ) ) return false;
+        if ( message == null ) {
+            if ( other.message != null ) return false;
+        } else if ( !message.equals( other.message ) ) return false;
+        return true;
+    }
+
+}

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/EmailWorkItemHandler.java	2008-08-12 12:28:33 UTC (rev 21463)
@@ -0,0 +1,64 @@
+package org.drools.process.workitem.email;
+
+import org.drools.process.instance.WorkItem;
+import org.drools.process.instance.WorkItemHandler;
+import org.drools.process.instance.WorkItemManager;
+
+/**
+ * WorkItemHandler for sending email.
+ * 
+ * Expects the following parameters:
+ *  - "From" (String): sends an email from the given the email address
+ *  - "To" (String): sends the email to the given email address(es),
+ *                   multiple addresses must be separated using a semi-colon (';') 
+ *  - "Subject" (String): the subject of the email
+ *  - "Text" (String): the body of the email (using HTML)
+ * Is completed immediately and does not return any result parameters.  
+ * 
+ * Sending an email cannot be aborted.
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */	
+public class EmailWorkItemHandler implements WorkItemHandler {
+
+	private Connection connection;
+	
+	public void setConnection(String host, String port, String userName, String password) {
+		connection = new Connection();
+		connection.setHost(host);
+		connection.setPort(port);
+		connection.setUserName(userName);
+		connection.setPassword(password);
+	}
+	
+	public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+		if (connection == null) {
+			throw new IllegalArgumentException(
+				"Connection not initialized for Email");
+		}
+		Email email = new Email();
+		Message message = new Message();
+		message.setFrom((String) workItem.getParameter("From"));
+		Recipients recipients = new Recipients();
+		String to = (String) workItem.getParameter("To");
+		for (String s: to.split(";")) {
+			if (s != null && !"".equals(s)) {
+				Recipient recipient = new Recipient();
+				recipient.setEmail(s);
+				recipients.addRecipient(recipient);
+			}
+		}
+		message.setRecipients(recipients);
+		message.setSubject((String) workItem.getParameter("Subject"));
+		message.setBody((String) workItem.getParameter("Text"));
+		email.setMessage(message);
+		email.setConnection(connection);
+		SendHtml.sendHtml(email);
+		manager.completeWorkItem(workItem.getId(), null);
+	}
+
+	public void abortWorkItem(WorkItem arg0, WorkItemManager arg1) {
+		// Do nothing, email cannot be aborted
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/Message.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/Message.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/Message.java	2008-08-12 12:28:33 UTC (rev 21463)
@@ -0,0 +1,132 @@
+package org.drools.process.workitem.email;
+
+public class Message {
+	
+    private Recipients recipients;
+    private String     from;
+    private String     replyTo;
+    private String     subject;
+    private String     body;
+    private String     documentFormat = "html";
+
+    public Message() {
+        this.recipients = new Recipients();
+    }
+
+    public Recipients getRecipients() {
+        return recipients;
+    }
+
+    public void setRecipients(Recipients recipients) {
+        this.recipients = recipients;
+    }
+
+    public String getFrom() {
+        return from;
+    }
+
+    public void setFrom(String from) {
+        this.from = from;
+    }
+
+    public String getReplyTo() {
+        return replyTo;
+    }
+
+    public void setReplyTo(String replyTo) {
+        this.replyTo = replyTo;
+    }
+
+    public String getDocumentFormat() {
+        return documentFormat;
+    }
+
+    public void setDocumentFormat(String documentFormat) {
+        this.documentFormat = documentFormat;
+    }
+
+    public String getSubject() {
+        return subject;
+    }
+
+    public void setSubject(String subject) {
+        this.subject = subject;
+    }
+
+    public String getBody() {
+        return body;
+    }
+
+    public void setBody(String body) {
+        this.body = body;
+    }
+
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((body == null) ? 0 : body.hashCode());
+        result = prime * result + ((documentFormat == null) ? 0 : documentFormat.hashCode());
+        result = prime * result + ((from == null) ? 0 : from.hashCode());
+        result = prime * result + ((recipients == null) ? 0 : recipients.hashCode());
+        result = prime * result + ((replyTo == null) ? 0 : replyTo.hashCode());
+        result = prime * result + ((subject == null) ? 0 : subject.hashCode());
+        return result;
+    }
+
+    public boolean equals(Object obj) {
+        if (this == obj) {
+			return true;
+        }
+		if (obj == null) {
+			return false;
+		}
+		if (getClass() != obj.getClass()) {
+			return false;
+		}
+		final Message other = (Message) obj;
+		if (body == null) {
+			if (other.body != null) {
+				return false;
+			}
+		} else if (!body.equals(other.body)) {
+			return false;
+		}
+		if (documentFormat == null) {
+			if (other.documentFormat != null) {
+				return false;
+			}
+		} else if (!documentFormat.equals(other.documentFormat)) {
+			return false;
+		}
+		if (from == null) {
+			if (other.from != null) {
+				return false;
+			}
+		} else if (!from.equals(other.from)) {
+			return false;
+		}
+		if (recipients == null) {
+			if (other.recipients != null) {
+				return false;
+			}
+		} else if (!recipients.equals(other.recipients)) {
+			return false;
+		}
+		if (replyTo == null) {
+			if (other.replyTo != null) {
+				return false;
+			}
+		} else if (!replyTo.equals(other.replyTo)) {
+			return false;
+		}
+		if (subject == null) {
+			if (other.subject != null) {
+				return false;
+			}
+		} else if (!subject.equals(other.subject)) {
+			return false;
+		}
+		return true;
+    }
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/Recipient.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/Recipient.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/Recipient.java	2008-08-12 12:28:33 UTC (rev 21463)
@@ -0,0 +1,93 @@
+package org.drools.process.workitem.email;
+
+public class Recipient {
+    private String type;
+
+    private String displayName;
+
+    private String email;
+
+    private String mobile;
+
+    public Recipient() {
+        this( "to",
+              "John Smith",
+              "john at xxx.com",
+              "" );
+    }
+
+    public Recipient(String type,
+                     String displayName,
+                     String email,
+                     String mobile) {
+        this.type = type;
+        this.displayName = displayName;
+        this.email = email;
+        this.mobile = mobile;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getDisplayName() {
+        return displayName;
+    }
+
+    public void setDisplayName(String displayName) {
+        this.displayName = displayName;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public String getMobile() {
+        return mobile;
+    }
+
+    public void setMobile(String mobile) {
+        this.mobile = mobile;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((displayName == null) ? 0 : displayName.hashCode());
+        result = prime * result + ((email == null) ? 0 : email.hashCode());
+        result = prime * result + ((mobile == null) ? 0 : mobile.hashCode());
+        result = prime * result + ((type == null) ? 0 : type.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if ( this == obj ) return true;
+        if ( obj == null ) return false;
+        if ( getClass() != obj.getClass() ) return false;
+        final Recipient other = (Recipient) obj;
+        if ( displayName == null ) {
+            if ( other.displayName != null ) return false;
+        } else if ( !displayName.equals( other.displayName ) ) return false;
+        if ( email == null ) {
+            if ( other.email != null ) return false;
+        } else if ( !email.equals( other.email ) ) return false;
+        if ( mobile == null ) {
+            if ( other.mobile != null ) return false;
+        } else if ( !mobile.equals( other.mobile ) ) return false;
+        if ( type == null ) {
+            if ( other.type != null ) return false;
+        } else if ( !type.equals( other.type ) ) return false;
+        return true;
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/Recipients.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/Recipients.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/Recipients.java	2008-08-12 12:28:33 UTC (rev 21463)
@@ -0,0 +1,54 @@
+package org.drools.process.workitem.email;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Recipients {
+	
+    private List<Recipient> list = new ArrayList<Recipient>();
+
+    public void setRecipients(List<Recipient> recipients) {
+    	for (Recipient recipient: recipients) {
+    		addRecipient(recipient);
+    	}
+    }
+
+    public boolean addRecipient(Recipient recipient) {
+        if ( !this.list.contains( recipient ) ) {
+            this.list.add( recipient );
+            return true;
+        }
+        return false;
+    }
+
+    public boolean removeRecipient(Recipient recipient) {
+        return this.list.remove( recipient );
+    }
+
+    public List<Recipient> getRecipients() {
+        return this.list;
+    }
+
+    public Recipient[] toArray() {
+        return (Recipient[]) list.toArray( new Recipient[list.size()] );
+    }
+
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((list == null) ? 0 : list.hashCode());
+        return result;
+    }
+
+    public boolean equals(Object obj) {
+        if ( this == obj ) return true;
+        if ( obj == null ) return false;
+        if ( getClass() != obj.getClass() ) return false;
+        final Recipients other = (Recipients) obj;
+        if ( list == null ) {
+            if ( other.list != null ) return false;
+        } else if ( !list.equals( other.list ) ) return false;
+        return true;
+    }
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/SendHtml.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/SendHtml.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/SendHtml.java	2008-08-12 12:28:33 UTC (rev 21463)
@@ -0,0 +1,82 @@
+package org.drools.process.workitem.email;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.Properties;
+
+import javax.activation.DataHandler;
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.Session;
+import javax.mail.Transport;
+import javax.mail.Message.RecipientType;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+import javax.mail.util.ByteArrayDataSource;
+
+public class SendHtml {
+
+    public static void sendHtml(Email email) {
+        org.drools.process.workitem.email.Message message = email.getMessage();
+        Connection connection = email.getConnection();
+
+        String subject = message.getSubject();
+        String from = message.getFrom();
+        String mailhost = connection.getHost();
+        String mailer = "sendhtml";
+        boolean debug = false;
+        try {
+            Properties props = System.getProperties();
+            // XXX - could use Session.getTransport() and Transport.connect()
+            // XXX - assume we're using SMTP
+            if ( mailhost != null ) props.put( "mail.smtp.host", mailhost );
+            // Get a Session object
+            Session session = Session.getInstance( props, null );
+            if ( debug ) session.setDebug( true );
+            // construct the message
+            Message msg = new MimeMessage( session );
+            if ( from != null ) {
+            	msg.setFrom( new InternetAddress( from ) );
+            } else {
+            	msg.setFrom();
+            }
+            for ( Recipient recipient : message.getRecipients().getRecipients() ) {
+                RecipientType type = null;
+                if ( "to".equals( recipient.getType() ) ) {
+                    type = Message.RecipientType.TO;
+                } else if ( "cc".equals( recipient.getType() ) ) {
+                    type = Message.RecipientType.CC;
+                } else if ( "bcc".equals( recipient.getType() ) ) {
+                    type = Message.RecipientType.BCC;
+                }
+
+                msg.addRecipients( type, InternetAddress.parse( recipient.getEmail(), false ) );
+            }
+            msg.setSubject( subject );
+            collect( message.getBody(), msg );
+            msg.setHeader( "X-Mailer", mailer );
+            msg.setSentDate( new Date() );
+            // send the thing off
+            Transport.send( msg );
+        } catch ( Exception e ) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void collect(String body, Message msg) throws MessagingException, IOException {
+        String subject = msg.getSubject();
+        StringBuffer sb = new StringBuffer();
+        sb.append( "<HTML>\n" );
+        sb.append( "<HEAD>\n" );
+        sb.append( "<TITLE>\n" );
+        sb.append( subject + "\n" );
+        sb.append( "</TITLE>\n" );
+        sb.append( "</HEAD>\n" );
+        sb.append( "<BODY>\n" );
+        sb.append( "<H1>" + subject + "</H1>" + "\n" );
+        sb.append( body );
+        sb.append( "</BODY>\n" );
+        sb.append( "</HTML>\n" );
+        msg.setDataHandler( new DataHandler( new ByteArrayDataSource( sb.toString(), "text/html" ) ) );
+    }
+}

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/exec/ExecWorkItemHandler.java	2008-08-12 12:28:33 UTC (rev 21463)
@@ -0,0 +1,28 @@
+package org.drools.process.workitem.exec;
+
+import org.apache.commons.exec.CommandLine;
+import org.apache.commons.exec.DefaultExecutor;
+import org.drools.process.instance.WorkItem;
+import org.drools.process.instance.WorkItemHandler;
+import org.drools.process.instance.WorkItemManager;
+
+public class ExecWorkItemHandler implements WorkItemHandler {
+
+	public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+		String command = (String) workItem.getParameter("Command");
+		CommandLine commandLine = CommandLine.parse(command);
+		DefaultExecutor executor = new DefaultExecutor();
+		try {
+			executor.execute(commandLine);
+			manager.completeWorkItem(workItem.getId(), null);
+		} catch (Throwable t) {
+			t.printStackTrace();
+			manager.abortWorkItem(workItem.getId());
+		}
+	}
+
+	public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+		// Do nothing, this work item cannot be aborted
+	}
+
+}

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/finder/FinderWorkItemHandler.java	2008-08-12 12:28:33 UTC (rev 21463)
@@ -0,0 +1,42 @@
+package org.drools.process.workitem.finder;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.finder.FileFinder;
+import org.apache.commons.finder.Finder;
+import org.drools.process.instance.WorkItem;
+import org.drools.process.instance.WorkItemHandler;
+import org.drools.process.instance.WorkItemManager;
+
+public class FinderWorkItemHandler implements WorkItemHandler {
+
+	private FileFinder finder;
+	
+	public FinderWorkItemHandler() {
+		finder = new FileFinder();
+	}
+	
+	public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+		String path = (String) workItem.getParameter("Path");
+		String regex = (String) workItem.getParameter("Regex");
+		Map<String, Object> options = new HashMap<String, Object>();
+		options.put(Finder.REGEX, regex);
+		File[] files = finder.find(new File(path), options);
+		List<File> fileList = new ArrayList<File>();
+		for (File file: files) {
+			fileList.add(file);
+		}
+		Map<String, Object> results = new HashMap<String, Object>();
+		results.put("Files", fileList);
+		manager.completeWorkItem(workItem.getId(), results);
+	}
+
+	public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+		// Do nothing, this work item cannot be aborted
+	}
+
+}

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/test/java/com/sample/RuleFlowTest.java	2008-08-12 12:28:33 UTC (rev 21463)
@@ -0,0 +1,48 @@
+package com.sample;
+
+import java.io.InputStreamReader;
+import java.io.Reader;
+
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.compiler.PackageBuilder;
+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.rule.Package;
+
+/**
+ * This is a sample file to launch a ruleflow.
+ */
+public class RuleFlowTest {
+
+	public static final void main(String[] args) {
+		try {
+			RuleBase ruleBase = createKnowledgeBase();
+			StatefulSession session = ruleBase.newStatefulSession();
+			session.getWorkItemManager().registerWorkItemHandler("Finder", new FinderWorkItemHandler());
+			session.getWorkItemManager().registerWorkItemHandler("Archive", new ArchiveWorkItemHandler());
+			session.getWorkItemManager().registerWorkItemHandler("Exec", new ExecWorkItemHandler());
+			EmailWorkItemHandler emailWorkItemHandler = new EmailWorkItemHandler();
+			emailWorkItemHandler.setConnection("mail-out.example.com", "25", null, null);
+			session.getWorkItemManager().registerWorkItemHandler("Email", emailWorkItemHandler);
+			session.startProcess("com.sample.ruleflow");
+		} catch (Throwable t) {
+			t.printStackTrace();
+		}
+	}
+
+	private static RuleBase createKnowledgeBase() throws Exception {
+		PackageBuilder builder = new PackageBuilder();
+		Reader source = new InputStreamReader(
+			RuleFlowTest.class.getResourceAsStream("/FileFinder.rf"));
+		builder.addProcessFromXml(source);
+		Package pkg = builder.getPackage();
+		RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+		ruleBase.addPackage(pkg);
+		return ruleBase;
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-workitems/src/test/resources/FileFinder.rf
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/src/test/resources/FileFinder.rf	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/test/resources/FileFinder.rf	2008-08-12 12:28:33 UTC (rev 21463)
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?> 
+<process xmlns="http://drools.org/drools-4.0/process"
+         xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+         xs:schemaLocation="http://drools.org/drools-4.0/process drools-processes-4.0.xsd"
+         type="RuleFlow" name="ruleflow" id="com.sample.ruleflow" package-name="com.sample" >
+
+  <header>
+    <variables>
+      <variable name="files" >
+        <type name="org.drools.process.core.datatype.impl.type.UndefinedDataType" />
+      </variable>
+    </variables>
+  </header>
+
+  <nodes>
+    <workItem id="4" name="Finder" x="128" y="16" width="80" height="40" >
+      <work name="Finder" >
+        <parameter name="Path" type="org.drools.process.core.datatype.impl.type.StringDataType" >/NotBackedUp/kverlaen/data</parameter>
+        <parameter name="Regex" type="org.drools.process.core.datatype.impl.type.StringDataType" >.*pdf</parameter>
+      </work>
+      <mapping type="out" from="Files" to="files" />
+    </workItem>
+    <workItem id="8" name="Exec" x="559" y="16" width="80" height="40" >
+      <work name="Exec" >
+        <parameter name="Command" type="org.drools.process.core.datatype.impl.type.StringDataType" >cp /NotBackedUp/kverlaen/data/pdfs.tar /NotBackedUp/kverlaen/data/newpdfs.tar</parameter>
+      </work>
+    </workItem>
+    <workItem id="6" name="Archive" x="462" y="16" width="80" height="40" >
+      <work name="Archive" >
+        <parameter name="Files" type="org.drools.process.core.datatype.impl.type.ListDataType" />
+        <parameter name="Archive" type="org.drools.process.core.datatype.impl.type.StringDataType" >/NotBackedUp/kverlaen/data/pdfs.tar</parameter>
+      </work>
+      <mapping type="in" from="files" to="Files" />
+    </workItem>
+    <start id="1" name="Start" x="16" y="16" width="80" height="40" />
+    <end id="3" name="End" x="671" y="77" width="80" height="40" />
+    <workItem id="7" name="Email" x="560" y="77" width="80" height="40" >
+      <work name="Email" >
+        <parameter name="To" type="org.drools.process.core.datatype.impl.type.StringDataType" >mymail at mail.com</parameter>
+        <parameter name="Text" type="org.drools.process.core.datatype.impl.type.StringDataType" >Archive has been created!</parameter>
+        <parameter name="From" type="org.drools.process.core.datatype.impl.type.StringDataType" >admin at example.org</parameter>
+        <parameter name="Subject" type="org.drools.process.core.datatype.impl.type.StringDataType" >Archive</parameter>
+      </work>
+    </workItem>
+    <forEach id="5" name="ForEach" x="238" y="16" width="200" height="150" variableName="file" collectionExpression="files" >
+      <nodes>
+    <actionNode id="1" name="Action" x="67" y="33" >
+        <action type="expression" dialect="java" >System.out.println("Found file " + ((java.io.File) context.getVariable("file")).getName());</action>
+    </actionNode>
+      </nodes>
+      <connections>
+      </connections>
+      <in-ports>
+        <in-port type="DROOLS_DEFAULT" nodeId="1" nodeInType="DROOLS_DEFAULT" />
+      </in-ports>
+      <out-ports>
+        <out-port type="DROOLS_DEFAULT" nodeId="1" nodeOutType="DROOLS_DEFAULT" />
+      </out-ports>
+    </forEach>
+  </nodes>
+
+  <connections>
+    <connection from="1" to="4" />
+    <connection from="6" to="8" />
+    <connection from="5" to="6" />
+    <connection from="7" to="3" />
+    <connection from="8" to="7" />
+    <connection from="4" to="5" />
+  </connections>
+
+</process>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-workitems/src/test/resources/SampleWorkDefinitions.conf
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/src/test/resources/SampleWorkDefinitions.conf	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/test/resources/SampleWorkDefinitions.conf	2008-08-12 12:28:33 UTC (rev 21463)
@@ -0,0 +1,60 @@
+// We use MVEL to return a List of work definitions
+// The properties of the work definitions are specified as a Map<String, Object>
+// The allowed properties are name, parameters, displayName, icon and customEditor
+// The returned result should thus be of type List<Map<String, Object>>
+import org.drools.process.core.datatype.impl.type.ListDataType;
+import org.drools.process.core.datatype.impl.type.ObjectDataType;
+import org.drools.process.core.datatype.impl.type.StringDataType;
+
+[
+
+  [
+    "name" : "Email",
+    "parameters" : [
+    	"From" : new StringDataType(),
+    	"To" : new StringDataType(),
+    	"Subject" : new StringDataType(),
+    	"Text" : new StringDataType()
+    ],
+    "displayName" : "Email",
+    "icon" : "icons/import_statement.gif",
+    "customEditor" : "org.drools.eclipse.flow.common.editor.editpart.work.EmailCustomEditor"
+  ],
+  
+  [
+    "name" : "Log",
+    "parameters" : [
+      "Message" : new StringDataType()
+    ],
+    "displayName" : "Log",
+    "icon" : "icons/open.gif"
+    "customEditor" : "org.drools.eclipse.flow.common.editor.editpart.work.SampleCustomEditor"
+  ],
+    
+  [
+    "name" : "Finder",
+    "parameters" : [
+    	"Path" : new StringDataType(),
+    	"Regex" : new StringDataType()
+    ],
+    "displayName" : "Finder"
+  ],
+  
+  [
+    "name" : "Archive",
+    "parameters" : [
+    	"Archive" : new StringDataType(),
+    	"Files" : new ListDataType(new ObjectDataType("java.io.File"))
+    ],
+    "displayName" : "Archive"
+  ],
+  
+  [
+    "name" : "Exec",
+    "parameters" : [
+      "Command" : new StringDataType()
+    ],
+    "displayName" : "Exec",
+  ]
+    
+]
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-workitems/src/test/resources/drools.rulebase.conf
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/src/test/resources/drools.rulebase.conf	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/test/resources/drools.rulebase.conf	2008-08-12 12:28:33 UTC (rev 21463)
@@ -0,0 +1 @@
+drools.workDefinitions = SampleWorkDefinitions.conf
\ No newline at end of file




More information about the jboss-svn-commits mailing list