[jboss-svn-commits] JBL Code SVN: r22723 - in labs/jbossrules/trunk/drools-process: drools-process-task/src/main/java/org/drools/task and 11 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Sep 12 13:44:38 EDT 2008
Author: mark.proctor at jboss.com
Date: 2008-09-12 13:44:38 -0400 (Fri, 12 Sep 2008)
New Revision: 22723
Added:
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Content.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/EmailNotification.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/EmailNotificationHeader.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/NotificationType.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/UserInfo.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/WorkItemNotification.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/SendIcal.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/drools.process.email.conf
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/MockUserInfo.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingGetContentResponseHandler.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingSetContentResponseHandler.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/IcalTest.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEmailNotificationTest.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/Notification1.mvel
Removed:
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/AttachmentContent.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingGetAttachmentContentResponseHandler.java
Modified:
labs/jbossrules/trunk/drools-process/drools-process-task/.classpath
labs/jbossrules/trunk/drools-process/drools-process-task/.project
labs/jbossrules/trunk/drools-process/drools-process-task/pom.xml
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Attachment.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Deadline.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/I18NText.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Notification.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Task.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/TaskData.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/CommandName.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/DefaultEscalatedDeadlineHandler.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/EscalatedDeadlineHandler.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskClient.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskClientHandler.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServerHandler.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskService.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/utils/CollectionUtils.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/persistence.xml
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/BaseTest.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/ModelPersistenceTest.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceCommentsAndAttachmentsTest.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEscalationTest.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceLifeCycleTest.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/FullyPopulatedTask.mvel
labs/jbossrules/trunk/drools-process/drools-workitems/.classpath
labs/jbossrules/trunk/drools-process/drools-workitems/.project
labs/jbossrules/trunk/drools-process/drools-workitems/pom.xml
labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/SendHtml.java
labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java
labs/jbossrules/trunk/drools-process/drools-workitems/src/test/java/org/drools/process/workitem/email/EmailWorkItemHandlerTest.java
Log:
JBRULES-1745 WS-Human-Task
-Cal emails when reserving a task is now supported.
-had to remove task test from workitems project, due to cyclic deps.
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/.classpath 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/.classpath 2008-09-12 17:44:38 UTC (rev 22723)
@@ -1,30 +1,53 @@
-<classpath>
- <classpathentry kind="src" path="src/main/java"/>
- <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
- <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
- <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
- <classpathentry kind="output" path="target/classes"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
- <classpathentry kind="var" path="M2_REPO/com/h2database/h2/1.0.77/h2-1.0.77.jar"/>
- <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.3/xstream-1.3.jar"/>
- <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar"/>
- <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/apache/mina/mina-core/2.0.0-M3/mina-core-2.0.0-M3.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.5.2/slf4j-api-1.5.2.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-entitymanager/3.4.0.GA/hibernate-entitymanager-3.4.0.GA.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/hibernate/ejb3-persistence/1.0.2.GA/ejb3-persistence-1.0.2.GA.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-commons-annotations/3.1.0.GA/hibernate-commons-annotations-3.1.0.GA.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-annotations/3.4.0.GA/hibernate-annotations-3.4.0.GA.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-core/3.3.0.SP1/hibernate-core-3.3.0.SP1.jar"/>
- <classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.6/antlr-2.7.6.jar"/>
- <classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.1/commons-collections-3.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/javax/transaction/jta/1.1/jta-1.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.4.GA/javassist-3.4.GA.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.0.1/jmock-2.5.0.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-SNAPSHOT/mvel-2.0-SNAPSHOT.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-jdk14/1.5.2/slf4j-jdk14-1.5.2.jar"/>
- <classpathentry kind="var" path="M2_REPO/postgresql/postgresql/8.3-603.jdbc3/postgresql-8.3-603.jdbc3.jar"/>
+<classpath>
+ <classpathentry kind="src" path="src/main/java"/>
+ <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+ <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+ <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
+ <classpathentry kind="output" path="target/classes"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="var" path="M2_REPO/com/h2database/h2/1.0.77/h2-1.0.77.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.3/xstream-1.3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar"/>
+ <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/mina/mina-core/2.0.0-M3/mina-core-2.0.0-M3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.5.2/slf4j-api-1.5.2.jar"/>
+ <classpathentry kind="src" path="/drools-workitems"/>
+ <classpathentry kind="src" path="/drools-core"/>
+ <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-SNAPSHOT/mvel-2.0-SNAPSHOT.jar"/>
+ <classpathentry kind="src" path="/drools-compiler"/>
+ <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0.1/antlr-runtime-3.0.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/antlr/gunit/1.0.1/gunit-1.0.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/antlr/antlr/3.0.1/antlr-3.0.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.6/antlr-2.7.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
+ <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/mail/mail/1.4/mail-1.4.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.1/activation-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-finder/1.0-SNAPSHOT/commons-finder-1.0-SNAPSHOT.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-io/commons-io/1.4/commons-io-1.4.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-cli/2.0-SNAPSHOT/commons-cli-2.0-SNAPSHOT.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-compress/1.0-SNAPSHOT/commons-compress-1.0-SNAPSHOT.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-exec/1.0.0-SNAPSHOT/commons-exec-1.0.0-SNAPSHOT.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-entitymanager/3.4.0.GA/hibernate-entitymanager-3.4.0.GA.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/ejb3-persistence/1.0.2.GA/ejb3-persistence-1.0.2.GA.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-commons-annotations/3.1.0.GA/hibernate-commons-annotations-3.1.0.GA.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-annotations/3.4.0.GA/hibernate-annotations-3.4.0.GA.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-core/3.3.0.SP1/hibernate-core-3.3.0.SP1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.1/commons-collections-3.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/2.0.2/xml-apis-2.0.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/transaction/jta/1.1/jta-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.4.GA/javassist-3.4.GA.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.0.1/jmock-2.5.0.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-jdk14/1.5.2/slf4j-jdk14-1.5.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/subethamail/subethasmtp-wiser/1.2/subethasmtp-wiser-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/subethamail/subethasmtp-smtp/1.2/subethasmtp-smtp-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.1/commons-logging-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
+ <classpathentry kind="var" path="M2_REPO/logkit/logkit/1.0.1/logkit-1.0.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/avalon-framework/avalon-framework/4.1.3/avalon-framework-4.1.3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/postgresql/postgresql/8.3-603.jdbc3/postgresql-8.3-603.jdbc3.jar"/>
</classpath>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/.project
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/.project 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/.project 2008-09-12 17:44:38 UTC (rev 22723)
@@ -1,7 +1,11 @@
<projectDescription>
<name>drools-process-task</name>
<comment>A rule production system</comment>
- <projects/>
+ <projects>
+ <project>drools-workitems</project>
+ <project>drools-core</project>
+ <project>drools-compiler</project>
+ </projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/pom.xml 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/pom.xml 2008-09-12 17:44:38 UTC (rev 22723)
@@ -12,8 +12,14 @@
<packaging>jar</packaging>
<name>Drools :: Process :: Task</name>
- <dependencies>
+ <dependencies>
<dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-workitems</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
<groupId>org.apache.mina</groupId>
<artifactId>mina-core</artifactId>
<version>2.0.0-M3</version>
@@ -60,7 +66,14 @@
<dependency>
<groupId>org.mvel</groupId>
<artifactId>mvel</artifactId>
- </dependency>
+ </dependency>
+
+ <dependency>
+ <groupId>org.subethamail</groupId>
+ <artifactId>subethasmtp-wiser</artifactId>
+ <version>1.2</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Attachment.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Attachment.java 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Attachment.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -44,7 +44,7 @@
private int size;
- private long contentId;
+ private long attachmentContentId;
public void writeExternal(ObjectOutput out) throws IOException {
out.writeLong( id );
@@ -54,7 +54,7 @@
attachedBy.writeExternal( out );
out.writeLong( attachedAt.getTime() );
out.writeInt( size );
- out.writeLong( contentId );
+ out.writeLong( attachmentContentId );
}
public void readExternal(ObjectInput in) throws IOException,
@@ -67,7 +67,7 @@
attachedBy.readExternal( in );
attachedAt = new Date( in.readLong() );
size = in.readInt( );
- contentId = in.readLong();
+ attachmentContentId = in.readLong();
}
public Long getId() {
@@ -126,12 +126,12 @@
this.size = size;
}
- public long getContentId() {
- return contentId;
+ public long getAttachmentContentId() {
+ return attachmentContentId;
}
- public void setContentId(long contentId) {
- this.contentId = contentId;
+ public void setAttachmentContentId(long contentId) {
+ this.attachmentContentId = contentId;
}
@Override
@@ -142,7 +142,7 @@
result = prime * result + ((attachedAt == null) ? 0 : attachedAt.hashCode());
result = prime * result + ((attachedBy == null) ? 0 : attachedBy.hashCode());
result = prime * result + size;
- result = prime * result + (int) (contentId ^ (contentId >>> 32));
+ result = prime * result + (int) (attachmentContentId ^ (attachmentContentId >>> 32));
result = prime * result + ((contentType == null) ? 0 : contentType.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
@@ -164,7 +164,7 @@
if ( other.attachedBy != null ) return false;
} else if ( !attachedBy.equals( other.attachedBy ) ) return false;
if ( size != other.size ) return false;
- if ( contentId != other.contentId ) return false;
+ if ( attachmentContentId != other.attachmentContentId ) return false;
if ( contentType == null ) {
if ( other.contentType != null ) return false;
} else if ( !contentType.equals( other.contentType ) ) return false;
Deleted: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/AttachmentContent.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/AttachmentContent.java 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/AttachmentContent.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -1,76 +0,0 @@
-package org.drools.task;
-
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.util.Arrays;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Lob;
-
- at Entity
-public class AttachmentContent implements Externalizable {
- @Id
- @GeneratedValue(strategy = GenerationType.AUTO)
- private long id;
-
- @Lob
- private byte[] content;
-
- public AttachmentContent() {
-
- }
-
- public void writeExternal(ObjectOutput out) throws IOException {
- out.writeLong( id );
- out.writeInt( content.length );
- out.write( content );
- }
-
- public void readExternal(ObjectInput in) throws IOException,
- ClassNotFoundException {
- id = in.readLong();
- content = new byte[ in.readInt() ];
- in.read( content );
- }
-
- public long getId() {
- return id;
- }
-
- public void setId(long id) {
- this.id = id;
- }
-
- public byte[] getContent() {
- return content;
- }
-
- public void setContent(byte[] content) {
- this.content = content;
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + Arrays.hashCode( content );
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if ( this == obj ) return true;
- if ( obj == null ) return false;
- if ( !(obj instanceof AttachmentContent) ) return false;
- AttachmentContent other = (AttachmentContent) obj;
- if ( !Arrays.equals( content,
- other.content ) ) return false;
- return true;
- }
-
-}
Copied: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Content.java (from rev 22401, labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/AttachmentContent.java)
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Content.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Content.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -0,0 +1,76 @@
+package org.drools.task;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.Arrays;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+
+ at Entity
+public class Content implements Externalizable {
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private long id;
+
+ @Lob
+ private byte[] content;
+
+ public Content() {
+
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeLong( id );
+ out.writeInt( content.length );
+ out.write( content );
+ }
+
+ public void readExternal(ObjectInput in) throws IOException,
+ ClassNotFoundException {
+ id = in.readLong();
+ content = new byte[ in.readInt() ];
+ in.read( content );
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public byte[] getContent() {
+ return content;
+ }
+
+ public void setContent(byte[] content) {
+ this.content = content;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + Arrays.hashCode( content );
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if ( this == obj ) return true;
+ if ( obj == null ) return false;
+ if ( !(obj instanceof Content) ) return false;
+ Content other = (Content) obj;
+ if ( !Arrays.equals( content,
+ other.content ) ) return false;
+ return true;
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Content.java
___________________________________________________________________
Name: svn:mergeinfo
+
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Deadline.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Deadline.java 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Deadline.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -58,7 +58,7 @@
date = new Date( in.readLong() );
}
documentation = CollectionUtils.readI18NTextList( in );
- escalations = CollectionUtils.readIEscalationList( in );
+ escalations = CollectionUtils.readEscalationList( in );
}
public long getId() {
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/EmailNotification.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/EmailNotification.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/EmailNotification.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -0,0 +1,82 @@
+package org.drools.task;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.ManyToMany;
+import javax.persistence.OneToMany;
+
+
+ at Entity
+public class EmailNotification extends Notification {
+ @OneToMany(cascade = CascadeType.ALL)
+ private Map<String, EmailNotificationHeader> emailHeaders;
+
+ @Override
+ public void writeExternal(ObjectOutput out) throws IOException {
+ super.writeExternal( out );
+ if ( emailHeaders != null ) {
+ out.writeInt( emailHeaders.size() );
+ for ( EmailNotificationHeader header : emailHeaders.values() ) {
+ header.writeExternal( out );
+ }
+ } else {
+ out.writeInt( 0 );
+ }
+ }
+
+ @Override
+ public void readExternal(ObjectInput in) throws IOException,
+ ClassNotFoundException {
+ super.readExternal( in );
+ int size = in.readInt();
+ if ( size > 0 ) {
+ emailHeaders = new HashMap<String, EmailNotificationHeader>(size);
+ for ( int i = 0; i < size; i++ ) {
+ EmailNotificationHeader header = new EmailNotificationHeader();
+ header.readExternal( in );
+ emailHeaders.put( header.getLanguage(), header);
+ }
+ }
+ }
+
+ public NotificationType getNotificationType() {
+ return NotificationType.Email;
+ }
+
+ public Map<String, EmailNotificationHeader> getEmailHeaders() {
+ return emailHeaders;
+ }
+
+ public void setEmailHeaders(Map<String, EmailNotificationHeader> emailHeaders) {
+ this.emailHeaders = emailHeaders;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = super.hashCode();
+ result = prime * result + ((emailHeaders == null) ? 0 : emailHeaders.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if ( this == obj ) return true;
+ if ( !super.equals( obj ) ) return false;
+ if ( !(obj instanceof EmailNotification) ) return false;
+ EmailNotification other = (EmailNotification) obj;
+ if ( emailHeaders == null ) {
+ if ( other.emailHeaders != null ) return false;
+ } else if ( !emailHeaders.equals( other.emailHeaders ) ) return false;
+ return true;
+ }
+
+
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/EmailNotificationHeader.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/EmailNotificationHeader.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/EmailNotificationHeader.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -0,0 +1,186 @@
+/**
+ *
+ */
+package org.drools.task;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+
+ at Entity
+public class EmailNotificationHeader implements Externalizable {
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private long id;
+
+ private String language;
+
+ @Column( name = "replyToAddress" ) // just rename for consistency
+ private String replyTo;
+
+ @Column( name = "fromAddress" ) // have to rename as schema's break otherwise
+ private String from;
+
+ private String subject;
+
+ @Lob
+ private String body;
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeLong( id );
+
+ if ( language != null ) {
+ out.writeBoolean( true );
+ out.writeUTF( language );
+ } else {
+ out.writeBoolean( false );
+ }
+
+ if ( subject != null ) {
+ out.writeBoolean( true );
+ out.writeUTF( subject );
+ } else {
+ out.writeBoolean( false );
+ }
+
+ if ( replyTo != null ) {
+ out.writeBoolean( true );
+ out.writeUTF( replyTo );
+ } else {
+ out.writeBoolean( false );
+ }
+
+ if ( from != null ) {
+ out.writeBoolean( true );
+ out.writeUTF( from );
+ } else {
+ out.writeBoolean( false );
+ }
+
+ if ( body != null ) {
+ out.writeBoolean( true );
+ out.writeUTF( body );
+ } else {
+ out.writeBoolean( false );
+ }
+ }
+
+
+ public void readExternal(ObjectInput in) throws IOException,
+ ClassNotFoundException {
+ id = in.readLong();
+
+ if ( in.readBoolean() ) {
+ language = in.readUTF();
+ }
+
+ if ( in.readBoolean() ) {
+ subject = in.readUTF();
+ }
+
+ if ( in.readBoolean() ) {
+ replyTo = in.readUTF();
+ }
+
+ if ( in.readBoolean() ) {
+ from = in.readUTF();
+ }
+
+ if ( in.readBoolean() ) {
+ body = in.readUTF();
+ }
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public String getLanguage() {
+ return language;
+ }
+
+ public void setLanguage(String language) {
+ this.language = language;
+ }
+
+ 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 String getReplyTo() {
+ return replyTo;
+ }
+
+ public void setReplyTo(String replyTo) {
+ this.replyTo = replyTo;
+ }
+
+ public String getFrom() {
+ return from;
+ }
+
+ public void setFrom(String from) {
+ this.from = from;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((subject == null) ? 0 : subject.hashCode());
+ result = prime * result + ((body == null) ? 0 : body.hashCode());
+ result = prime * result + ((from == null) ? 0 : from.hashCode());
+ result = prime * result + ((language == null) ? 0 : language.hashCode());
+ result = prime * result + ((replyTo == null) ? 0 : replyTo.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if ( this == obj ) return true;
+ if ( obj == null ) return false;
+ if ( !(obj instanceof EmailNotificationHeader) ) return false;
+ EmailNotificationHeader other = (EmailNotificationHeader) obj;
+ if ( subject == null ) {
+ if ( other.subject != null ) return false;
+ } else if ( !subject.equals( other.subject ) ) return false;
+ if ( body == null ) {
+ if ( other.body != null ) return false;
+ } else if ( !body.equals( other.body ) ) return false;
+ if ( from == null ) {
+ if ( other.from != null ) return false;
+ } else if ( !from.equals( other.from ) ) return false;
+ if ( language == null ) {
+ if ( other.language != null ) return false;
+ } else if ( !language.equals( other.language ) ) return false;
+ if ( replyTo == null ) {
+ if ( other.replyTo != null ) return false;
+ } else if ( !replyTo.equals( other.replyTo ) ) return false;
+ return true;
+ }
+
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/I18NText.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/I18NText.java 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/I18NText.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -5,6 +5,7 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.io.Serializable;
+import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
@@ -93,6 +94,22 @@
} else if ( !text.equals( other.text ) ) return false;
return true;
}
+
+ public static String getLocalText(List<I18NText> list, String prefferedLanguage, String defaultLanguage) {
+ for ( I18NText text : list) {
+ if ( text.getLanguage().equals( prefferedLanguage )) {
+ return text.getText();
+ }
+ }
+ if ( defaultLanguage == null ) {
+ for ( I18NText text : list) {
+ if ( text.getLanguage().equals( defaultLanguage )) {
+ return text.getText();
+ }
+ }
+ }
+ return "";
+ }
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Notification.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Notification.java 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Notification.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -15,7 +15,9 @@
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
import javax.persistence.Lob;
+import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import org.drools.task.utils.CollectionUtils;
@@ -31,13 +33,13 @@
private List<I18NText> documentation = Collections.emptyList();
private int priority;
-
- @OneToMany
- @JoinColumn(name = "Notification_Recipients_Id", nullable = true)
+
+ @ManyToMany
+ @JoinTable(name = "Notification_Recipients", joinColumns = @JoinColumn(name = "task_id"), inverseJoinColumns = @JoinColumn(name = "entity_id"))
private List<OrganizationalEntity> recipients = Collections.emptyList();;
- @OneToMany
- @JoinColumn(name = "Notification_BusinessAdministrators_Id", nullable = true)
+ @ManyToMany
+ @JoinTable(name = "Notification_BusinessAdministrators", joinColumns = @JoinColumn(name = "task_id"), inverseJoinColumns = @JoinColumn(name = "entity_id"))
private List<OrganizationalEntity> businessAdministrators = Collections.emptyList();
@OneToMany(cascade = CascadeType.ALL)
@@ -74,7 +76,8 @@
recipients = CollectionUtils.readOrganizationalEntityList( in );
businessAdministrators = CollectionUtils.readOrganizationalEntityList( in );
-
+
+ documentation = CollectionUtils.readI18NTextList( in );
names = CollectionUtils.readI18NTextList( in );
subjects = CollectionUtils.readI18NTextList( in );
descriptions = CollectionUtils.readI18NTextList( in );
@@ -87,6 +90,10 @@
public void setId(long id) {
this.id = id;
}
+
+ public NotificationType getNotificationType() {
+ return NotificationType.Default;
+ }
public List<I18NText> getDocumentation() {
return documentation;
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/NotificationType.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/NotificationType.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/NotificationType.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -0,0 +1,5 @@
+package org.drools.task;
+
+public enum NotificationType {
+ Default, Email;
+}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Task.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Task.java 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Task.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -166,7 +166,7 @@
public List<I18NText> getDescriptions() {
return descriptions;
- }
+ }
public void setDescriptions(List<I18NText> descriptions) {
this.descriptions = descriptions;
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/TaskData.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/TaskData.java 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/TaskData.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -44,12 +44,11 @@
private long workItemId = -1;
- private AccessType accessType;
+ private AccessType documentAccessType;
- private String contentType;
+ private String documentType;
- @Lob
- private byte[] document;
+ private long documentContentId;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "TaskData_Comments_Id", nullable = true)
@@ -239,7 +238,31 @@
public long getWorkItemId() {
return workItemId;
}
-
+
+ public AccessType getDocumentAccessType() {
+ return documentAccessType;
+ }
+
+ public void setDocumentAccessType(AccessType accessType) {
+ this.documentAccessType = accessType;
+ }
+
+ public String getDocumentType() {
+ return documentType;
+ }
+
+ public long getDocumentContentId() {
+ return documentContentId;
+ }
+
+ public void setDocumentContentId(long documentContentId) {
+ this.documentContentId = documentContentId;
+ }
+
+ public void setDocumentType(String documentType) {
+ this.documentType = documentType;
+ }
+
public List<Comment> getComments() {
return comments;
}
@@ -308,7 +331,18 @@
if ( activationTime == null ) {
if ( other.activationTime != null ) return false;
} else if ( activationTime.getTime() != other.activationTime.getTime() ) return false;
-
+
+ if ( workItemId != other.workItemId ) return false;
+
+ if ( documentAccessType == null ) {
+ if ( other.documentAccessType != null ) return false;
+ } else if ( !documentAccessType.equals( other.documentAccessType ) ) return false;
+
+ if ( documentContentId != other.documentContentId ) return false;
+ if ( documentType == null ) {
+ if ( other.documentType != null ) return false;
+ } else if ( !documentType.equals( other.documentType ) ) return false;
+
return CollectionUtils.equals( attachments,
other.attachments ) && CollectionUtils.equals( comments,
other.comments );
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/UserInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/UserInfo.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/UserInfo.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -0,0 +1,15 @@
+package org.drools.task;
+
+import java.util.Iterator;
+
+public interface UserInfo {
+ String getDisplayName(OrganizationalEntity entity);
+
+ Iterator<OrganizationalEntity> getMembersForGroup(Group group);
+
+ boolean hasEmail(Group group);
+
+ String getEmailForEntity(OrganizationalEntity entity);
+
+ String getLanguageForEntity(OrganizationalEntity entity);
+}
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/WorkItemNotification.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/WorkItemNotification.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/WorkItemNotification.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -0,0 +1,59 @@
+package org.drools.task;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+
+import org.drools.process.instance.WorkItem;
+import org.drools.process.instance.WorkItemHandler;
+import org.drools.process.instance.WorkItemManager;
+import org.mvel.MVEL;
+import org.mvel.compiler.ExpressionCompiler;
+
+public class WorkItemNotification {
+ private String workItemExp;
+ private WorkItemHandler workItemHandler;
+ private String docVar = "doc";
+
+ public void executeWorkItem(Task task,
+ Notification notification,
+ List<OrganizationalEntity> recipients,
+ List<OrganizationalEntity> businessAdministrators,
+ WorkItemManager workItemManager,
+ EntityManagerFactory emf) {
+ EntityManager em = emf.createEntityManager();
+
+ TaskData taskData = task.getTaskData();
+
+ // First compile the associated document, we assume this returns a single structure
+ // That can be used in the main work item evaluation.
+ Content content = null;
+ if ( taskData.getDocumentAccessType() == AccessType.Inline ) {
+ content = em.find( Content.class,
+ taskData.getDocumentContentId() );
+ }
+ ExpressionCompiler compiler = new ExpressionCompiler( new String( content.getContent() ) );
+ Serializable expr = compiler.compile();
+ Object object = MVEL.executeExpression( expr );
+
+ Map<String, Object> vars = new HashMap<String, Object>();
+ vars.put( docVar, object );
+ // for now will have to assume the recipient is a User, we need to figure out if Groups have an alias
+ // of if we list all the individuals in the gruop.
+ for ( OrganizationalEntity recipient : recipients ) {
+ vars.put( "user", recipient );
+ WorkItem workItem = (WorkItem) MVEL.executeExpression( expr, vars );
+ workItemHandler.executeWorkItem( workItem, workItemManager );
+ }
+
+
+
+
+
+
+ }
+}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/CommandName.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/CommandName.java 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/CommandName.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -31,8 +31,10 @@
AddAttachmentResponse,
DeleteAttachmentRequest,
DeleteAttachmentResponse,
- GetAttachmentContentRequest,
- GetAttachmentContentResponse,
+ SetDocumentContentRequest,
+ SetDocumentContentResponse,
+ GetContentRequest,
+ GetContentResponse,
AddCommentRequest,
AddCommentResponse,
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/DefaultEscalatedDeadlineHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/DefaultEscalatedDeadlineHandler.java 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/DefaultEscalatedDeadlineHandler.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -1,25 +1,143 @@
package org.drools.task.service;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Map.Entry;
+
import javax.persistence.EntityManager;
+import org.drools.process.instance.WorkItemManager;
+import org.drools.process.instance.impl.WorkItemImpl;
+import org.drools.process.workitem.email.EmailWorkItemHandler;
+import org.drools.task.AccessType;
+import org.drools.task.Content;
import org.drools.task.Deadline;
+import org.drools.task.EmailNotification;
+import org.drools.task.EmailNotificationHeader;
import org.drools.task.Escalation;
+import org.drools.task.Group;
+import org.drools.task.I18NText;
import org.drools.task.Notification;
+import org.drools.task.NotificationType;
+import org.drools.task.OrganizationalEntity;
import org.drools.task.Reassignment;
import org.drools.task.Task;
+import org.drools.task.TaskData;
+import org.drools.task.User;
+import org.drools.task.UserInfo;
+import org.drools.util.ChainedProperties;
+import org.mvel.MVEL;
+import org.mvel.compiler.ExpressionCompiler;
+import org.mvel.templates.TemplateRuntime;
-public class DefaultEscalatedDeadlineHandler implements EscalatedDeadlineHandler {
+public class DefaultEscalatedDeadlineHandler
+ implements
+ EscalatedDeadlineHandler {
+ private UserInfo userInfo;
+
+ private String from;
+
+ private String replyTo;
+
+ EmailWorkItemHandler handler;
+
+ WorkItemManager manager;
+
+ public DefaultEscalatedDeadlineHandler() {
+ handler = new EmailWorkItemHandler();
+ ChainedProperties conf = new ChainedProperties("process.email.conf");
+// String host = conf.getProperty( "host", null );
+// String port = conf.getProperty( "port", "25" );
+// String userName = conf.getProperty( "userName", null );
+// String password = conf.getProperty( "password", null );
+
+ from = conf.getProperty( "from", null );
+ replyTo = conf.getProperty( "replyTo", null );
+
+
+ }
+
+ public UserInfo getUserInfo() {
+ return userInfo;
+ }
+
+ public void setUserInfo(UserInfo userInfo) {
+ this.userInfo = userInfo;
+ }
+
+ 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 EmailWorkItemHandler getHandler() {
+ return handler;
+ }
+
+ public void setHandler(EmailWorkItemHandler handler) {
+ this.handler = handler;
+ }
+
+ public WorkItemManager getManager() {
+ return manager;
+ }
+
+ public void setManager(WorkItemManager manager) {
+ this.manager = manager;
+ }
+
public void executeEscalatedDeadline(Task task,
Deadline deadline,
- EntityManager em) {
-
+ EntityManager em,
+ TaskService service) {
+
for ( Escalation escalation : deadline.getEscalations() ) {
// we won't impl constraints for now
//escalation.getConstraints()
+ String language = "en-UK";
+ for ( Notification notification : escalation.getNotifications() ) {
+ if ( notification.getNotificationType() == NotificationType.Email) {
+ executeEmailNotification( (EmailNotification) notification, task, em );
+ }
+ // I18NText name = null;
+ // I18NText subject = null;
+ // I18NText description = null;
+ // for ( I18NText item : notification.getNames() ) {
+ // if ( item.getLanguage().equals( language ) ) {
+ // name = item;
+ // break;
+ // }
+ // }
+ // for ( I18NText item : notification.getSubjects() ) {
+ // if ( item.getLanguage().equals( language ) ) {
+ // subject = item;
+ // break;
+ // }
+ // }
+ // for ( I18NText item : notification.getDescriptions() ) {
+ // if ( item.getLanguage().equals( language ) ) {
+ // description = item;
+ // break;
+ // }
+ // }
- for ( Notification notification : escalation.getNotifications() ) {
- //notification.g
}
for ( Reassignment reassignment : escalation.getReassignments() ) {
@@ -31,4 +149,126 @@
em.getTransaction().commit();
}
+ public void executeEmailNotification(EmailNotification notification,
+ Task task,
+ EntityManager em) {
+ Map<String, EmailNotificationHeader> headers = notification.getEmailHeaders();
+
+ // group users into languages
+ Map<String, List<User>> users = new HashMap<String, List<User>>();
+ for ( OrganizationalEntity entity : notification.getBusinessAdministrators() ) {
+ if ( entity instanceof Group ) {
+ buildMapByLanguage( users,
+ (Group) entity );
+ } else {
+ buildMapByLanguage( users,
+ (User) entity );
+ }
+ }
+
+ for ( OrganizationalEntity entity : notification.getRecipients() ) {
+ if ( entity instanceof Group ) {
+ buildMapByLanguage( users,
+ (Group) entity );
+ } else {
+ buildMapByLanguage( users,
+ (User) entity );
+ }
+ }
+
+ TaskData taskData = task.getTaskData();
+ Map<String, Object> doc = null;
+ if ( taskData != null ) {
+ Content content = em.find( Content.class,
+ taskData.getDocumentContentId() );
+ if ( content != null ) {
+ ExpressionCompiler compiler = new ExpressionCompiler( new String( content.getContent() ) );
+ doc = (Map<String, Object>) MVEL.executeExpression( compiler.compile() );
+ } else {
+ doc = Collections.emptyMap();
+ }
+ }
+
+ for ( Iterator<Entry<String, List<User>>> it = users.entrySet().iterator(); it.hasNext(); ) {
+ Entry<String, List<User>> entry = it.next();
+ EmailNotificationHeader header = headers.get( entry.getKey() );
+
+ Map<String, Object> email = new HashMap<String, Object>();
+ StringBuilder to = new StringBuilder();
+ boolean first = true;
+ for ( User user : entry.getValue() ) {
+ if ( !first ) {
+ to.append( ';' );
+ }
+ String emailAddress = userInfo.getEmailForEntity( user );
+ to.append( emailAddress );
+ first = false;
+ }
+ email.put( "To",
+ to.toString() );
+
+ if ( header.getFrom() != null && header.getFrom().trim().length() > 0 ) {
+ email.put( "From",
+ header.getFrom() );
+ } else {
+ email.put( "From",
+ from );
+ }
+
+ if ( header.getReplyTo() != null && header.getReplyTo().trim().length() > 0 ) {
+ email.put( "Reply-To",
+ header.getReplyTo() );
+ } else {
+ email.put( "Reply-To",
+ replyTo );
+ }
+
+ Map<String, Object> vars = new HashMap<String, Object>();
+ vars.put( "doc",
+ doc );
+ String subject = (String) TemplateRuntime.eval( header.getSubject(),
+ vars );
+ String body = (String) TemplateRuntime.eval( header.getBody(),
+ vars );
+
+ email.put( "Subject",
+ subject );
+ email.put( "Body",
+ body );
+
+ WorkItemImpl workItem = new WorkItemImpl();
+ workItem.setParameters( email );
+
+ handler.executeWorkItem( workItem,
+ manager );
+
+ }
+ }
+
+ private void buildMapByLanguage(Map<String, List<User>> map,
+ Group group) {
+ for ( Iterator<OrganizationalEntity> it = userInfo.getMembersForGroup( group ); it.hasNext(); ) {
+ OrganizationalEntity entity = it.next();
+ if ( entity instanceof Group ) {
+ buildMapByLanguage( map,
+ (Group) entity );
+ } else {
+ buildMapByLanguage( map,
+ (User) entity );
+ }
+ }
+ }
+
+ private void buildMapByLanguage(Map<String, List<User>> map,
+ User user) {
+ String language = userInfo.getLanguageForEntity( user );
+ List<User> list = map.get( language );
+ if ( list == null ) {
+ list = new ArrayList<User>();
+ map.put( language,
+ list );
+ }
+ list.add( user );
+ }
+
}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/EscalatedDeadlineHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/EscalatedDeadlineHandler.java 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/EscalatedDeadlineHandler.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -9,5 +9,5 @@
import org.drools.task.Task;
public interface EscalatedDeadlineHandler {
- public void executeEscalatedDeadline(Task task, Deadline deadline, EntityManager em);
+ public void executeEscalatedDeadline(Task task, Deadline deadline, EntityManager em, TaskService service);
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskClient.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskClient.java 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskClient.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -20,15 +20,16 @@
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import org.drools.task.AccessType;
import org.drools.task.Attachment;
-import org.drools.task.AttachmentContent;
+import org.drools.task.Content;
import org.drools.task.Comment;
import org.drools.task.Task;
import org.drools.task.User;
import org.drools.task.service.TaskClientHandler.AddAttachmentResponseHandler;
import org.drools.task.service.TaskClientHandler.AddCommentResponseHandler;
import org.drools.task.service.TaskClientHandler.AddTaskResponseHandler;
-import org.drools.task.service.TaskClientHandler.GetAttachmentContentResponseHandler;
+import org.drools.task.service.TaskClientHandler.GetContentResponseHandler;
import org.drools.task.service.TaskClientHandler.GetTaskResponseHandler;
+import org.drools.task.service.TaskClientHandler.SetDocumentResponseHandler;
import org.drools.task.service.TaskClientHandler.TaskSummaryResponseHandler;
public class MinaTaskClient
@@ -145,8 +146,8 @@
}
- public void addAttachment(long taskId, Attachment attachment, AttachmentContent content, AddAttachmentResponseHandler responseHandler ) {
- List args = new ArrayList( 2 );
+ public void addAttachment(long taskId, Attachment attachment, Content content, AddAttachmentResponseHandler responseHandler ) {
+ List args = new ArrayList( 3 );
args.add( taskId );
args.add( attachment );
args.add( content );
@@ -167,10 +168,23 @@
session.write( cmd );
}
- public void getAttachmentContent(long contentId, GetAttachmentContentResponseHandler responseHandler) {
+ public void setDocumentContent(long taskId,
+ Content content,
+ SetDocumentResponseHandler responseHandler ) {
+ List args = new ArrayList( 2 );
+ args.add( taskId );
+ args.add( content );
+ Command cmd = new Command( counter.getAndIncrement(), CommandName.SetDocumentContentRequest, args);
+
+ handler.addResponseHandler( cmd.getId(), responseHandler );
+
+ session.write( cmd );
+ }
+
+ public void getContent(long contentId, GetContentResponseHandler responseHandler) {
List args = new ArrayList( 1 );
args.add( contentId );
- Command cmd = new Command( counter.getAndIncrement(), CommandName.GetAttachmentContentRequest, args);
+ Command cmd = new Command( counter.getAndIncrement(), CommandName.GetContentRequest, args);
handler.addResponseHandler( cmd.getId(), responseHandler );
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/SendIcal.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/SendIcal.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/SendIcal.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -0,0 +1,284 @@
+package org.drools.task.service;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Properties;
+import java.util.TimeZone;
+import java.util.UUID;
+
+import javax.activation.CommandInfo;
+import javax.activation.DataHandler;
+import javax.activation.MailcapCommandMap;
+import javax.activation.MimetypesFileTypeMap;
+import javax.mail.BodyPart;
+import javax.mail.Message;
+import javax.mail.Multipart;
+import javax.mail.Session;
+import javax.mail.Transport;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeBodyPart;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMultipart;
+import javax.mail.util.ByteArrayDataSource;
+
+import org.drools.process.workitem.email.Connection;
+import org.drools.task.Deadline;
+import org.drools.task.I18NText;
+import org.drools.task.Task;
+import org.drools.task.TaskData;
+import org.drools.task.User;
+import org.drools.task.UserInfo;
+import org.drools.util.ChainedProperties;
+
+import junit.framework.TestCase;
+
+//import net.fortuna.ical4j.model.Calendar;
+//import net.fortuna.ical4j.model.DateTime;
+//import net.fortuna.ical4j.model.TimeZone;
+//import net.fortuna.ical4j.model.TimeZoneRegistry;
+//import net.fortuna.ical4j.model.TimeZoneRegistryFactory;
+//import net.fortuna.ical4j.model.component.VEvent;
+//import net.fortuna.ical4j.model.component.VTimeZone;
+//import net.fortuna.ical4j.model.component.VToDo;
+//import net.fortuna.ical4j.model.property.CalScale;
+//import net.fortuna.ical4j.model.property.Description;
+//import net.fortuna.ical4j.model.property.Method;
+//import net.fortuna.ical4j.model.property.Priority;
+//import net.fortuna.ical4j.model.property.ProdId;
+//import net.fortuna.ical4j.model.property.Uid;
+//import net.fortuna.ical4j.model.property.Version;
+
+public class SendIcal {
+ private static SimpleDateFormat df = new SimpleDateFormat( "yyyyMMdd'T'HHmmss" );
+ static {
+ df.setTimeZone( TimeZone.getTimeZone("UTC") );
+ }
+
+ private Properties connection;
+ private String defaultLanguage;
+
+ private static SendIcal instance = new SendIcal();
+
+ public static SendIcal getInstance() {
+ return instance;
+ }
+
+ SendIcal() {
+ ChainedProperties conf = new ChainedProperties( "process.email.conf" );
+ String host = conf.getProperty( "host",
+ null );
+ String port = conf.getProperty( "port",
+ "25" );
+ // userName = conf.getProperty( "userName", null );
+ // password = conf.getProperty( "password", null );
+
+ connection = new Properties();
+
+ if ( host != null && host.trim().length() > 0 ) {
+ connection.put( "mail.smtp.host",
+ host );
+ }
+ if ( port != null && port.trim().length() > 0 ) {
+ connection.put( "mail.smtp.port",
+ Integer.parseInt( port ) );
+ }
+
+ defaultLanguage = conf.getProperty( "defaultLanguage",
+ "en-UK" );
+ }
+
+ public void sendIcalForTask(Task task,
+ UserInfo userInfo) {
+ TaskData data = task.getTaskData();
+ User owner = data.getActualOwner();
+ User creator = data.getCreatedBy();
+ Date createdOn = data.getCreatedOn();
+
+ if ( task.getDeadlines() == null ) {
+ return;
+ }
+
+ // get earliest start deadline
+ List<Deadline> startDeadlines = task.getDeadlines().getStartDeadlines();
+ Deadline start = null;
+ for ( Deadline deadline : startDeadlines ) {
+ if ( start == null || start.getDate().getTime() > deadline.getDate().getTime() ) {
+ start = deadline;
+ }
+ }
+
+ // get latest end deadline
+ List<Deadline> endDeadlines = task.getDeadlines().getEndDeadLines();
+ Deadline end = null;
+ for ( Deadline deadline : endDeadlines ) {
+ if ( end == null || end.getDate().getTime() < deadline.getDate().getTime() ) {
+ end = deadline;
+ }
+ }
+
+ String language = userInfo.getLanguageForEntity( owner );
+ String name = I18NText.getLocalText( task.getNames(),
+ language,
+ defaultLanguage );
+ String summary = I18NText.getLocalText( task.getSubjects(),
+ language,
+ defaultLanguage );
+ String description = I18NText.getLocalText( task.getDescriptions(),
+ language,
+ defaultLanguage );
+ // send ical for start
+ if ( start != null ) {
+ try {
+ sendIcal(task.getId(), name, summary, description, task.getPriority(), start.getDate(), owner, creator, createdOn, userInfo, "Start");
+ } catch ( Exception e ) {
+
+ }
+ }
+
+ // send ical for end
+ if ( end != null ) {
+ try {
+ sendIcal(task.getId(), name, summary, description, task.getPriority(), end.getDate(), owner, creator, createdOn, userInfo, "End");
+ } catch ( Exception e ) {
+
+ }
+ }
+ }
+
+ public void sendIcal(long taskId,
+ String name,
+ String summary,
+ String description,
+ int priority,
+ Date startDate,
+ User owner,
+ User creator,
+ Date createdOn,
+ UserInfo userInfo,
+ String type) throws Exception {
+ MimetypesFileTypeMap mimetypes = (MimetypesFileTypeMap) MimetypesFileTypeMap.getDefaultFileTypeMap();
+ mimetypes.addMimeTypes( "text/calendar ics ICS" );
+
+ MailcapCommandMap mailcap = (MailcapCommandMap) MailcapCommandMap.getDefaultCommandMap();
+ mailcap.addMailcap( "text/calendar;; x-java-content-handler=com.sun.mail.handlers.text_plain" );
+
+ System.out.println( connection );
+ Session session = Session.getInstance( connection,
+ null );
+
+ // Define message
+ MimeMessage message = new MimeMessage( session );
+ message.setHeader( "Content-Class",
+ "urn:content-classes:calendarmessage" );
+ message.setHeader( "Content-ID",
+ "calendar_message" );
+
+ String creatorEmail = userInfo.getEmailForEntity( creator );
+ message.setFrom( new InternetAddress( creatorEmail ) );
+ message.setReplyTo( new InternetAddress[]{new InternetAddress( creatorEmail )} );
+ message.addRecipient( Message.RecipientType.TO,
+ new InternetAddress( userInfo.getEmailForEntity( owner ) ) );
+ message.setSubject( "Task Assignment " + type + " Event: " + name );
+ message.setSentDate( new Date() );
+
+ // Create a Multipart
+ Multipart multipart = new MimeMultipart( "alternative" );
+
+ // Add text message
+ BodyPart messageBodyPart = new MimeBodyPart();
+ String text = "Summary\n-------\n\n" + summary + "\n\nDescription\n-----------\n\n" + description;
+ messageBodyPart.setText( text );
+ messageBodyPart.setDataHandler( new DataHandler( new ByteArrayDataSource( text,
+ "text/plain" ) ) );
+ multipart.addBodyPart( messageBodyPart );
+
+ // Add ical
+ messageBodyPart = new MimeBodyPart();
+ String filename = "ical-" + type + "-"+ taskId + ".ics";
+ messageBodyPart.setFileName( filename );
+ messageBodyPart.setHeader( "Content-Class",
+ "urn:content-classes:calendarmessage" );
+ messageBodyPart.setHeader( "Content-ID",
+ "calendar_message" );
+ String icalStr = getIcal( summary,
+ description,
+ startDate,
+ priority,
+ userInfo.getDisplayName( creator ),
+ creatorEmail,
+ type );
+ System.out.println( icalStr );
+ messageBodyPart.setDataHandler( new DataHandler( new ByteArrayDataSource( icalStr,
+ "text/calendar; charset=US-ASCII; " ) ) );
+ multipart.addBodyPart( messageBodyPart );
+
+ message.setContent( multipart );
+
+ Transport.send( message );
+ }
+
+ private String getIcal(String summary,
+ String description,
+ Date date,
+ int priority,
+ String organizerDisplayName,
+ String organizerEmail,
+ String type) {
+ StringBuilder builder = new StringBuilder();
+ builder.append( "BEGIN:VCALENDAR\n" );
+ builder.append( "PRODID:-//iCal4j 1.0//EN\n" );
+ builder.append( "CALSCALE:GREGORIAN\n" );
+ builder.append( "VERSION:2.0\n" );
+ builder.append( "METHOD:REQUEST\n" );
+ builder.append( "BEGIN:VEVENT\n" );
+ builder.append( "DTSTART;TZID=UTC:" + df.format( date ) + "\n" );
+ builder.append( "UID:" + UUID.randomUUID().toString() + "\n" );
+ builder.append( "ORGANIZER;CN=\"" + organizerDisplayName + "\":mailto:" + organizerEmail + "\n" );
+ builder.append( "DTSTAMP;TZID=UTC:" + df.format( new Date() ) + "\n" );
+ builder.append( "SUMMARY:\"Task " + type + " : " + summary + "\"\n" );
+ builder.append( "DESCRIPTION:\"" + description + "\"\n" );
+ builder.append( "PRIORITY:" + priority + "\n" );
+ builder.append( "END:VEVENT\n" );
+ builder.append( "END:VCALENDAR\n" );
+ return builder.toString();
+// String str = "";
+// str += "BEGIN:VCALENDAR\n";
+// str += "PRODID:-//Apple Inc.//iCal 3.0//EN\n";
+// str += "CALSCALE:GREGORIAN\n";
+// str += "VERSION:2.0\n";
+// str += "METHOD:REQUEST\n";
+// str += "BEGIN:VTIMEZONE\n";
+// str += "TZID:US/Mountain\n";
+// str += "BEGIN:DAYLIGHT\n";
+// str += "TZOFFSETFROM:-0700\n";
+// str += "TZOFFSETTO:-0600\n";
+// str += "DTSTART:20070311T020000\n";
+// str += "RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\n";
+// str += "TZNAME:MDT\n";
+// str += "END:DAYLIGHT\n";
+// str += "BEGIN:STANDARD\n";
+// str += "TZOFFSETFROM:-0600\n";
+// str += "TZOFFSETTO:-0700\n";
+// str += "DTSTART:20071104T020000\n";
+// str += "RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\n";
+// str += "TZNAME:MST\n";
+// str += "END:STANDARD\n";
+// str += "END:VTIMEZONE\n";
+// str += "BEGIN:VEVENT\n";
+// // str += "SEQUENCE:4\n";
+// str += "DTSTART;TZID=US/Mountain:20080911T180000\n";
+// // str += "DURATION:PT1H\n";
+// str += "UID:EC585E23-E48D-435A-B351-C6B7ABA9A949\n";
+// str += "ORGANIZER;CN=\"Zachery Jensen\":mailto:zjensen at edustructures.com\n";
+// str += "DTSTAMP:20080910T235058Z\n";
+// str += "SUMMARY:Test Todo\n";
+// // str += "ATTENDEE;CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;VP=TRUE:mailto:Mproctor at redhat.com\n";
+// // str += "ATTENDEE;CN=\"Zachery Jensen\";PARTSTAT=ACCEPTED:mailto:zjensen at edustructures.com\n";
+// // str += "CREATED:20080910T235039Z\n";
+// // str += "LOCATION:Test Location\n";
+// str += "END:VEVENT\n";
+// str += "END:VCALENDAR\n";
+// return str;
+ }
+}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskClientHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskClientHandler.java 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskClientHandler.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -7,7 +7,7 @@
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
-import org.drools.task.AttachmentContent;
+import org.drools.task.Content;
import org.drools.task.Task;
import org.drools.task.query.TaskSummary;
@@ -76,14 +76,22 @@
}
break;
}
- case GetAttachmentContentResponse : {
- AttachmentContent content = ( AttachmentContent ) cmd.getArguments().get( 0 );
- GetAttachmentContentResponseHandler responseHandler = (GetAttachmentContentResponseHandler) responseHandlers.remove( cmd.getId() );
+ case GetContentResponse : {
+ Content content = ( Content ) cmd.getArguments().get( 0 );
+ GetContentResponseHandler responseHandler = (GetContentResponseHandler) responseHandlers.remove( cmd.getId() );
if ( responseHandler != null ) {
responseHandler.execute( content );
}
break;
- }
+ }
+ case SetDocumentContentResponse : {
+ long contentId = ( Long ) cmd.getArguments().get( 0 );
+ SetDocumentResponseHandler responseHandler = (SetDocumentResponseHandler) responseHandlers.remove( cmd.getId() );
+ if ( responseHandler != null ) {
+ responseHandler.execute( contentId );
+ }
+ break;
+ }
case Query_TaskSummaryResponse : {
List<TaskSummary> results = ( List<TaskSummary> ) cmd.getArguments().get( 0 );
TaskSummaryResponseHandler responseHandler = ( TaskSummaryResponseHandler ) responseHandlers.remove( cmd.getId() );
@@ -133,8 +141,12 @@
public void execute(long attachmentId, long contentId);
}
- public static interface GetAttachmentContentResponseHandler extends ResponseHandler {
- public void execute(AttachmentContent attachmentContent);
+ public static interface SetDocumentResponseHandler extends ResponseHandler {
+ public void execute(long contentId);
+ }
+
+ public static interface GetContentResponseHandler extends ResponseHandler {
+ public void execute(Content content);
}
public static interface TaskSummaryResponseHandler extends ResponseHandler {
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServerHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServerHandler.java 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServerHandler.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -10,7 +10,7 @@
import org.apache.mina.core.session.IoSession;
import org.drools.task.AccessType;
import org.drools.task.Attachment;
-import org.drools.task.AttachmentContent;
+import org.drools.task.Content;
import org.drools.task.Comment;
import org.drools.task.Task;
import org.drools.task.query.TaskSummary;
@@ -130,10 +130,10 @@
}
case AddAttachmentRequest : {
Attachment attachment = ( Attachment ) cmd.getArguments().get( 1 );
- AttachmentContent content = ( AttachmentContent ) cmd.getArguments().get( 2 );
+ Content content = ( Content ) cmd.getArguments().get( 2 );
service.addAttachment( (Long) cmd.getArguments().get( 0 ), attachment, content );
- List args = new ArrayList( 1 );
+ List args = new ArrayList( 2 );
args.add( attachment.getId() );
args.add( content.getId() );
Command resultsCmnd = new Command( cmd.getId(),
@@ -149,13 +149,26 @@
service.deleteAttachment( taskId, attachmentId, contentId );
break;
}
- case GetAttachmentContentRequest : {
+ case SetDocumentContentRequest : {
+ long taskId = ( Long ) cmd.getArguments().get( 0 );
+ Content content = ( Content ) cmd.getArguments().get( 1 );
+ service.setDocumentContent( taskId, content );
+
+ List args = new ArrayList( 1 );
+ args.add( content.getId() );
+ Command resultsCmnd = new Command( cmd.getId(),
+ CommandName.SetDocumentContentResponse,
+ args );
+ session.write( resultsCmnd );
+ break;
+ }
+ case GetContentRequest : {
long contentId = ( Long ) cmd.getArguments().get( 0 );
- AttachmentContent content = service.getAttachmentContent( contentId );
+ Content content = service.getContent( contentId );
List args = new ArrayList( 1 );
args.add( content );
Command resultsCmnd = new Command( cmd.getId(),
- CommandName.GetAttachmentContentResponse,
+ CommandName.GetContentResponse,
args );
session.write( resultsCmnd );
break;
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskService.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskService.java 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskService.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -18,7 +18,7 @@
import org.drools.task.AccessType;
import org.drools.task.Attachment;
-import org.drools.task.AttachmentContent;
+import org.drools.task.Content;
import org.drools.task.Comment;
import org.drools.task.Deadline;
import org.drools.task.Group;
@@ -28,6 +28,7 @@
import org.drools.task.Task;
import org.drools.task.TaskData;
import org.drools.task.User;
+import org.drools.task.UserInfo;
import org.drools.task.query.DeadlineSummary;
import org.drools.task.query.TaskSummary;
@@ -50,6 +51,8 @@
ScheduledThreadPoolExecutor scheduler;
private EscalatedDeadlineHandler escalatedDeadlineHandler;
+
+ private UserInfo userInfo;
public TaskService(EntityManagerFactory emf) {
this.emf = emf;
@@ -87,7 +90,7 @@
unescalatedDeadlines = em.createQuery( toString( reader ) );
long now = System.currentTimeMillis();
for ( Object object : unescalatedDeadlines.getResultList() ) {
- DeadlineSummary summary = (DeadlineSummary) object;
+ DeadlineSummary summary = (DeadlineSummary) object;
scheduler.schedule( new ScheduledTaskDeadline( summary.getTaskId(),
summary.getDeadlineId(),
this ),
@@ -98,8 +101,16 @@
throw new RuntimeException( "Unable to inialize TaskService, could not load and schedule oustanding deadlines",
e );
}
+ }
+
+ public UserInfo getUserinfo() {
+ return userInfo;
}
+ public void setUserinfo(UserInfo userInfo) {
+ this.userInfo = userInfo;
+ }
+
public EntityManagerFactory getEntityManagerFactory() {
return emf;
}
@@ -135,7 +146,7 @@
if ( potentialOwners.size() == 1 ) {
// if there is a single potential owner, assign and set status to Reserved
taskData.setActualOwner( (User) potentialOwners.get( 0 ) );
- taskData.setStatus( Status.Reserved );
+ taskData.setStatus( Status.Reserved );
} else if ( potentialOwners.size() > 1 ) {
// multiple potential owners, so set to Ready so one can claim.
taskData.setStatus( Status.Ready );
@@ -192,7 +203,12 @@
}
}
}
- }
+
+ if ( task.getTaskData().getStatus() == Status.Reserved ) {
+ // Task was reserved so owner should get icals
+ SendIcal.getInstance().sendIcalForTask( task, userInfo );
+ }
+ }
public void claim(long taskId,
long userId) {
@@ -213,6 +229,9 @@
taskData.setStatus( Status.Reserved );
taskData.setActualOwner( user );
em.getTransaction().commit();
+
+ // Task was reserved so owner should get icals
+ SendIcal.getInstance().sendIcalForTask( task, userInfo );
} else {
// @TODO Error
}
@@ -230,7 +249,6 @@
TaskData taskData = task.getTaskData();
-
// Status must be Read or Reserved
if ( taskData.getStatus() == Status.Ready ) {
// if Ready must be potentialOwner
@@ -438,7 +456,7 @@
public void addAttachment(long taskId,
Attachment attachment,
- AttachmentContent content) {
+ Content content) {
Task task = em.find( Task.class,
taskId );
@@ -450,7 +468,7 @@
em.persist( content );
attachment.setSize( content.getContent().length );
- attachment.setContentId( content.getId() );
+ attachment.setAttachmentContentId( content.getId() );
List<Attachment> list = task.getTaskData().getAttachments();
if ( list == null || list == Collections.<Attachment> emptyList() ) {
@@ -461,16 +479,34 @@
list.add( attachment );
em.getTransaction().commit();
}
+
+ public void setDocumentContent(long taskId,
+ Content content) {
+ Task task = em.find( Task.class,
+ taskId );
- public AttachmentContent getAttachmentContent(long contentId) {
- AttachmentContent content = em.find( AttachmentContent.class,
+ if ( task == null ) {
+ // throw some exception
+ }
+
+ em.getTransaction().begin();
+
+ em.persist( content );
+
+ task.getTaskData().setDocumentContentId( content.getId() );
+
+ em.getTransaction().commit();
+ }
+
+ public Content getContent(long contentId) {
+ Content content = em.find( Content.class,
contentId );
return content;
}
public void deleteAttachment(long taskId,
long attachmentId,
- long attachmentContentId) {
+ long contentId) {
// @TODO I can't get this to work with HQL deleting the Attachment. Hibernate needs both the item removed from the collection
// and also the item deleted, so for now have to load the entire Task, I suspect that this is due to using the same EM which
// is caching things.
@@ -488,9 +524,9 @@
}
// we do this as HQL to avoid streaming in the entire HQL
- String deleteContent = "delete from AttachmentContent where id = :id";
+ String deleteContent = "delete from Content where id = :id";
em.createQuery( deleteContent ).setParameter( "id",
- attachmentContentId ).executeUpdate();
+ contentId ).executeUpdate();
em.getTransaction().commit();
}
@@ -608,7 +644,8 @@
escalatedDeadlineHandler.executeEscalatedDeadline( task,
deadline,
- localEm );
+ localEm,
+ this );
localEm.close();
}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/utils/CollectionUtils.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/utils/CollectionUtils.java 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/utils/CollectionUtils.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -20,10 +20,12 @@
import org.drools.task.Comment;
import org.drools.task.Deadline;
import org.drools.task.Deadlines;
+import org.drools.task.EmailNotification;
import org.drools.task.Escalation;
import org.drools.task.Group;
import org.drools.task.I18NText;
import org.drools.task.Notification;
+import org.drools.task.NotificationType;
import org.drools.task.OrganizationalEntity;
import org.drools.task.Reassignment;
import org.drools.task.User;
@@ -139,6 +141,7 @@
public static void writeNotificationList(List<Notification> list, ObjectOutput out) throws IOException {
out.writeInt( list.size() );
for( Notification item : list ) {
+ out.writeUTF( item.getNotificationType().toString() );
item.writeExternal( out );
}
}
@@ -147,7 +150,18 @@
int size = in.readInt();
List<Notification> list = new ArrayList<Notification>(size);
for ( int i = 0; i < size; i++ ) {
- Notification item = new Notification();
+ Notification item = null;
+ switch( NotificationType.valueOf( in.readUTF() ) ) {
+ case Default : {
+ item = new Notification();
+ break;
+ }
+ case Email : {
+ item = new EmailNotification();
+ break;
+ }
+ }
+
item.readExternal( in );
list.add( item );
}
@@ -198,7 +212,7 @@
}
}
- public static List<Escalation> readIEscalationList(ObjectInput in) throws IOException, ClassNotFoundException {
+ public static List<Escalation> readEscalationList(ObjectInput in) throws IOException, ClassNotFoundException {
int size = in.readInt();
List<Escalation> list = new ArrayList<Escalation>(size);
for ( int i = 0; i < size; i++ ) {
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/drools.process.email.conf
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/drools.process.email.conf (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/drools.process.email.conf 2008-09-12 17:44:38 UTC (rev 22723)
@@ -0,0 +1,8 @@
+from = from at domain.com
+replyTo = replyTo at domain.com
+host = localhost
+#host = smtp.corp.redhat.com
+port = 25
+defaultLanguage = en-UK
+#userName =
+#password =
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/persistence.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/persistence.xml 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/persistence.xml 2008-09-12 17:44:38 UTC (rev 22723)
@@ -4,7 +4,7 @@
<persistence-unit name="org.drools.task">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>org.drools.task.Attachment</class>
- <class>org.drools.task.AttachmentContent</class>
+ <class>org.drools.task.Content</class>
<class>org.drools.task.BooleanExpression</class>
<class>org.drools.task.Comment</class>
<class>org.drools.task.Deadline</class>
@@ -15,6 +15,8 @@
<class>org.drools.task.Group</class>
<class>org.drools.task.I18NText</class>
<class>org.drools.task.Notification</class>
+ <class>org.drools.task.EmailNotification</class>
+ <class>org.drools.task.EmailNotificationHeader</class>
<class>org.drools.task.PeopleAssignments</class>
<class>org.drools.task.Reassignment</class>
<class>org.drools.task.Status</class>
@@ -37,7 +39,7 @@
<property name="hibernate.connection.password" value="sasa"/>
<property name="hibernate.connection.autocommit" value="false" />
<property name="hibernate.max_fetch_depth" value="3"/>
- <property name="hibernate.hbm2ddl.auto" value="update" />
+ <property name="hibernate.hbm2ddl.auto" value="create" />
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/BaseTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/BaseTest.java 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/BaseTest.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -117,6 +117,8 @@
context.addImport( "Deadlines", Deadlines.class );
context.addImport( "Delegation", Delegation.class );
context.addImport( "Escalation", Escalation.class );
+ context.addImport( "EmailNotification", EmailNotification.class );
+ context.addImport( "EmailNotificationHeader", EmailNotificationHeader.class );
context.addImport( "Group", Group.class );
context.addImport( "I18NText", I18NText.class );
context.addImport( "Notification", Notification.class );
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/MockUserInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/MockUserInfo.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/MockUserInfo.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -0,0 +1,65 @@
+package org.drools.task;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+public class MockUserInfo implements UserInfo {
+
+ private Map<Group, List<OrganizationalEntity>> groups = new HashMap<Group, List<OrganizationalEntity>>();
+
+ private Map<OrganizationalEntity, String> emails = new HashMap<OrganizationalEntity, String>();
+
+ private Map<OrganizationalEntity, String> languages = new HashMap<OrganizationalEntity, String>();
+
+ public Map<Group, List<OrganizationalEntity>> getGroups() {
+ return groups;
+ }
+
+ public void setGroups(Map<Group, List<OrganizationalEntity>> groups) {
+ this.groups = groups;
+ }
+
+ public Map<OrganizationalEntity, String> getEmails() {
+ return emails;
+ }
+
+ public void setEmails(Map<OrganizationalEntity, String> emails) {
+ this.emails = emails;
+ }
+
+ public String getEmailForEntity(OrganizationalEntity entity) {
+ return emails.get( entity );
+ }
+
+ public Map<OrganizationalEntity, String> getLanguages() {
+ return languages;
+ }
+
+ public void setLanguages(Map<OrganizationalEntity, String> languages) {
+ this.languages = languages;
+ }
+
+ public Iterator<OrganizationalEntity> getMembersForGroup(Group group) {
+ return groups.get( group ).iterator();
+ }
+
+ public boolean hasEmail(Group group) {
+ return emails.containsKey( group );
+ }
+
+ public String getDisplayName(OrganizationalEntity entity) {
+ if (entity instanceof User) {
+ return ((User)entity).getDisplayName();
+ } else {
+ return ((Group)entity).getDisplayName();
+ }
+ }
+
+ public String getLanguageForEntity(OrganizationalEntity entity) {
+ return languages.get( entity );
+ }
+
+
+}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/ModelPersistenceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/ModelPersistenceTest.java 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/ModelPersistenceTest.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -59,7 +59,6 @@
}
public void testfullHibernateRoundtripWithAdditionalMVELCheck() throws Exception {
-
Task task1 = new Task();
task1.setPriority( 100 );
@@ -105,6 +104,10 @@
taskData.setCreatedOn( new Date( 10000000 ) );
taskData.setExpirationTime( new Date( 10000000 ) );
taskData.setStatus( Status.Created );
+
+ taskData.setDocumentAccessType( AccessType.Inline );
+ taskData.setDocumentType( "mvel" );
+ taskData.setDocumentContentId( 20 );
List<Attachment> attachments = new ArrayList<Attachment>();
taskData.setAttachments( attachments );
@@ -116,7 +119,7 @@
attachment.setContentType( "text" );
attachment.setName( "file.txt" );
attachment.setSize( 5000);
- attachment.setContentId( 5 );
+ attachment.setAttachmentContentId( 5 );
attachments.add( attachment );
attachment = new Attachment();
@@ -126,7 +129,7 @@
attachment.setContentType( "text" );
attachment.setName( "file2.txt" );
attachment.setSize( 500 );
- attachment.setContentId( 3 );
+ attachment.setAttachmentContentId( 3 );
attachments.add( attachment );
List<Comment> comments = new ArrayList<Comment>();
@@ -352,7 +355,7 @@
Map vars = new HashedMap();
vars.put( "users", users );
vars.put( "groups", groups );
- vars.put( "bytes1", new byte[]{1, 0, 0, 1} );
+ vars.put( "bytes1", new byte[]{1, 0, 0, 1} );
Task task3= (Task) eval( reader, vars );
assertNotSame( task1,
Deleted: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingGetAttachmentContentResponseHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingGetAttachmentContentResponseHandler.java 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingGetAttachmentContentResponseHandler.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -1,32 +0,0 @@
-/**
- *
- */
-package org.drools.task.service;
-
-import org.drools.task.AttachmentContent;
-import org.drools.task.service.TaskClientHandler.GetAttachmentContentResponseHandler;
-
-public class BlockingGetAttachmentContentResponseHandler implements GetAttachmentContentResponseHandler {
- private volatile AttachmentContent attachmentContent;
-
- public synchronized void execute(AttachmentContent attachmentContent) {
- this.attachmentContent = attachmentContent;
- notifyAll();
- }
-
- public synchronized AttachmentContent getAttachmentContent() {
- if ( attachmentContent == null ) {
- try {
- wait( 3000 );
- } catch ( InterruptedException e ) {
- // swallow as this is just a notifiation
- }
- }
-
- if ( attachmentContent == null ) {
- throw new RuntimeException("Timeout : unable to retrieve Attachment Content" );
- }
-
- return attachmentContent;
- }
-}
\ No newline at end of file
Copied: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingGetContentResponseHandler.java (from rev 22401, labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingGetAttachmentContentResponseHandler.java)
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingGetContentResponseHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingGetContentResponseHandler.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -0,0 +1,32 @@
+/**
+ *
+ */
+package org.drools.task.service;
+
+import org.drools.task.Content;
+import org.drools.task.service.TaskClientHandler.GetContentResponseHandler;
+
+public class BlockingGetContentResponseHandler implements GetContentResponseHandler {
+ private volatile Content content;
+
+ public synchronized void execute(Content content) {
+ this.content = content;
+ notifyAll();
+ }
+
+ public synchronized Content getContent() {
+ if ( content == null ) {
+ try {
+ wait( 3000 );
+ } catch ( InterruptedException e ) {
+ // swallow as this is just a notifiation
+ }
+ }
+
+ if ( content == null ) {
+ throw new RuntimeException("Timeout : unable to retrieve Attachment Content" );
+ }
+
+ return content;
+ }
+}
\ No newline at end of file
Property changes on: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingGetContentResponseHandler.java
___________________________________________________________________
Name: svn:mergeinfo
+
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingSetContentResponseHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingSetContentResponseHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingSetContentResponseHandler.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -0,0 +1,33 @@
+/**
+ *
+ */
+package org.drools.task.service;
+
+import org.drools.task.service.TaskClientHandler.SetDocumentResponseHandler;
+
+public class BlockingSetContentResponseHandler implements SetDocumentResponseHandler {
+ private volatile long contentId;
+ private volatile boolean wait = true;
+
+ public synchronized void execute(long contentId) {
+ this.contentId = contentId;
+ wait = false;
+ notifyAll();
+ }
+
+ public synchronized long getContentId() {
+ if ( wait ) {
+ try {
+ wait( 3000 );
+ } catch ( InterruptedException e ) {
+ // swallow as this is just a notifiation
+ }
+ }
+
+ if ( wait ) {
+ throw new RuntimeException("Timeout : unable to retrieve Content Id" );
+ }
+
+ return contentId;
+ }
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/IcalTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/IcalTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/IcalTest.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -0,0 +1,113 @@
+package org.drools.task.service;
+
+import java.io.StringReader;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMessage.RecipientType;
+
+import org.apache.commons.collections.map.HashedMap;
+import org.apache.mina.transport.socket.nio.NioSocketConnector;
+import org.drools.task.BaseTest;
+import org.drools.task.MockUserInfo;
+import org.drools.task.Task;
+import org.subethamail.wiser.Wiser;
+import org.subethamail.wiser.WiserMessage;
+
+public class IcalTest extends BaseTest {
+ MinaTaskServer server;
+ MinaTaskClient client;
+
+ Wiser wiser;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ server = new MinaTaskServer( taskService );
+ Thread thread = new Thread( server );
+ thread.start();
+ Thread.sleep( 500 );
+
+ client = new MinaTaskClient( "client 1",
+ new TaskClientHandler() );
+ NioSocketConnector connector = new NioSocketConnector();
+ SocketAddress address = new InetSocketAddress( "127.0.0.1",
+ 9123 );
+ client.connect( connector,
+ address );
+
+ wiser = new Wiser();
+ wiser.start();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ client.disconnect();
+ server.stop();
+
+ wiser.stop();
+ }
+
+ public void test1() throws Exception {
+ Map vars = new HashedMap();
+ vars.put( "users", users );
+ vars.put( "groups", groups );
+ vars.put( "now", new Date() );
+
+ String str = "(with (new Task()) { priority = 55, taskData = (with( new TaskData()) { createdOn = now, createdBy = users['tony'], activationTime = now}), ";
+ str += "peopleAssignments = (with ( new PeopleAssignments() ) {potentialOwners = [users['steve' ], users['tony' ]]}), ";
+ str += "names = [ new I18NText( 'en-UK', 'This is my task name')],";
+ str += "subjects = [ new I18NText( 'en-UK', 'This is my task subject')],";
+ str += "descriptions = [ new I18NText( 'en-UK', 'This is my task description')],";
+ str += "deadlines = (with (new Deadlines() ) {";
+ str += " startDeadlines = [ ";
+ str += " (with (new Deadline()) {";
+ str += " date = now";
+ str += " } ) ],";
+ str += " endDeadlines = [";
+ str += " (with (new Deadline()) {";
+ str += " date = new Date( now.time + ( 1000 * 60 * * 60 * 24 ) )"; // set to tomorrow
+ str += " } ) ]";
+ str += "} ) })";
+
+ MockUserInfo userInfo = new MockUserInfo();
+ userInfo.getEmails().put( users.get("tony"), "tony at domain.com" );
+ userInfo.getEmails().put( users.get("steve"), "steve at domain.com" );
+
+ userInfo.getLanguages().put( users.get("tony"), "en-UK" );
+ userInfo.getLanguages().put( users.get("steve"), "en-UK" );
+ taskService.setUserinfo( userInfo );
+
+ BlockingAddTaskResponseHandler addTaskResponseHandler = new BlockingAddTaskResponseHandler();
+ Task task = ( Task ) eval( new StringReader( str ), vars );
+ client.addTask( task, addTaskResponseHandler );
+
+ long taskId = addTaskResponseHandler.getTaskId();
+
+ client.claim( taskId, users.get( "steve" ).getId() );
+
+ Thread.sleep( 3000 );
+
+ assertEquals(2, wiser.getMessages().size() );
+
+ List<String> list = new ArrayList<String>(2);
+ list.add( wiser.getMessages().get( 0 ).getEnvelopeReceiver() );
+ list.add( wiser.getMessages().get( 1 ).getEnvelopeReceiver() );
+
+ assertTrue( list.contains("steve at domain.com"));
+ assertTrue( list.contains("steve at domain.com"));
+ MimeMessage msg = (( WiserMessage ) wiser.getMessages().get( 0 )).getMimeMessage();
+
+// assertEquals( "My Body", msg.getContent() );
+// assertEquals( "My Subject", msg.getSubject() );
+ assertEquals( "tony at domain.com", ((InternetAddress)msg.getFrom()[0]).getAddress() );
+ assertEquals( "tony at domain.com", ((InternetAddress)msg.getReplyTo()[0]).getAddress() );
+ assertEquals( "steve at domain.com", ((InternetAddress)msg.getRecipients( RecipientType.TO )[0]).getAddress() );
+ }
+}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceCommentsAndAttachmentsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceCommentsAndAttachmentsTest.java 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceCommentsAndAttachmentsTest.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -16,7 +16,7 @@
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import org.drools.task.AccessType;
import org.drools.task.Attachment;
-import org.drools.task.AttachmentContent;
+import org.drools.task.Content;
import org.drools.task.BaseTest;
import org.drools.task.Comment;
import org.drools.task.Deadline;
@@ -57,7 +57,7 @@
server.stop();
}
- public void testAddComment() {
+ public void testAddRemoveComment() {
Map vars = new HashedMap();
vars.put( "users", users );
vars.put( "groups", groups );
@@ -157,13 +157,13 @@
attachment.setContentType( "txt" );
byte[] bytes = "Ths is my attachment text1".getBytes();
- AttachmentContent content = new AttachmentContent();
+ Content content = new Content();
content.setContent( bytes );
BlockingAddAttachmentResponseHandler addAttachmentResponseHandler = new BlockingAddAttachmentResponseHandler();
client.addAttachment( taskId, attachment, content, addAttachmentResponseHandler);
assertTrue( addAttachmentResponseHandler.getAttachmentId() != attachment.getId() );
- assertTrue( addAttachmentResponseHandler.getContentId() != attachment.getContentId() );
+ assertTrue( addAttachmentResponseHandler.getContentId() != attachment.getAttachmentContentId() );
BlockingGetTaskResponseHandler getTaskResponseHandler = new BlockingGetTaskResponseHandler();
client.getTask( taskId, getTaskResponseHandler );
@@ -182,17 +182,17 @@
assertEquals( bytes.length, returnedAttachment.getSize() );
assertEquals( (long) addAttachmentResponseHandler.getAttachmentId(), (long) returnedAttachment.getId() );
- assertEquals( (long) addAttachmentResponseHandler.getContentId(), (long) returnedAttachment.getContentId() );
+ assertEquals( (long) addAttachmentResponseHandler.getContentId(), (long) returnedAttachment.getAttachmentContentId() );
// Make the same as the returned tasks, so we can test equals
task.getTaskData().setAttachments( attachments1 );
task.getTaskData().setStatus( Status.Created );
assertEquals(task, task1);
- BlockingGetAttachmentContentResponseHandler getAttachmentContentResponseHandler = new BlockingGetAttachmentContentResponseHandler();
- client.getAttachmentContent( returnedAttachment.getContentId(), getAttachmentContentResponseHandler );
- AttachmentContent attachmentContent = getAttachmentContentResponseHandler.getAttachmentContent();
- assertEquals( "Ths is my attachment text1", new String( attachmentContent.getContent() ) );
+ BlockingGetContentResponseHandler getResponseHandler = new BlockingGetContentResponseHandler();
+ client.getContent( returnedAttachment.getAttachmentContentId(), getResponseHandler );
+ content = getResponseHandler.getContent();
+ assertEquals( "Ths is my attachment text1", new String( content.getContent() ) );
// test we can have multiple attachments
@@ -205,7 +205,7 @@
attachment.setContentType( "txt" );
bytes = "Ths is my attachment text2".getBytes();
- content = new AttachmentContent();
+ content = new Content();
content.setContent( bytes );
addAttachmentResponseHandler = new BlockingAddAttachmentResponseHandler();
@@ -220,14 +220,14 @@
List<Attachment> attachments2 = task1.getTaskData().getAttachments();
assertEquals(2, attachments2.size() );
- getAttachmentContentResponseHandler = new BlockingGetAttachmentContentResponseHandler();
- client.getAttachmentContent( addAttachmentResponseHandler.getContentId(), getAttachmentContentResponseHandler );
- attachmentContent = getAttachmentContentResponseHandler.getAttachmentContent();
- assertEquals( "Ths is my attachment text2", new String( attachmentContent.getContent() ) );
+ getResponseHandler = new BlockingGetContentResponseHandler();
+ client.getContent( addAttachmentResponseHandler.getContentId(), getResponseHandler );
+ content = getResponseHandler.getContent();
+ assertEquals( "Ths is my attachment text2", new String( content.getContent() ) );
// make two collections the same and compare
attachment.setSize( 26 );
- attachment.setContentId( addAttachmentResponseHandler.getContentId() );
+ attachment.setAttachmentContentId( addAttachmentResponseHandler.getContentId() );
attachments1.add( attachment );
assertTrue( CollectionUtils.equals( attachments2, attachments1 ) );
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEmailNotificationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEmailNotificationTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEmailNotificationTest.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -0,0 +1,134 @@
+package org.drools.task.service;
+
+import java.io.InputStreamReader;
+import java.io.StringReader;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMessage.RecipientType;
+
+import org.apache.commons.collections.map.HashedMap;
+import org.apache.mina.transport.socket.nio.NioSocketConnector;
+import org.drools.process.instance.WorkItemManager;
+import org.drools.process.instance.impl.DefaultWorkItemManager;
+import org.drools.process.instance.impl.WorkItemImpl;
+import org.drools.process.workitem.email.EmailWorkItemHandler;
+import org.drools.task.BaseTest;
+import org.drools.task.Content;
+import org.drools.task.EmailNotification;
+import org.drools.task.MockUserInfo;
+import org.drools.task.Task;
+import org.drools.task.User;
+import org.drools.task.service.DefaultEscalatedDeadlineHandler;
+import org.mvel.MVEL;
+import org.mvel.compiler.ExpressionCompiler;
+import org.mvel.templates.CompiledTemplate;
+import org.mvel.templates.TemplateCompiler;
+import org.mvel.templates.TemplateRuntime;
+import org.subethamail.wiser.Wiser;
+import org.subethamail.wiser.WiserMessage;
+
+public class TaskServiceEmailNotificationTest extends BaseTest {
+ MinaTaskServer server;
+ MinaTaskClient client;
+
+ Wiser wiser;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ server = new MinaTaskServer( taskService );
+ Thread thread = new Thread( server );
+ thread.start();
+ Thread.sleep( 500 );
+
+ client = new MinaTaskClient( "client 1",
+ new TaskClientHandler() );
+ NioSocketConnector connector = new NioSocketConnector();
+ SocketAddress address = new InetSocketAddress( "127.0.0.1",
+ 9123 );
+ client.connect( connector,
+ address );
+
+ wiser = new Wiser();
+ wiser.start();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ client.disconnect();
+ server.stop();
+
+ wiser.stop();
+ }
+
+ public void testDelayedEmailNotificationOnDeadline() throws Exception {
+ Map vars = new HashedMap();
+ vars.put( "users", users );
+ vars.put( "groups", groups );
+ vars.put( "now", new Date() );
+
+ DefaultEscalatedDeadlineHandler notificationHandler = new DefaultEscalatedDeadlineHandler();
+ notificationHandler.getHandler().setConnection( "localhost", "25", null, null );
+ WorkItemManager manager = new DefaultWorkItemManager( null );
+ notificationHandler.setManager( manager );
+
+ MockUserInfo userInfo = new MockUserInfo();
+ userInfo.getEmails().put( users.get("tony"), "tony at domain.com" );
+ userInfo.getEmails().put( users.get("darth"), "darth at domain.com" );
+
+ userInfo.getLanguages().put( users.get("tony"), "en-UK" );
+ userInfo.getLanguages().put( users.get("darth"), "en-UK" );
+ notificationHandler.setUserInfo( userInfo );
+
+ taskService.setEscalatedDeadlineHandler( notificationHandler );
+
+ String string = toString( new InputStreamReader( getClass().getResourceAsStream( "Notification1.mvel" ) ) );
+
+ BlockingAddTaskResponseHandler addTaskResponseHandler = new BlockingAddTaskResponseHandler();
+ Task task = ( Task ) eval( new StringReader( string ), vars );
+ client.addTask( task, addTaskResponseHandler );
+ long taskId = addTaskResponseHandler.getTaskId();
+
+ Content content = new Content();
+ content.setContent( "['subject' : 'My Subject', 'body' : 'My Body']".getBytes() );
+ BlockingSetContentResponseHandler setContentResponseHandler = new BlockingSetContentResponseHandler();
+ client.setDocumentContent( taskId, content, setContentResponseHandler );
+ long contentId = setContentResponseHandler.getContentId();
+
+ // emails should not be set yet
+ assertEquals(0, wiser.getMessages().size() );
+ Thread.sleep( 1000 );
+
+ // nor yet
+ assertEquals(0, wiser.getMessages().size() );
+
+ Thread.sleep( 6000 );
+
+ // 1 email with two recipients should now exist
+ assertEquals(2, wiser.getMessages().size() );
+
+ List<String> list = new ArrayList<String>(2);
+ list.add( wiser.getMessages().get( 0 ).getEnvelopeReceiver() );
+ list.add( wiser.getMessages().get( 1 ).getEnvelopeReceiver() );
+
+ assertTrue( list.contains("tony at domain.com"));
+ assertTrue( list.contains("darth at domain.com"));
+
+
+ MimeMessage msg = (( WiserMessage ) wiser.getMessages().get( 0 )).getMimeMessage();
+ assertEquals( "My Body", msg.getContent() );
+ assertEquals( "My Subject", msg.getSubject() );
+ assertEquals( "from at domain.com", ((InternetAddress)msg.getFrom()[0]).getAddress() );
+ assertEquals( "replyTo at domain.com", ((InternetAddress)msg.getReplyTo()[0]).getAddress() );
+ assertEquals( "tony at domain.com", ((InternetAddress)msg.getRecipients( RecipientType.TO )[0]).getAddress() );
+ assertEquals( "darth at domain.com", ((InternetAddress)msg.getRecipients( RecipientType.TO )[1]).getAddress() );
+ }
+}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEscalationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEscalationTest.java 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEscalationTest.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -116,13 +116,17 @@
EscalatedDeadlineHandler {
List<Item> list = new ArrayList<Item>();
+
+ TaskService taskService;
public void executeEscalatedDeadline(Task task,
Deadline deadline,
- EntityManager em) {
+ EntityManager em,
+ TaskService taskService) {
list.add( new Item( task,
deadline,
- em ) );
+ em,
+ taskService ) );
}
public List<Item> getList() {
@@ -136,7 +140,8 @@
public Item(Task task,
Deadline deadline,
- EntityManager em) {
+ EntityManager em,
+ TaskService taskService) {
this.deadline = deadline;
this.em = em;
this.task = task;
@@ -165,6 +170,16 @@
public void setEntityManager(EntityManager em) {
this.em = em;
}
+
+ public EntityManager getEm() {
+ return em;
+ }
+
+ public void setEm(EntityManager em) {
+ this.em = em;
+ }
+
+
}
}
}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceLifeCycleTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceLifeCycleTest.java 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceLifeCycleTest.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -16,7 +16,7 @@
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import org.drools.task.AccessType;
import org.drools.task.Attachment;
-import org.drools.task.AttachmentContent;
+import org.drools.task.Content;
import org.drools.task.BaseTest;
import org.drools.task.Comment;
import org.drools.task.Deadline;
@@ -26,7 +26,7 @@
import org.drools.task.service.TaskClientHandler.AddAttachmentResponseHandler;
import org.drools.task.service.TaskClientHandler.AddCommentResponseHandler;
import org.drools.task.service.TaskClientHandler.AddTaskResponseHandler;
-import org.drools.task.service.TaskClientHandler.GetAttachmentContentResponseHandler;
+import org.drools.task.service.TaskClientHandler.GetContentResponseHandler;
import org.drools.task.service.TaskClientHandler.GetTaskResponseHandler;
import org.drools.task.service.TaskClientHandler.TaskSummaryResponseHandler;
import org.drools.task.service.TaskServiceEscalationTest.MockEscalatedDeadlineHandler.Item;
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/FullyPopulatedTask.mvel
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/FullyPopulatedTask.mvel 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/FullyPopulatedTask.mvel 2008-09-12 17:44:38 UTC (rev 22723)
@@ -15,6 +15,9 @@
createdOn = new Date( 10000000 ),
expirationTime = new Date( 10000000 ),
status = Status.Ready,
+ documentAccessType = AccessType.Inline,
+ documentType = "mvel",
+ documentContentId = 20,
attachments = [
(with ( new Attachment() ) {
accessType = AccessType.Inline,
@@ -23,7 +26,7 @@
contentType = "text",
name = "file.txt",
size = 5000,
- contentId = 5
+ attachmentContentId = 5
}),
(with ( new Attachment() ) {
accessType = AccessType.Url,
@@ -32,7 +35,7 @@
contentType = "text",
name = "file2.txt",
size = 500,
- contentId = 3
+ attachmentContentId = 3
})
],
comments = [
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/Notification1.mvel
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/Notification1.mvel (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/Notification1.mvel 2008-09-12 17:44:38 UTC (rev 22723)
@@ -0,0 +1,29 @@
+with ( new Task() ) {
+ taskData = (with ( new TaskData() ) {
+ documentAccessType = AccessType.Inline,
+ documentType = "MVEL"
+ }),
+ deadlines = ( with ( new Deadlines() ) {
+ startDeadlines = [
+ (with (new Deadline()) {
+ date = new Date( now.time + 5000 ),
+ escalations = [
+ (with (new Escalation()) {
+ name = "My Start Escalation",
+ constraints = [new BooleanExpression( "mvel", "true" )],
+ notifications = [
+ (with (new EmailNotification()) {
+ recipients = [ users['tony' ], users['darth' ] ],
+ emailHeaders = [ 'en-UK' : (with (new EmailNotificationHeader()) {
+ language = 'en-UK',
+ subject = "@{doc.subject}",
+ body = "@{doc.body}"
+ }) ]
+ })
+ ]
+ })
+ ]
+ })
+ ]
+ })
+};
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-process/drools-workitems/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/.classpath 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/.classpath 2008-09-12 17:44:38 UTC (rev 22723)
@@ -1,48 +1,34 @@
-<classpath>
- <classpathentry kind="src" path="src/main/java"/>
- <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
- <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
- <classpathentry kind="output" path="target/classes"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
- <classpathentry kind="var" path="M2_REPO/commons-io/commons-io/1.4/commons-io-1.4.jar"/>
- <classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.1/activation-1.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/javax/mail/mail/1.4/mail-1.4.jar"/>
- <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-compress/1.0-SNAPSHOT/commons-compress-1.0-SNAPSHOT.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-exec/1.0.0-SNAPSHOT/commons-exec-1.0.0-SNAPSHOT.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-finder/1.0-SNAPSHOT/commons-finder-1.0-SNAPSHOT.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-cli/2.0-SNAPSHOT/commons-cli-2.0-SNAPSHOT.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/drools/drools-compiler/5.0.0.SNAPSHOT/drools-compiler-5.0.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-compiler/5.0.0.SNAPSHOT/drools-compiler-5.0.0.SNAPSHOT-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/drools/drools-core/5.0.0.SNAPSHOT/drools-core-5.0.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-core/5.0.0.SNAPSHOT/drools-core-5.0.0.SNAPSHOT-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-SNAPSHOT/mvel-2.0-SNAPSHOT.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0.1/antlr-runtime-3.0.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/antlr/gunit/1.0.1/gunit-1.0.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/antlr/antlr/3.0.1/antlr-3.0.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.7/antlr-2.7.7.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
- <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/drools/drools-process-task/5.0.0.SNAPSHOT/drools-process-task-5.0.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-process-task/5.0.0.SNAPSHOT/drools-process-task-5.0.0.SNAPSHOT-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/apache/mina/mina-core/2.0.0-M3/mina-core-2.0.0-M3.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.4.3/slf4j-api-1.4.3.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-jdk14/1.5.2/slf4j-jdk14-1.5.2.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-entitymanager/3.4.0.GA/hibernate-entitymanager-3.4.0.GA.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/hibernate/ejb3-persistence/1.0.2.GA/ejb3-persistence-1.0.2.GA.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-commons-annotations/3.1.0.GA/hibernate-commons-annotations-3.1.0.GA.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-annotations/3.4.0.GA/hibernate-annotations-3.4.0.GA.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-core/3.3.0.SP1/hibernate-core-3.3.0.SP1.jar"/>
- <classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.1/commons-collections-3.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/javax/transaction/jta/1.1/jta-1.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.4.GA/javassist-3.4.GA.jar"/>
- <classpathentry kind="var" path="M2_REPO/com/h2database/h2/1.0.77/h2-1.0.77.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.0.1/jmock-2.5.0.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/subethamail/subethasmtp-wiser/1.2/subethasmtp-wiser-1.2.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/subethamail/subethasmtp-smtp/1.2/subethasmtp-smtp-1.2.jar"/>
- <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.1/commons-logging-1.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
- <classpathentry kind="var" path="M2_REPO/logkit/logkit/1.0.1/logkit-1.0.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/avalon-framework/avalon-framework/4.1.3/avalon-framework-4.1.3.jar"/>
- <classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar"/>
+<classpath>
+ <classpathentry kind="src" path="src/main/java"/>
+ <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+ <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
+ <classpathentry kind="output" path="target/classes"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="var" path="M2_REPO/commons-io/commons-io/1.4/commons-io-1.4.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.1/activation-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/mail/mail/1.4/mail-1.4.jar"/>
+ <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-compress/1.0-SNAPSHOT/commons-compress-1.0-SNAPSHOT.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-exec/1.0.0-SNAPSHOT/commons-exec-1.0.0-SNAPSHOT.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-finder/1.0-SNAPSHOT/commons-finder-1.0-SNAPSHOT.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-cli/2.0-SNAPSHOT/commons-cli-2.0-SNAPSHOT.jar"/>
+ <classpathentry kind="src" path="/drools-compiler"/>
+ <classpathentry kind="src" path="/drools-core"/>
+ <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-SNAPSHOT/mvel-2.0-SNAPSHOT.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0.1/antlr-runtime-3.0.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/antlr/gunit/1.0.1/gunit-1.0.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/antlr/antlr/3.0.1/antlr-3.0.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.7/antlr-2.7.7.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
+ <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.0.1/jmock-2.5.0.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/subethamail/subethasmtp-wiser/1.2/subethasmtp-wiser-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/subethamail/subethasmtp-smtp/1.2/subethasmtp-smtp-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.1/commons-logging-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
+ <classpathentry kind="var" path="M2_REPO/logkit/logkit/1.0.1/logkit-1.0.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/avalon-framework/avalon-framework/4.1.3/avalon-framework-4.1.3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar"/>
</classpath>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-process/drools-workitems/.project
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/.project 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/.project 2008-09-12 17:44:38 UTC (rev 22723)
@@ -1,13 +1,16 @@
-<projectDescription>
- <name>drools-workitems</name>
- <comment>A rule production system</comment>
- <projects/>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.jdt.core.javanature</nature>
- </natures>
+<projectDescription>
+ <name>drools-workitems</name>
+ <comment>A rule production system</comment>
+ <projects>
+ <project>drools-compiler</project>
+ <project>drools-core</project>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
</projectDescription>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-process/drools-workitems/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/pom.xml 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/pom.xml 2008-09-12 17:44:38 UTC (rev 22723)
@@ -10,7 +10,7 @@
<artifactId>drools-workitems</artifactId>
<packaging>jar</packaging>
- <name>Drools :: WorkItems</name>
+ <name>Drools :: Process :: WorkItems</name>
<build/>
@@ -24,11 +24,6 @@
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
</dependency>
- <dependency>
- <groupId>org.drools</groupId>
- <artifactId>drools-process-task</artifactId>
- <version>5.0.0.SNAPSHOT</version>
- </dependency>
<!-- External dependencies -->
<dependency>
Modified: 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 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/email/SendHtml.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -38,7 +38,11 @@
Properties props = new Properties();
// XXX - could use Session.getTransport() and Transport.connect()
// XXX - assume we're using SMTP
- if ( mailhost != null ) props.put( "mail.smtp.host", mailhost );
+ if ( mailhost != null && mailhost.trim().length() > 0 ) props.put( "mail.smtp.host", mailhost );
+ if ( connection.getPort() != null && connection.getPort().trim().length() > 0 ) {
+ props.put( "mail.smtp.port", Integer.parseInt( connection.getPort() ) );
+ }
+
// Get a Session object
Session session = Session.getInstance( props, null );
if ( debug ) session.setDebug( true );
@@ -69,7 +73,7 @@
// send the thing off
Transport.send( msg );
} catch ( Exception e ) {
- e.printStackTrace();
+ throw new RuntimeException( "Unable to send email", e );
}
}
Modified: labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -5,114 +5,114 @@
import java.util.ArrayList;
import java.util.List;
-import org.apache.mina.transport.socket.nio.NioSocketConnector;
-import org.drools.process.instance.WorkItem;
-import org.drools.process.instance.WorkItemHandler;
-import org.drools.process.instance.WorkItemManager;
-import org.drools.task.I18NText;
-import org.drools.task.OrganizationalEntity;
-import org.drools.task.PeopleAssignments;
-import org.drools.task.Status;
-import org.drools.task.Task;
-import org.drools.task.TaskData;
-import org.drools.task.User;
-import org.drools.task.service.MinaTaskClient;
-import org.drools.task.service.TaskClientHandler;
-import org.drools.task.service.TaskClientHandler.AddTaskResponseHandler;
+//import org.apache.mina.transport.socket.nio.NioSocketConnector;
+//import org.drools.process.instance.WorkItem;
+//import org.drools.process.instance.WorkItemHandler;
+//import org.drools.process.instance.WorkItemManager;
+//import org.drools.task.I18NText;
+//import org.drools.task.OrganizationalEntity;
+//import org.drools.task.PeopleAssignments;
+//import org.drools.task.Status;
+//import org.drools.task.Task;
+//import org.drools.task.TaskData;
+//import org.drools.task.User;
+//import org.drools.task.service.MinaTaskClient;
+//import org.drools.task.service.TaskClientHandler;
+//import org.drools.task.service.TaskClientHandler.AddTaskResponseHandler;
-public class WSHumanTaskHandler implements WorkItemHandler {
+public class WSHumanTaskHandler {//implements WorkItemHandler {
+//
+// private String ipAddress = "127.0.0.1";
+// private int port = 9123;
+//
+// public void setConnection(String ipAddress, int port) {
+// this.ipAddress = ipAddress;
+// this.port = port;
+// }
+//
+// public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+// // TODO: cache client and keep client open ?
+// MinaTaskClient client = new MinaTaskClient(
+// "org.drools.process.workitem.wsht.WSHumanTaskHandler", new TaskClientHandler());
+// NioSocketConnector connector = new NioSocketConnector();
+// SocketAddress address = new InetSocketAddress(ipAddress, port);
+// client.connect(connector, address);
+//
+// Task task = new Task();
+// String taskName = (String) workItem.getParameter("TaskName");
+// if (taskName != null) {
+// List<I18NText> names = new ArrayList<I18NText>();
+// names.add(new I18NText("en-UK", taskName));
+// task.setNames(names);
+// }
+// String comment = (String) workItem.getParameter("Comment");
+// if (comment != null) {
+// List<I18NText> descriptions = new ArrayList<I18NText>();
+// descriptions.add(new I18NText("en-UK", comment));
+// task.setDescriptions(descriptions);
+// List<I18NText> subjects = new ArrayList<I18NText>();
+// subjects.add(new I18NText("en-UK", comment));
+// task.setSubjects(subjects);
+// }
+// String priority = (String) workItem.getParameter("Priority");
+// if (priority != null) {
+// try {
+// task.setPriority(new Integer(priority));
+// } catch (NumberFormatException e) {
+// // do nothing
+// }
+// }
+// TaskData taskData = new TaskData();
+// taskData.setWorkItemId(workItem.getId());
+// taskData.setStatus(Status.Created);
+// task.setTaskData(taskData);
+// String actorId = (String) workItem.getParameter("ActorId");
+// if (actorId != null) {
+// PeopleAssignments assignments = new PeopleAssignments();
+// List<OrganizationalEntity> potentialOwners = new ArrayList<OrganizationalEntity>();
+// User user = new User();
+// user.setId(new Long(actorId));
+// potentialOwners.add(user);
+// assignments.setPotentialOwners(potentialOwners);
+// task.setPeopleAssignments(assignments);
+// //taskData.setActualOwner(user);
+// //taskData.setCreatedBy(user);
+// //taskData.setCreatedOn(new Date());
+// //taskData.setActivationTime(new Date());
+// }
+// client.addTask(task, new BlockingAddTaskResponseHandler());
+// client.disconnect();
+// }
+//
+// public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+// // TODO
+// }
+//
+// private class BlockingAddTaskResponseHandler implements AddTaskResponseHandler {
+// private volatile long taskId;
+// private volatile boolean wait = true;
+//
+// public synchronized void execute(long taskId) {
+// this.taskId = taskId;
+// wait = false;
+// notifyAll();
+// }
+//
+// public synchronized long getTaskId() {
+// if ( wait ) {
+// try {
+// wait( 3000 );
+// } catch ( InterruptedException e ) {
+// // swallow as this is just a notifiation
+// }
+// }
+//
+// if ( wait ) {
+// throw new RuntimeException("Timeout : unable to retrieve Task Id" );
+// }
+//
+// return taskId;
+// }
+// }
- private String ipAddress = "127.0.0.1";
- private int port = 9123;
-
- public void setConnection(String ipAddress, int port) {
- this.ipAddress = ipAddress;
- this.port = port;
- }
-
- public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
- // TODO: cache client and keep client open ?
- MinaTaskClient client = new MinaTaskClient(
- "org.drools.process.workitem.wsht.WSHumanTaskHandler", new TaskClientHandler());
- NioSocketConnector connector = new NioSocketConnector();
- SocketAddress address = new InetSocketAddress(ipAddress, port);
- client.connect(connector, address);
-
- Task task = new Task();
- String taskName = (String) workItem.getParameter("TaskName");
- if (taskName != null) {
- List<I18NText> names = new ArrayList<I18NText>();
- names.add(new I18NText("en-UK", taskName));
- task.setNames(names);
- }
- String comment = (String) workItem.getParameter("Comment");
- if (comment != null) {
- List<I18NText> descriptions = new ArrayList<I18NText>();
- descriptions.add(new I18NText("en-UK", comment));
- task.setDescriptions(descriptions);
- List<I18NText> subjects = new ArrayList<I18NText>();
- subjects.add(new I18NText("en-UK", comment));
- task.setSubjects(subjects);
- }
- String priority = (String) workItem.getParameter("Priority");
- if (priority != null) {
- try {
- task.setPriority(new Integer(priority));
- } catch (NumberFormatException e) {
- // do nothing
- }
- }
- TaskData taskData = new TaskData();
- taskData.setWorkItemId(workItem.getId());
- taskData.setStatus(Status.Created);
- task.setTaskData(taskData);
- String actorId = (String) workItem.getParameter("ActorId");
- if (actorId != null) {
- PeopleAssignments assignments = new PeopleAssignments();
- List<OrganizationalEntity> potentialOwners = new ArrayList<OrganizationalEntity>();
- User user = new User();
- user.setId(new Long(actorId));
- potentialOwners.add(user);
- assignments.setPotentialOwners(potentialOwners);
- task.setPeopleAssignments(assignments);
- //taskData.setActualOwner(user);
- //taskData.setCreatedBy(user);
- //taskData.setCreatedOn(new Date());
- //taskData.setActivationTime(new Date());
- }
- client.addTask(task, new BlockingAddTaskResponseHandler());
- client.disconnect();
- }
-
- public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
- // TODO
- }
-
- private class BlockingAddTaskResponseHandler implements AddTaskResponseHandler {
- private volatile long taskId;
- private volatile boolean wait = true;
-
- public synchronized void execute(long taskId) {
- this.taskId = taskId;
- wait = false;
- notifyAll();
- }
-
- public synchronized long getTaskId() {
- if ( wait ) {
- try {
- wait( 3000 );
- } catch ( InterruptedException e ) {
- // swallow as this is just a notifiation
- }
- }
-
- if ( wait ) {
- throw new RuntimeException("Timeout : unable to retrieve Task Id" );
- }
-
- return taskId;
- }
- }
-
}
Modified: labs/jbossrules/trunk/drools-process/drools-workitems/src/test/java/org/drools/process/workitem/email/EmailWorkItemHandlerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-workitems/src/test/java/org/drools/process/workitem/email/EmailWorkItemHandlerTest.java 2008-09-12 16:17:23 UTC (rev 22722)
+++ labs/jbossrules/trunk/drools-process/drools-workitems/src/test/java/org/drools/process/workitem/email/EmailWorkItemHandlerTest.java 2008-09-12 17:44:38 UTC (rev 22723)
@@ -28,6 +28,10 @@
wiser.stop();
}
+ public void test1() {
+
+ }
+
public void testSingleTo() throws Exception {
EmailWorkItemHandler handler = new EmailWorkItemHandler();
handler.setConnection( "localhost", "25", null, null );
More information about the jboss-svn-commits
mailing list