[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