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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Aug 28 16:48:21 EDT 2008


Author: mark.proctor at jboss.com
Date: 2008-08-28 16:48:21 -0400 (Thu, 28 Aug 2008)
New Revision: 21972

Added:
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/Command.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/MinaTaskClient.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskServer.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/server/
   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/service/
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceTest.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/
Removed:
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/NotificationPresentationElements.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/TaskPresentationElements.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/server/
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/server/
Modified:
   labs/jbossrules/trunk/drools-process/drools-process-task/.classpath
   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/BooleanExpression.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Comment.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/Deadlines.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Delegation.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Escalation.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Group.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/OrganizationalEntity.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/PeopleAssignments.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Reassignment.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/TaskSummary.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/User.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/TestModelPersistence.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/AllOpenTasksData.mvel
   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/service/AllOpenTasks.txt
Log:
JBRULES-1745 WS-Human-Task
-Commited Client/Server architecture using mina for remoting for TaskService with unit test
-Inlined PresentationElements

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/.classpath	2008-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/.classpath	2008-08-28 20:48:21 UTC (rev 21972)
@@ -6,13 +6,14 @@
   <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.2.2/xstream-1.2.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.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/slf4j/slf4j-api/1.5.2/slf4j-api-1.5.2.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"/>

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/pom.xml	2008-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/pom.xml	2008-08-28 20:48:21 UTC (rev 21972)
@@ -13,8 +13,13 @@
   <name>Drools :: Process :: Task</name> 
     
       <dependencies> 	        
-    	
     	<dependency>
+    		<groupId>org.apache.mina</groupId>
+    		<artifactId>mina-core</artifactId>
+    		<version>2.0.0-M3</version>
+    	</dependency> 
+    	    	
+    	<dependency>
     		<groupId>org.slf4j</groupId>
     		<artifactId>slf4j-jdk14</artifactId>
     		<version>1.5.2</version>
@@ -39,8 +44,7 @@
     		<artifactId>h2</artifactId>
     		<version>1.0.77</version>
     		<scope>test</scope>
-    	</dependency>    	
-    	
+    	</dependency>  
     	<!-- PGSQL -->
     	<dependency>
     		<groupId>postgresql</groupId>

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-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Attachment.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -1,5 +1,9 @@
 package org.drools.task;
 
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.io.Serializable;
 import java.util.Arrays;
 import java.util.Date;
@@ -13,7 +17,7 @@
 import javax.persistence.OneToOne;
 
 @Entity
-public class Attachment implements Serializable {
+public class Attachment implements Externalizable {
     @Id
     @GeneratedValue(strategy = GenerationType.AUTO)
     private long   id;
@@ -33,13 +37,37 @@
      */
     private String contentType;
 
-    private Date   attachedAt;
-
     @ManyToOne()
     private User   attachedBy;
+    
+    private Date   attachedAt;    
 
     @Lob
     private byte[] attachment;
+    
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeLong( id );
+        out.writeUTF( name );
+        out.writeUTF( accessType.toString() );
+        out.writeUTF( contentType );
+        attachedBy.writeExternal( out );
+        out.writeLong( attachedAt.getTime() );
+        out.writeInt( attachment.length );
+        out.write( attachment );        
+    }
+    
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+        id = in.readLong();
+        name = in.readUTF();
+        accessType = AccessType.valueOf( in.readUTF() );
+        contentType = in.readUTF();
+        attachedBy = new User();
+        attachedBy.readExternal( in );        
+        attachedAt = new Date( in.readLong() );
+        attachment = new byte[ in.readInt() ];
+        in.read( attachment );
+    }
 
     public Long getId() {
         return id;

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/BooleanExpression.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/BooleanExpression.java	2008-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/BooleanExpression.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -1,5 +1,9 @@
 package org.drools.task;
 
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.io.Serializable;
 
 import javax.persistence.Entity;
@@ -9,7 +13,7 @@
 import javax.persistence.Lob;
 
 @Entity
-public class BooleanExpression implements Serializable {
+public class BooleanExpression implements Externalizable {
     @Id
     @GeneratedValue(strategy = GenerationType.AUTO)
     private long   id;
@@ -22,6 +26,19 @@
         
     }
     
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeLong( id );
+        out.writeUTF( type );
+        out.writeUTF( expression );        
+    }
+    
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+        id = in.readLong();
+        type = in.readUTF();
+        expression = in.readUTF();        
+    }
+    
     public BooleanExpression(String type, String expression) {
         this.type = type;
         this.expression = expression;        

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Comment.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Comment.java	2008-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Comment.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -1,5 +1,9 @@
 package org.drools.task;
 
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.io.Serializable;
 import java.util.Date;
 
@@ -12,7 +16,7 @@
 import javax.persistence.OneToOne;
 
 @Entity
-public class Comment implements Serializable  {
+public class Comment implements Externalizable  {
     @Id
     @GeneratedValue(strategy = GenerationType.AUTO)
     private long id;
@@ -20,11 +24,27 @@
     @Lob
     private String text;
     
-    private Date addedDate;
-    
     @ManyToOne()
     private User addedBy;
     
+    private Date addedDate;    
+    
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeLong( id );
+        out.writeUTF( text );
+        addedBy.writeExternal( out );        
+        out.writeLong( addedDate.getTime() );        
+    }    
+    
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+        id = in.readLong();
+        text = in.readUTF();
+        addedBy = new User();
+        addedBy.readExternal( in );
+        addedDate = new Date( in.readLong() );
+    }
+    
     public Long getId() {
         return id;
     }

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-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Deadline.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -1,5 +1,9 @@
 package org.drools.task;
 
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.io.Serializable;
 import java.util.Collections;
 import java.util.Date;
@@ -16,7 +20,7 @@
 import org.drools.task.utils.CollectionUtils;
 
 @Entity
-public class Deadline implements Serializable {
+public class Deadline implements Externalizable {
     @Id
     @GeneratedValue(strategy = GenerationType.AUTO)    
     private long             id;
@@ -30,6 +34,30 @@
     @OneToMany(cascade = CascadeType.ALL)
     @JoinColumn(name = "Deadline_Escalation_Id", nullable = true)    
     private List<Escalation> escalations = Collections.emptyList();
+    
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeLong( id );
+        
+        if ( date != null ) {
+            out.writeBoolean( true );
+            out.writeLong( date.getTime() );
+        } else {
+            out.writeBoolean( false );
+        }
+        CollectionUtils.writeI18NTextList( documentation, out );
+        CollectionUtils.writeEscalationList( escalations, out );
+    }
+    
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+        id = in.readLong();
+        
+        if ( in.readBoolean()) {
+            date = new Date( in.readLong() );
+        }
+        documentation = CollectionUtils.readI18NTextList( in );
+        escalations = CollectionUtils.readIEscalationList( in );       
+    }
 
     public long getId() {
         return id;

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Deadlines.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Deadlines.java	2008-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Deadlines.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -1,5 +1,9 @@
 package org.drools.task;
 
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.io.Serializable;
 import java.util.Collections;
 import java.util.List;
@@ -12,14 +16,25 @@
 import org.drools.task.utils.CollectionUtils;
 
 @Embeddable
-public class Deadlines implements Serializable {    
+public class Deadlines implements Externalizable {    
     @OneToMany(cascade = CascadeType.ALL)
     @JoinColumn(name = "Deadlines_StartDeadLine_Id", nullable = true)    
     private List<Deadline> startDeadlines = Collections.emptyList();
     
     @OneToMany(cascade = CascadeType.ALL)
     @JoinColumn(name = "Deadlines_EndDeadLine_Id", nullable = true)    
-    private List<Deadline> endDeadlines  = Collections.emptyList();       
+    private List<Deadline> endDeadlines  = Collections.emptyList();
+    
+    public void writeExternal(ObjectOutput out) throws IOException {
+        CollectionUtils.writeDeadlineList( startDeadlines, out );
+        CollectionUtils.writeDeadlineList( endDeadlines, out );       
+    } 
+    
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+        startDeadlines = CollectionUtils.readDeadlinesList( in );
+        endDeadlines = CollectionUtils.readDeadlinesList( in );        
+    }        
       
     public List<Deadline> getStartDeadlines() {
         return startDeadlines;

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Delegation.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Delegation.java	2008-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Delegation.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -1,5 +1,9 @@
 package org.drools.task;
 
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.io.Serializable;
 import java.util.Collections;
 import java.util.List;
@@ -16,13 +20,29 @@
 import org.drools.task.utils.CollectionUtils;
 
 @Embeddable
-public class Delegation implements Serializable {
+public class Delegation  implements Externalizable {
     @Enumerated(EnumType.STRING)      
     private Allowed                    allowed;
     
     @OneToMany
     @JoinColumn(name = "Delegates_Id", nullable = true)
     private List<OrganizationalEntity> delegates = Collections.emptyList();
+    
+    public void writeExternal(ObjectOutput out) throws IOException {
+        if ( allowed != null ) {
+            out.writeBoolean( true );
+            out.writeUTF( allowed.toString() );
+        } else {
+            out.writeBoolean( false );
+        }
+        CollectionUtils.writeOrganizationalEntityList( delegates, out );       
+    } 
+    
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+        allowed = Allowed.valueOf( in.readUTF() );
+        delegates = CollectionUtils.readOrganizationalEntityList( in );
+    }       
 
     public Allowed getAllowed() {
         return allowed;

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Escalation.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Escalation.java	2008-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Escalation.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -1,5 +1,9 @@
 package org.drools.task;
 
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.io.Serializable;
 import java.util.Collections;
 import java.util.List;
@@ -17,7 +21,7 @@
 @Entity
 public class Escalation
     implements
-    Serializable {
+    Externalizable {
 
     @Id
     @GeneratedValue(strategy = GenerationType.AUTO)
@@ -36,6 +40,32 @@
     @OneToMany(cascade = CascadeType.ALL)
     @JoinColumn(name = "Escalation_Reassignments_Id", nullable = true)
     private List<Reassignment>      reassignments = Collections.emptyList();
+    
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeLong(  id );
+        
+        if ( name != null ) {
+            out.writeBoolean( true );
+            out.writeUTF( name );
+        } else {
+            out.writeBoolean( false );
+        }
+        CollectionUtils.writeBooleanExpressionList( constraints, out );
+        CollectionUtils.writeNotificationList( notifications, out );
+        CollectionUtils.writeReassignmentList( reassignments, out );        
+    }
+    
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+       id = in.readLong();
+       if ( in.readBoolean() ) {
+           name = in.readUTF();
+       }
+       constraints = CollectionUtils.readBooleanExpressionList( in );
+       notifications = CollectionUtils.readNotificationList( in );
+       reassignments = CollectionUtils.readReassignmentList( in );
+        
+    }
 
     public long getId() {
         return id;

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Group.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Group.java	2008-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Group.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -1,5 +1,9 @@
 package org.drools.task;
 
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.io.Serializable;
 
 import javax.persistence.Entity;
@@ -11,7 +15,7 @@
 import javax.persistence.Table;
 
 @Entity
-public class Group extends OrganizationalEntity implements Serializable {    
+public class Group extends OrganizationalEntity implements Externalizable {    
       private String displayName;
       
       public Group() {
@@ -30,6 +34,18 @@
     public void setDisplayName(String displayName) {
         this.displayName = displayName;
     }
+    
+    public void writeExternal(ObjectOutput out) throws IOException {
+        super.writeExternal( out );
+        out.writeUTF( displayName );
+        
+    } 
+    
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+        super.readExternal( in );
+        displayName = in.readUTF();
+    }      
 
     @Override
     public int hashCode() {

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-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/I18NText.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -1,5 +1,9 @@
 package org.drools.task;
 
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.io.Serializable;
 
 import javax.persistence.Entity;
@@ -9,7 +13,7 @@
 import javax.persistence.Lob;
 
 @Entity
-public class I18NText implements Serializable {
+public class I18NText implements Externalizable {
     @Id
     @GeneratedValue(strategy = GenerationType.AUTO)
     private long   id;
@@ -22,6 +26,19 @@
     public I18NText() {
 
     }
+    
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeLong( id );
+        out.writeUTF( language );
+        out.writeUTF( text );        
+    }
+    
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+        id = in.readLong();
+        language = in.readUTF();
+        text = in.readUTF();        
+    }
 
     public I18NText(String language,
                     String text) {

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-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Notification.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -1,5 +1,9 @@
 package org.drools.task;
 
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.io.Serializable;
 import java.util.Collections;
 import java.util.List;
@@ -11,12 +15,13 @@
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
 import javax.persistence.OneToMany;
 
 import org.drools.task.utils.CollectionUtils;
 
 @Entity
-public class Notification implements Serializable {
+public class Notification implements Externalizable  {
     @Id
     @GeneratedValue(strategy = GenerationType.AUTO)
     private long                             id;
@@ -35,8 +40,45 @@
     @JoinColumn(name = "Notification_BusinessAdministrators_Id", nullable = true)
     private List<OrganizationalEntity>       businessAdministrators = Collections.emptyList();
 
-    @Embedded
-    private NotificationPresentationElements presentationElements;
+    @OneToMany(cascade = CascadeType.ALL)
+    @JoinColumn(name = "Notification_Names_Id", nullable = true)    
+    private List<I18NText> names        = Collections.emptyList();
+    
+    @OneToMany(cascade = CascadeType.ALL)
+    @JoinColumn(name = "Notification_Subjects_Id", nullable = true)    
+    private List<I18NText> subjects     = Collections.emptyList();
+    
+    @OneToMany(cascade = CascadeType.ALL)
+    @JoinColumn(name = "Notification_Descriptions_Id", nullable = true)
+    @Lob
+    private List<I18NText> descriptions = Collections.emptyList();  
+    
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeLong( id );
+        out.writeInt( priority );
+        
+        CollectionUtils.writeOrganizationalEntityList( recipients, out );
+        CollectionUtils.writeOrganizationalEntityList( businessAdministrators, out );                
+        
+        CollectionUtils.writeI18NTextList( documentation, out );
+        CollectionUtils.writeI18NTextList( names, out );
+        CollectionUtils.writeI18NTextList( subjects, out );
+        CollectionUtils.writeI18NTextList( descriptions, out );
+        
+    }
+    
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+        id = in.readLong();
+        priority = in.readInt();
+        
+        recipients = CollectionUtils.readOrganizationalEntityList( in );
+        businessAdministrators = CollectionUtils.readOrganizationalEntityList( in );
+        
+        names = CollectionUtils.readI18NTextList( in );
+        subjects = CollectionUtils.readI18NTextList( in );
+        descriptions = CollectionUtils.readI18NTextList( in );        
+    }
 
     public Long getId() {
         return id;
@@ -78,23 +120,41 @@
         this.businessAdministrators = businessAdministrators;
     }
 
-    public NotificationPresentationElements getNotificationPresentationElements() {
-        return presentationElements;
+    public List<I18NText> getNames() {
+        return names;
     }
 
-    public void setNotificationPresentationElements(NotificationPresentationElements presentationElements) {
-        this.presentationElements = presentationElements;
+    public void setNames(List<I18NText> names) {
+        this.names = names;
     }
 
+    public List<I18NText> getSubjects() {
+        return subjects;
+    }
+
+    public void setSubjects(List<I18NText> subjects) {
+        this.subjects = subjects;
+    }
+    
+    public List<I18NText> getDescriptions() {
+        return descriptions;
+    }
+
+    public void setDescriptions(List<I18NText> descriptions) {
+        this.descriptions = descriptions;
+    }    
+
     @Override
     public int hashCode() {
         final int prime = 31;
         int result = 1;
+        result = prime * result + priority;        
+        result = prime * result + CollectionUtils.hashCode( documentation );        
+        result = prime * result + CollectionUtils.hashCode( recipients );        
         result = prime * result + CollectionUtils.hashCode( businessAdministrators );
-        result = prime * result + CollectionUtils.hashCode( documentation );
-        result = prime * result + ((presentationElements == null) ? 0 : presentationElements.hashCode());
-        result = prime * result + priority;
-        result = prime * result + CollectionUtils.hashCode( recipients );
+        result = prime * result + CollectionUtils.hashCode( names );       
+        result = prime * result + CollectionUtils.hashCode( subjects );        
+        result = prime * result + CollectionUtils.hashCode( descriptions );        
         return result;
     }
 
@@ -103,14 +163,11 @@
         if ( this == obj ) return true;
         if ( obj == null ) return false;
         if ( !(obj instanceof Notification) ) return false;
-        Notification other = (Notification) obj;
+        Notification other = (Notification) obj;        
         
-        if ( presentationElements == null ) {
-            if ( other.presentationElements != null ) return false;
-        } else if ( !presentationElements.equals( other.presentationElements ) ) return false;
-        
         return CollectionUtils.equals( businessAdministrators, other.businessAdministrators ) && CollectionUtils.equals( documentation, other.documentation )
-        && CollectionUtils.equals( recipients, other.recipients );
+        && CollectionUtils.equals( recipients, other.recipients ) && CollectionUtils.equals( descriptions, other.descriptions ) && CollectionUtils.equals( names, other.names )
+        && CollectionUtils.equals( subjects, other.subjects );
     }
                 
 }

Deleted: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/NotificationPresentationElements.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/NotificationPresentationElements.java	2008-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/NotificationPresentationElements.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -1,83 +0,0 @@
-package org.drools.task;
-
-import java.io.Serializable;
-import java.util.Collections;
-import java.util.List;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Embeddable;
-import javax.persistence.JoinColumn;
-import javax.persistence.Lob;
-import javax.persistence.OneToMany;
-
-import org.drools.task.utils.CollectionUtils;
-
- at Embeddable
-public class NotificationPresentationElements implements Serializable {
-    @OneToMany(cascade = CascadeType.ALL)
-    @JoinColumn(name = "NotificationPresentationElements_Names_Id", nullable = true)    
-    private List<I18NText> names        = Collections.emptyList();
-    
-    @OneToMany(cascade = CascadeType.ALL)
-    @JoinColumn(name = "NotificationPresentationElements_Subjects_Id", nullable = true)    
-    private List<I18NText> subjects     = Collections.emptyList();
-    
-    @OneToMany(cascade = CascadeType.ALL)
-    @JoinColumn(name = "NotificationPresentationElements_Descriptions_Id", nullable = true)
-    @Lob
-    private List<I18NText> descriptions = Collections.emptyList();  
-    
-    public NotificationPresentationElements() {
-        
-    }
-
-
-    public List<I18NText> getNames() {
-        return names;
-    }
-
-    public void setNames(List<I18NText> names) {
-        this.names = names;
-    }
-
-    public List<I18NText> getSubjects() {
-        return subjects;
-    }
-
-    public void setSubjects(List<I18NText> subjects) {
-        this.subjects = subjects;
-    }
-    
-    public List<I18NText> getDescriptions() {
-        return descriptions;
-    }
-
-    public void setDescriptions(List<I18NText> descriptions) {
-        this.descriptions = descriptions;
-    }
-
-
-    @Override
-    public int hashCode() {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + CollectionUtils.hashCode( descriptions );
-        result = prime * result + CollectionUtils.hashCode( names );
-        result = prime * result + CollectionUtils.hashCode( subjects );
-        return result;
-    }
-
-
-    @Override
-    public boolean equals(Object obj) {
-        if ( this == obj ) return true;
-        if ( obj == null ) return false;
-        if ( !(obj instanceof NotificationPresentationElements) ) return false;
-        NotificationPresentationElements other = (NotificationPresentationElements) obj;
-        
-        return CollectionUtils.equals( descriptions, other.descriptions ) && CollectionUtils.equals( names, other.names )
-        && CollectionUtils.equals( subjects, other.subjects );
-    }
-    
-    
-}

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/OrganizationalEntity.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/OrganizationalEntity.java	2008-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/OrganizationalEntity.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -1,16 +1,32 @@
 package org.drools.task;
 
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 
 @Entity
-public abstract class OrganizationalEntity {    
-    private long id;
+public abstract class OrganizationalEntity implements Externalizable {
     
     @Id
     @GeneratedValue(strategy = GenerationType.AUTO)
+    private long id;    
+    
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeLong( id );
+        
+    } 
+    
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+        id = in.readLong();
+    }      
+    
     public Long getId() {
         return id;
     }

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/PeopleAssignments.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/PeopleAssignments.java	2008-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/PeopleAssignments.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -1,5 +1,9 @@
 package org.drools.task;
 
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.io.Serializable;
 import java.util.Collections;
 import java.util.List;
@@ -14,7 +18,7 @@
 import org.drools.task.utils.CollectionUtils;
 
 @Embeddable
-public class PeopleAssignments implements Serializable {
+public class PeopleAssignments implements Externalizable {
     @ManyToOne()
     private User                       taskInitiator;
 
@@ -41,6 +45,33 @@
     public PeopleAssignments() {
         
     }
+    
+    public void writeExternal(ObjectOutput out) throws IOException {
+        if ( taskInitiator != null ) {
+            out.writeBoolean( true );
+            taskInitiator.writeExternal( out );
+        } else {
+            out.writeBoolean( false );
+        }
+        CollectionUtils.writeOrganizationalEntityList( potentialOwners, out );
+        CollectionUtils.writeOrganizationalEntityList( excludedOwners, out );
+        CollectionUtils.writeOrganizationalEntityList( taskStakeholders, out );
+        CollectionUtils.writeOrganizationalEntityList( businessAdministrators, out );
+        CollectionUtils.writeOrganizationalEntityList( recipients, out );
+    } 
+    
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+        if ( in.readBoolean() ) {
+            taskInitiator = new User();
+            taskInitiator.readExternal( in );
+        }
+        potentialOwners = CollectionUtils.readOrganizationalEntityList( in );
+        excludedOwners = CollectionUtils.readOrganizationalEntityList( in );
+        taskStakeholders = CollectionUtils.readOrganizationalEntityList( in );
+        businessAdministrators = CollectionUtils.readOrganizationalEntityList( in );
+        recipients = CollectionUtils.readOrganizationalEntityList( in );
+    }      
 
     public User getTaskInitiator() {
         return taskInitiator;

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Reassignment.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Reassignment.java	2008-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Reassignment.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -1,5 +1,9 @@
 package org.drools.task;
 
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.io.Serializable;
 import java.util.Collections;
 import java.util.List;
@@ -15,7 +19,7 @@
 import org.drools.task.utils.CollectionUtils;
 
 @Entity
-public class Reassignment implements Serializable {
+public class Reassignment implements Externalizable {
     @Id
     @GeneratedValue(strategy = GenerationType.AUTO)    
     private long                       id;
@@ -28,6 +32,18 @@
     @JoinColumn(name = "Reassignment_potentialOwners_Id", nullable = true)    
     private List<OrganizationalEntity> potentialOwners = Collections.emptyList();;
 
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeLong( id );
+        CollectionUtils.writeI18NTextList( documentation, out );
+        CollectionUtils.writeOrganizationalEntityList( potentialOwners, out );
+    }
+    
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+        id = in.readLong();
+        documentation = CollectionUtils.readI18NTextList( in );
+        potentialOwners = CollectionUtils.readOrganizationalEntityList( in );        
+    }
 
     public Long getId() {
         return id;

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-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Task.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -1,15 +1,27 @@
 package org.drools.task;
 
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.io.Serializable;
+import java.util.Collections;
+import java.util.List;
 
+import javax.persistence.CascadeType;
 import javax.persistence.Embedded;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.OneToMany;
 
+import org.drools.task.utils.CollectionUtils;
+
 @Entity
-public class Task implements Serializable {
+public class Task implements Externalizable {
     /**
      * WSHT uses a name for the unique identifier, for now we use a generated ID which is also the key, which can be 
      * mapped to the name or a unique name field added later.
@@ -23,18 +35,28 @@
      * default value is 0.
      */
     private int                  priority;
+    
+    @OneToMany(cascade = CascadeType.ALL)
+    @JoinColumn(name = "Task_Names_Id", nullable = true)    
+    private List<I18NText> names        = Collections.emptyList();
+    
+    @OneToMany(cascade = CascadeType.ALL)
+    @JoinColumn(name = "Task_Subjects_Id", nullable = true)    
+    private List<I18NText> subjects     = Collections.emptyList();
+    
+    @OneToMany(cascade = CascadeType.ALL)
+    @JoinColumn(name = "Task_Descriptions_Id", nullable = true)
+    @Lob
+    private List<I18NText> descriptions = Collections.emptyList();      
+    
 
     @Embedded
-    private PeopleAssignments    peopleAssignments;
-    
+    private PeopleAssignments    peopleAssignments;        
 
     @Embedded    
     private Delegation           delegation;
 
     @Embedded
-    private TaskPresentationElements taskPresentationElements;
-
-    @Embedded
     private TaskData             taskData;   
     
     @Embedded 
@@ -42,6 +64,74 @@
     
     public Task() {
     }
+    
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeLong( id );
+        out.writeInt( priority );
+        
+        CollectionUtils.writeI18NTextList( names, out );
+        CollectionUtils.writeI18NTextList( subjects, out );
+        CollectionUtils.writeI18NTextList( descriptions, out );
+        
+        if ( peopleAssignments != null ) {
+            out.writeBoolean( true );
+            peopleAssignments.writeExternal( out );
+        } else {
+            out.writeBoolean( false );
+        }
+        
+        if ( delegation != null ) {
+            out.writeBoolean( true );
+            delegation.writeExternal( out );
+        } else {
+            out.writeBoolean( false );
+        }
+        
+        if ( taskData != null ) {
+            out.writeBoolean( true );
+            taskData.writeExternal( out );
+        } else {
+            out.writeBoolean( false );
+        }
+        
+        if ( deadlines != null ) {
+            out.writeBoolean( true );
+            deadlines.writeExternal( out );
+        } else {
+            out.writeBoolean( false );
+        }
+        
+    } 
+    
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+        id = in.readLong();
+        priority = in.readInt();
+        
+        names = CollectionUtils.readI18NTextList( in );
+        subjects = CollectionUtils.readI18NTextList( in );
+        descriptions = CollectionUtils.readI18NTextList( in );
+        
+        if ( in.readBoolean() ) {
+            peopleAssignments = new PeopleAssignments();
+            peopleAssignments.readExternal( in );
+        }
+        
+        if ( in.readBoolean() ) {
+            delegation = new Delegation();
+            delegation.readExternal( in );
+        }
+        
+        if ( in.readBoolean() ) {
+            taskData = new TaskData();
+            taskData.readExternal( in );
+        }
+        
+        if ( in.readBoolean() ) {
+            deadlines = new Deadlines();
+            deadlines.readExternal( in );
+        }
+    }    
 
     public Long getId() {
         return id;
@@ -58,7 +148,31 @@
     public void setPriority(int priority) {
         this.priority = priority;
     }
+    
+    public List<I18NText> getNames() {
+        return names;
+    }
 
+    public void setNames(List<I18NText> names) {
+        this.names = names;
+    }
+
+    public List<I18NText> getSubjects() {
+        return subjects;
+    }
+
+    public void setSubjects(List<I18NText> subjects) {
+        this.subjects = subjects;
+    }
+    
+    public List<I18NText> getDescriptions() {
+        return descriptions;
+    }
+
+    public void setDescriptions(List<I18NText> descriptions) {
+        this.descriptions = descriptions;
+    }    
+
     public PeopleAssignments getPeopleAssignments() {
         return peopleAssignments;
     }
@@ -75,15 +189,6 @@
         this.delegation = delegation;
     }
 
-
-    public TaskPresentationElements getTaskPresentationElements() {
-        return taskPresentationElements;
-    }
-
-    public void setTaskPresentationElements(TaskPresentationElements presentationElements) {
-        this.taskPresentationElements = presentationElements;
-    }
-
     public TaskData getTaskData() {
         return taskData;
     }
@@ -104,12 +209,14 @@
     public int hashCode() {
         final int prime = 31;
         int result = 1;
-        result = prime * result + ((deadlines == null) ? 0 : deadlines.hashCode());
+        result = prime * result + priority;        
+        result = prime * result + CollectionUtils.hashCode( descriptions );
+        result = prime * result + CollectionUtils.hashCode( names );
+        result = prime * result + CollectionUtils.hashCode( subjects );        
+        result = prime * result + ((peopleAssignments == null) ? 0 : peopleAssignments.hashCode());
         result = prime * result + ((delegation == null) ? 0 : delegation.hashCode());
-        result = prime * result + ((peopleAssignments == null) ? 0 : peopleAssignments.hashCode());
-        result = prime * result + ((taskPresentationElements == null) ? 0 : taskPresentationElements.hashCode());
-        result = prime * result + priority;
         result = prime * result + ((taskData == null) ? 0 : taskData.hashCode());
+        result = prime * result + ((deadlines == null) ? 0 : deadlines.hashCode());        
         return result;
     }
 
@@ -127,16 +234,14 @@
         } else if ( !delegation.equals( other.delegation ) ) return false;
         if ( peopleAssignments == null ) {
             if ( other.peopleAssignments != null ) return false;
-        } else if ( !peopleAssignments.equals( other.peopleAssignments ) ) return false;
-        if ( taskPresentationElements == null ) {
-            if ( other.taskPresentationElements != null ) return false;
-        } else if ( !taskPresentationElements.equals( other.taskPresentationElements ) ) return false;
+        } else if ( !peopleAssignments.equals( other.peopleAssignments ) ) return false;       
+        
         if ( priority != other.priority ) return false;
         if ( taskData == null ) {
             if ( other.taskData != null ) return false;
         } else if ( !taskData.equals( other.taskData ) ) return false;
-        return true;
-    }        
-    
-    
+        return ( CollectionUtils.equals( descriptions, other.descriptions ) && CollectionUtils.equals( names, other.names )
+        && CollectionUtils.equals( subjects, other.subjects ));
+    }
+               
 }

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-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/TaskData.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -1,5 +1,9 @@
 package org.drools.task;
 
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.io.Serializable;
 import java.util.Collections;
 import java.util.Date;
@@ -16,7 +20,7 @@
 import org.drools.task.utils.CollectionUtils;
 
 @Embeddable
-public class TaskData implements Serializable {    
+public class TaskData implements Externalizable {    
     @Enumerated(EnumType.STRING)    
     private Status           status = Status.Created; // initial default state
     
@@ -40,8 +44,90 @@
     
     @OneToMany(cascade = CascadeType.ALL)
     @JoinColumn(name = "TaskData_Attachments_Id", nullable = true)    
-    private List<Attachment> attachments = Collections.emptyList();   
+    private List<Attachment> attachments = Collections.emptyList();
     
+    public void writeExternal(ObjectOutput out) throws IOException {
+        if ( status != null ) {
+            out.writeBoolean( true );
+            out.writeUTF( status.toString() );
+        } else {
+            out.writeBoolean( false );
+        }
+        
+        if ( actualOwner != null) {
+            out.writeBoolean( true );
+            actualOwner.writeExternal( out );
+        } else {
+            out.writeBoolean( false );
+        }
+        
+        if ( createdBy != null ) {
+            out.writeBoolean( true );
+            createdBy.writeExternal( out );
+        } else {
+            out.writeBoolean( false );
+        }
+        
+        if ( createdOn != null ) {
+            out.writeBoolean( true );
+            out.writeLong( createdOn.getTime() );
+        } else {
+            out.writeBoolean( false );
+        }
+        
+        if ( activationTime != null ) {
+            out.writeBoolean( true );
+            out.writeLong( activationTime.getTime() );
+        } else {
+            out.writeBoolean( false );
+        }
+        
+        if ( expirationTime != null ) {
+            out.writeBoolean( true );
+            out.writeLong( expirationTime.getTime() );
+        } else {
+            out.writeBoolean( false );
+        }
+        out.writeBoolean(  skipable );
+        CollectionUtils.writeCommentList( comments, out );
+        CollectionUtils.writeAttachmentList( attachments, out );        
+    } 
+    
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+        if( in.readBoolean() ) {
+            status = Status.valueOf( in.readUTF() );
+        }
+        
+        if ( in.readBoolean() ) {
+            actualOwner = new User();
+            actualOwner.readExternal( in );
+        }
+        
+        if ( in.readBoolean() ) {
+            createdBy = new User();
+            createdBy.readExternal( in );
+        }
+        
+        if ( in.readBoolean() ) {
+            createdOn = new Date( in.readLong() );
+        }
+        
+        if ( in.readBoolean() ) {
+            activationTime = new Date( in.readLong() );
+        }
+        
+        if ( in.readBoolean() ) {
+            expirationTime = new Date( in.readLong() );
+        }
+        
+        skipable = in.readBoolean();
+        
+        comments = CollectionUtils.readCommentList( in );
+        attachments = CollectionUtils.readAttachmentList( in );
+        
+    }        
+    
     public Status getStatus() {
         return status;
     }

Deleted: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/TaskPresentationElements.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/TaskPresentationElements.java	2008-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/TaskPresentationElements.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -1,83 +0,0 @@
-package org.drools.task;
-
-import java.io.Serializable;
-import java.util.Collections;
-import java.util.List;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Embeddable;
-import javax.persistence.JoinColumn;
-import javax.persistence.Lob;
-import javax.persistence.OneToMany;
-
-import org.drools.task.utils.CollectionUtils;
-
- at Embeddable
-public class TaskPresentationElements implements Serializable {
-    @OneToMany(cascade = CascadeType.ALL)
-    @JoinColumn(name = "TaskPresentationElements_Names_Id", nullable = true)    
-    private List<I18NText> names        = Collections.emptyList();
-    
-    @OneToMany(cascade = CascadeType.ALL)
-    @JoinColumn(name = "TaskPresentationElements_Subjects_Id", nullable = true)    
-    private List<I18NText> subjects     = Collections.emptyList();
-    
-    @OneToMany(cascade = CascadeType.ALL)
-    @JoinColumn(name = "TaskPresentationElements_Descriptions_Id", nullable = true)
-    @Lob
-    private List<I18NText> descriptions = Collections.emptyList();  
-    
-    public TaskPresentationElements() {
-        
-    }
-
-
-    public List<I18NText> getNames() {
-        return names;
-    }
-
-    public void setNames(List<I18NText> names) {
-        this.names = names;
-    }
-
-    public List<I18NText> getSubjects() {
-        return subjects;
-    }
-
-    public void setSubjects(List<I18NText> subjects) {
-        this.subjects = subjects;
-    }
-    
-    public List<I18NText> getDescriptions() {
-        return descriptions;
-    }
-
-    public void setDescriptions(List<I18NText> descriptions) {
-        this.descriptions = descriptions;
-    }
-
-
-    @Override
-    public int hashCode() {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + CollectionUtils.hashCode( descriptions );
-        result = prime * result + CollectionUtils.hashCode( names );
-        result = prime * result + CollectionUtils.hashCode( subjects );
-        return result;
-    }
-
-
-    @Override
-    public boolean equals(Object obj) {
-        if ( this == obj ) return true;
-        if ( obj == null ) return false;
-        if ( !(obj instanceof TaskPresentationElements) ) return false;
-        TaskPresentationElements other = (TaskPresentationElements) obj;
-        
-        return CollectionUtils.equals( descriptions, other.descriptions ) && CollectionUtils.equals( names, other.names )
-        && CollectionUtils.equals( subjects, other.subjects );
-    }
-    
-    
-}

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/TaskSummary.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/TaskSummary.java	2008-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/TaskSummary.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -1,10 +1,14 @@
 package org.drools.task;
 
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.io.Serializable;
 import java.util.Date;
 
 
-public class TaskSummary implements Serializable {
+public class TaskSummary implements Externalizable {
     private long    id; 
     
     private String  name;
@@ -59,8 +63,40 @@
     }
 
     public TaskSummary() {
-
     }
+    
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeLong( id );
+        out.writeUTF(  name );
+        out.writeUTF(  subject );
+        out.writeUTF( description );
+        out.writeUTF( status.toString()  );
+        out.writeInt( priority );
+        out.writeBoolean( skipable );
+        actualOwner.writeExternal( out );
+        createdBy.writeExternal( out );
+        out.writeLong( createdOn.getTime() );
+        out.writeLong( activationTime.getTime() );
+        out.writeLong( expirationTime.getTime() );        
+    }
+    
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+        id = in.readLong();
+        name = in.readUTF();
+        subject = in.readUTF();
+        description = in.readUTF();
+        status = Status.valueOf( in.readUTF() );
+        priority = in.readInt();
+        skipable = in.readBoolean();
+        actualOwner = new User();
+        actualOwner.readExternal( in );
+        createdBy = new User();
+        createdBy.readExternal( in );
+        createdOn = new Date( in.readLong() );
+        activationTime = new Date( in.readLong() );
+        expirationTime = new Date( in.readLong() );               
+    }
 
     public long getId() {
         return id;

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/User.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/User.java	2008-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/User.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -1,5 +1,9 @@
 package org.drools.task;
 
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.io.Serializable;
 
 import javax.persistence.Entity;
@@ -10,7 +14,7 @@
 import javax.persistence.Table;
 
 @Entity
-public class User extends OrganizationalEntity implements Serializable {
+public class User extends OrganizationalEntity implements Externalizable{
     private String displayName;
     
     public User() {
@@ -22,6 +26,18 @@
         this.displayName = displayName;
     }
     
+    public void writeExternal(ObjectOutput out) throws IOException {
+        super.writeExternal( out );
+        out.writeUTF( displayName );
+    } 
+    
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+        super.readExternal( in );
+        displayName = in.readUTF();
+        
+    }      
+    
     public String getDisplayName() {
         return displayName;
     }

Copied: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service (from rev 21945, labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/server)


Property changes on: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service
___________________________________________________________________
Name: svn:mergeinfo
   + 

Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/Command.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/Command.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/Command.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -0,0 +1,48 @@
+package org.drools.task.service;
+
+import java.io.Serializable;
+import java.util.List;
+
+public class Command implements Serializable {
+    
+    private int id;
+    
+    private CommandName name;    
+    
+    private List<Object> arguments;
+    
+    public Command(int id, CommandName name, List<Object> arguments) {
+        super();
+        this.id = id;
+        this.arguments = arguments;
+        this.name = name;
+    }
+    
+    
+    
+    public int getId() {
+        return id;
+    }
+
+
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+
+
+    public CommandName getName() {
+        return name;
+    }
+    public void setName(CommandName name) {
+        this.name = name;
+    }
+    public List<Object> getArguments() {
+        return arguments;
+    }
+    public void setArguments(List<Object> arguments) {
+        this.arguments = arguments;
+    }
+            
+}

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/CommandName.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -0,0 +1,7 @@
+package org.drools.task.service;
+
+public enum CommandName {
+    AddTaskRequest,
+    AllOpenTasksForUserRequest,
+    AllOpenTasksForUserResponse;
+}

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskClient.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -0,0 +1,111 @@
+package org.drools.task.service;
+
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.mina.core.future.ConnectFuture;
+import org.apache.mina.core.service.IoHandler;
+import org.apache.mina.core.session.IoSession;
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
+import org.apache.mina.filter.codec.serialization.ObjectSerializationEncoder;
+import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
+import org.apache.mina.transport.socket.SocketConnector;
+import org.apache.mina.transport.socket.nio.NioSocketConnector;
+import org.drools.task.Task;
+import org.drools.task.service.TaskClientHandler.AllOpenTasksForUseResponseHandler;
+
+public class MinaTaskClient
+{
+    private final TaskClientHandler handler;
+
+    private final String name;
+
+    private IoSession session;
+    
+    private int counter;
+    
+    public static void main(String[] args) throws Exception {
+        MinaTaskClient client = new MinaTaskClient("test client", new TaskClientHandler() );
+        NioSocketConnector connector = new NioSocketConnector();
+        SocketAddress address =  new InetSocketAddress( "127.0.0.1", 9123 );
+        client.connect( connector, address );
+    }
+
+    public MinaTaskClient(String name, TaskClientHandler handler) {
+        if (name == null) {
+            throw new IllegalArgumentException("Name can not be null");
+        }
+        this.name = name;
+        this.handler = handler;
+    }
+
+    public boolean connect(SocketConnector connector, SocketAddress address) {
+        if (session != null && session.isConnected()) {
+            throw new IllegalStateException(
+                    "Already connected. Disconnect first.");
+        }
+
+        connector.setHandler( this.handler );
+ 
+        try {
+//            SocketConnectorConfig config = new SocketConnectorConfig();
+//            if (useSsl) {
+//                SSLContext sslContext = BogusSSLContextFactory
+//                        .getInstance(false);
+//                SSLFilter sslFilter = new SSLFilter(sslContext);
+//                sslFilter.setUseClientMode(true);
+//                config.getFilterChain().addLast("sslFilter", sslFilter);
+//            }
+            
+            //connector.setHandler( arg0 );
+            
+            connector.getFilterChain().addLast(
+                                               "codec",
+                                               new ProtocolCodecFilter(
+                                                       new ObjectSerializationCodecFactory()));
+
+            ConnectFuture future1 = connector.connect( address );
+            future1.join();
+            if (!future1.isConnected()) {
+                return false;
+            }
+            session = future1.getSession();
+            //session.write("LOGIN " + name);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+    
+    public void disconnect() {
+        if ( session!= null && session.isConnected() ) {
+            session.close();
+            session.getCloseFuture().join();
+        }
+    }
+    
+    public void addTask(Task task) {
+        List args = new ArrayList( 1 );
+        args.add( task );
+        Command cmd = new Command( counter++, CommandName.AddTaskRequest, args);        
+        
+        session.write( cmd );
+    }
+    
+    public void getAllOpenTasksForUser(long userId, String language, AllOpenTasksForUseResponseHandler responseHandler) {
+        List args = new ArrayList( 2 );
+        args.add( userId );
+        args.add( language );
+        Command cmd = new Command( counter++, CommandName.AllOpenTasksForUserRequest, args);
+        handler.addResponseHandler( cmd.getId(), responseHandler );
+        
+        session.write( cmd );
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskServer.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskServer.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskServer.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -0,0 +1,78 @@
+package org.drools.task.service;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.nio.charset.Charset;
+
+import org.apache.mina.core.service.IoAcceptor;
+import org.apache.mina.core.session.IdleStatus;
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
+import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
+import org.apache.mina.filter.logging.LoggingFilter;
+import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
+
+public class MinaTaskServer
+    implements
+    Runnable {
+    private static final int PORT = 9123;
+
+    TaskServerHandler        handler;
+
+    IoAcceptor               acceptor;
+
+    volatile boolean         running;
+
+    public MinaTaskServer(TaskService service) {
+        handler = new TaskServerHandler( service );
+    }
+
+    public void run() {
+        try {
+            start();
+            while ( running ) {
+                Thread.sleep( 100 );
+            }
+        } catch ( Exception e ) {
+            throw new RuntimeException( "Task Service Exception: ",
+                                        e );
+        }
+    }
+
+    public void start() throws IOException {
+        running = true;
+
+        acceptor = new NioSocketAcceptor();
+
+        acceptor.getFilterChain().addLast( "logger",
+                                           new LoggingFilter() );
+        acceptor.getFilterChain().addLast( "codec",
+                                           new ProtocolCodecFilter( new ObjectSerializationCodecFactory() ) );
+
+        acceptor.setHandler( handler );
+        acceptor.getSessionConfig().setReadBufferSize( 2048 );
+        acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE,
+                                                 10 );
+        acceptor.bind( new InetSocketAddress( PORT ) );
+    }
+
+    public void stop() {
+        acceptor.dispose();
+        running = false;
+    }
+
+    public static void main(String[] args) throws IOException {
+        //        IoAcceptor acceptor = new NioSocketAcceptor();
+        //
+        //        acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );
+        //        acceptor.getFilterChain().addLast(
+        //                                          "codec",
+        //                                          new ProtocolCodecFilter(
+        //                                                  new ObjectSerializationCodecFactory()));
+        //
+        //        acceptor.setHandler( new TaskServerHandler() );
+        //        acceptor.getSessionConfig().setReadBufferSize( 2048 );
+        //        acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );
+        //        acceptor.bind( new InetSocketAddress(PORT) );
+    }
+}
\ No newline at end of file

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskClientHandler.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -0,0 +1,85 @@
+package org.drools.task.service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.mina.core.session.IdleStatus;
+import org.apache.mina.core.service.IoHandlerAdapter;
+import org.apache.mina.core.session.IoSession;
+import org.drools.task.TaskSummary;
+
+public class TaskClientHandler extends IoHandlerAdapter
+{    
+    private MinaTaskClient client;        
+    private Map<Integer, ResponseHandler> responseHandlers;
+    
+    public TaskClientHandler() {
+        responseHandlers = new HashMap<Integer, ResponseHandler>();
+    }
+    
+    public void addResponseHandler(int id, ResponseHandler responseHandler) {
+        responseHandlers.put( id, responseHandler );
+    }
+    
+    public MinaTaskClient getClient() {
+        return client;
+    }
+
+    public void setClient(MinaTaskClient client) {
+        this.client = client;
+    }
+
+    @Override
+    public void exceptionCaught( IoSession session, Throwable cause ) throws Exception
+    {
+        cause.printStackTrace();
+    }
+    
+    @Override
+    public void messageReceived(IoSession session,
+                                Object message) throws Exception {
+        Command cmd = (Command) message;
+        switch ( cmd.getName() ) {
+            case AllOpenTasksForUserResponse : {
+                List<TaskSummary> results = ( List<TaskSummary> ) cmd.getArguments().get( 0 );
+                AllOpenTasksForUseResponseHandler responseHandler = ( AllOpenTasksForUseResponseHandler ) responseHandlers.remove( cmd.getId() );
+                if ( responseHandler != null ) {
+                    responseHandler.execute( results );
+                }               
+            }
+        }
+    }
+
+    @Override
+    public void messageSent(IoSession session, Object message)
+    {
+        String str = message.toString();
+        if( str.trim().equalsIgnoreCase("quit") ) {
+            session.close();
+            return;
+        }
+
+        Date date = new Date();
+        //session.write( date.toString() );
+        System.out.println("Message written : " + str + " : " + date);
+    }
+
+    @Override
+    public void sessionIdle( IoSession session, IdleStatus status ) throws Exception
+    {
+        System.out.println( "IDLE " + session.getIdleCount( status ));
+    }
+    
+    
+    public static interface ResponseHandler {
+        
+    }
+    
+    public static interface AllOpenTasksForUseResponseHandler extends ResponseHandler {
+        public void execute(List<TaskSummary> results);
+        
+        public List<TaskSummary> getResults();
+    }
+}
\ No newline at end of file

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServerHandler.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -0,0 +1,61 @@
+package org.drools.task.service;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.mina.core.session.IdleStatus;
+import org.apache.mina.core.service.IoHandlerAdapter;
+import org.apache.mina.core.session.IoSession;
+import org.drools.task.Task;
+import org.drools.task.TaskSummary;
+
+public class TaskServerHandler extends IoHandlerAdapter {
+    private TaskService service;
+
+    public TaskServerHandler(TaskService service) {
+        this.service = service;
+    }
+
+    @Override
+    public void exceptionCaught(IoSession session,
+                                Throwable cause) throws Exception {
+        cause.printStackTrace();
+    }
+
+    @Override
+    public void messageReceived(IoSession session,
+                                Object message) throws Exception {
+        Command cmd = (Command) message;
+        switch ( cmd.getName() ) {
+            case AddTaskRequest : {
+                service.addTask( (Task) cmd.getArguments().get( 0 ) );
+                break;
+            }
+            case AllOpenTasksForUserRequest : {
+                List<TaskSummary> results = service.getAllOpenTasksForUser( (Long) cmd.getArguments().get( 0 ),
+                                                                            (String) cmd.getArguments().get( 1 ) );
+                List args = new ArrayList( 1 );
+                args.add( results );
+                Command resultsCmnd = new Command( cmd.getId(),
+                                                   CommandName.AllOpenTasksForUserResponse,
+                                                   args );
+                session.write( resultsCmnd );
+                break;
+            }
+            default : {
+                // unknown command
+            }
+        }
+
+        Date date = new Date();
+        System.out.println( "Message written : " + cmd.getName() + " : " + date );
+    }
+
+    @Override
+    public void sessionIdle(IoSession session,
+                            IdleStatus status) throws Exception {
+        System.out.println( "IDLE " + session.getIdleCount( status ) );
+    }
+}
\ No newline at end of file

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/server/TaskService.java	2008-08-28 04:10:14 UTC (rev 21945)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskService.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -1,4 +1,4 @@
-package org.drools.task.server;
+package org.drools.task.service;
 
 import java.io.IOException;
 import java.io.InputStreamReader;
@@ -53,7 +53,7 @@
         return em.find( Task.class, taskId );
     }
     
-    public List<TaskSummary> getAllOpenTasks(long userId, String language) {
+    public List<TaskSummary> getAllOpenTasksForUser(long userId, String language) {
         allOpenTasks.setParameter( "currentUser", userId );
         allOpenTasks.setParameter( "language", language );
         List<TaskSummary> list = ( List<TaskSummary> ) allOpenTasks.getResultList();

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-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/utils/CollectionUtils.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -1,12 +1,32 @@
 package org.drools.task.utils;
 
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 
+import javax.persistence.CascadeType;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToMany;
 import javax.print.attribute.HashAttributeSet;
 
+import org.drools.task.Attachment;
+import org.drools.task.BooleanExpression;
+import org.drools.task.Comment;
+import org.drools.task.Deadline;
+import org.drools.task.Deadlines;
+import org.drools.task.Escalation;
+import org.drools.task.Group;
+import org.drools.task.I18NText;
+import org.drools.task.Notification;
+import org.drools.task.OrganizationalEntity;
+import org.drools.task.Reassignment;
+import org.drools.task.User;
+
 public class CollectionUtils {
     public static boolean equals(List list1, List list2) {
         if ( list1 == null && list2 == null ) {
@@ -49,5 +69,182 @@
             result = prime * result + it.next().hashCode();
         }        
         return result;
+    }       
+    
+    public static void writeCommentList(List<Comment> list, ObjectOutput out) throws IOException {
+        out.writeInt( list.size() );
+        for( Comment item : list ) {
+            item.writeExternal( out );
+        }
+    }    
+    
+    public static List<Comment> readCommentList(ObjectInput in) throws IOException, ClassNotFoundException  {
+        int size = in.readInt();
+        List<Comment> list = new ArrayList<Comment>(size);
+        for ( int i = 0; i < size; i++ ) {
+            Comment item = new Comment();
+            item.readExternal( in );
+            list.add( item );
+        }
+        return list;
+    }     
+    
+    
+    public static void writeAttachmentList(List<Attachment> list, ObjectOutput out) throws IOException {
+        out.writeInt( list.size() );
+        for( Attachment item : list ) {
+            item.writeExternal( out );
+        }
+    }    
+    
+    public static List<Attachment> readAttachmentList(ObjectInput in) throws IOException, ClassNotFoundException  {
+        int size = in.readInt();
+        List<Attachment> list = new ArrayList<Attachment>(size);
+        for ( int i = 0; i < size; i++ ) {
+            Attachment item = new Attachment();
+            item.readExternal( in );
+            list.add( item );
+        }
+        return list;
+    }      
+    
+    public static void writeBooleanExpressionList(List<BooleanExpression> list, ObjectOutput out) throws IOException {
+        out.writeInt( list.size() );
+        for( BooleanExpression item : list ) {
+            item.writeExternal( out );
+        }
+    }    
+    
+    public static List<BooleanExpression> readBooleanExpressionList(ObjectInput in) throws IOException, ClassNotFoundException  {
+        int size = in.readInt();
+        List<BooleanExpression> list = new ArrayList<BooleanExpression>(size);
+        for ( int i = 0; i < size; i++ ) {
+            BooleanExpression item = new BooleanExpression();
+            item.readExternal( in );
+            list.add( item );
+        }
+        return list;
+    }     
+
+    
+    public static void writeNotificationList(List<Notification> list, ObjectOutput out) throws IOException {
+        out.writeInt( list.size() );
+        for( Notification item : list ) {
+            item.writeExternal( out );
+        }
+    }    
+    
+    public static List<Notification> readNotificationList(ObjectInput in) throws IOException, ClassNotFoundException  {
+        int size = in.readInt();
+        List<Notification> list = new ArrayList<Notification>(size);
+        for ( int i = 0; i < size; i++ ) {
+            Notification item = new Notification();
+            item.readExternal( in );
+            list.add( item );
+        }
+        return list;
+    }     
+    
+    
+    public static void writeReassignmentList(List<Reassignment> list, ObjectOutput out) throws IOException {
+        out.writeInt( list.size() );
+        for( Reassignment item : list ) {
+            item.writeExternal( out );
+        }
+    }    
+    
+    public static List<Reassignment> readReassignmentList(ObjectInput in) throws IOException, ClassNotFoundException  {
+        int size = in.readInt();
+        List<Reassignment> list = new ArrayList<Reassignment>(size);
+        for ( int i = 0; i < size; i++ ) {
+            Reassignment item = new Reassignment();
+            item.readExternal( in );
+            list.add( item );
+        }
+        return list;
+    }       
+    
+    public static void writeDeadlineList(List<Deadline> list, ObjectOutput out) throws IOException {
+        out.writeInt( list.size() );
+        for( Deadline item : list ) {
+            item.writeExternal( out );
+        }
+    }    
+    
+    public static List<Deadline> readDeadlinesList(ObjectInput in) throws IOException, ClassNotFoundException  {
+        int size = in.readInt();
+        List<Deadline> list = new ArrayList<Deadline>(size);
+        for ( int i = 0; i < size; i++ ) {
+            Deadline item = new Deadline();
+            item.readExternal( in );
+            list.add( item );
+        }
+        return list;
+    }    
+    
+    public static void writeEscalationList(List<Escalation> list, ObjectOutput out) throws IOException {
+        out.writeInt( list.size() );
+        for( Escalation item : list ) {
+            item.writeExternal( out );
+        }
+    }    
+    
+    public static List<Escalation> readIEscalationList(ObjectInput in) throws IOException, ClassNotFoundException  {
+        int size = in.readInt();
+        List<Escalation> list = new ArrayList<Escalation>(size);
+        for ( int i = 0; i < size; i++ ) {
+            Escalation item = new Escalation();
+            item.readExternal( in );
+            list.add( item );
+        }
+        return list;
+    }    
+    
+    public static void writeI18NTextList(List<I18NText> list, ObjectOutput out) throws IOException {
+        out.writeInt( list.size() );
+        for( I18NText item : list ) {
+            item.writeExternal( out );
+        }
+    }    
+    
+    public static List<I18NText> readI18NTextList(ObjectInput in) throws IOException, ClassNotFoundException  {
+        int size = in.readInt();
+        List<I18NText> list = new ArrayList<I18NText>(size);
+        for ( int i = 0; i < size; i++ ) {
+            I18NText item = new I18NText();
+            item.readExternal( in );
+            list.add( item );
+        }
+        return list;
     }
+    
+    public static void writeOrganizationalEntityList(List<OrganizationalEntity> list, ObjectOutput out) throws IOException {
+        out.writeInt( list.size() );
+        for( OrganizationalEntity item : list ) {
+            if ( item instanceof User ) {
+                out.writeShort( 0 );
+            } else {
+                out.writeShort( 1 );
+            }
+            item.writeExternal( out );
+        }
+    }
+    
+    public static List<OrganizationalEntity> readOrganizationalEntityList(ObjectInput in) throws IOException, ClassNotFoundException  {
+        int size = in.readInt();
+        List<OrganizationalEntity> list = new ArrayList<OrganizationalEntity>(size);
+        for ( int i = 0; i < size; i++ ) {
+            short type = in.readShort();
+            if ( type == 0 ) {
+                User user = new User();
+                user.readExternal( in );
+                list.add( user ); 
+            } else {
+                Group group = new Group();
+                group.readExternal( in );
+                list.add( group );
+            }
+        }
+        return list;
+    }    
 }

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-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/persistence.xml	2008-08-28 20:48:21 UTC (rev 21972)
@@ -27,9 +27,9 @@
 	        <property name="hibernate.connection.url" value="jdbc:h2:mem:mydb" />
 	        <!--  property name="hibernate.connection.url" value="jdbc:h2:file:\dev\drools\trunk7\drools-process\drools-process-task\mydb"/ -->
 	        
-			<!-- property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
-	        <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>	  	        
-	        <property name="hibernate.connection.url" value="jdbc:postgresql://localhost/postgres"/-->
+<!--			<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>-->
+<!--	        <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>	  	        -->
+<!--	        <property name="hibernate.connection.url" value="jdbc:postgresql://localhost/postgres"/>-->
 	        
 	        
 	        <property name="hibernate.connection.username" value="sa"/>

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/BaseTest.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -0,0 +1,136 @@
+package org.drools.task;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.persistence.Query;
+
+import org.apache.commons.collections.map.HashedMap;
+import org.drools.task.Attachment;
+import org.drools.task.BooleanExpression;
+import org.drools.task.Comment;
+import org.drools.task.Deadline;
+import org.drools.task.Deadlines;
+import org.drools.task.Delegation;
+import org.drools.task.Escalation;
+import org.drools.task.Group;
+import org.drools.task.I18NText;
+import org.drools.task.Notification;
+import org.drools.task.OrganizationalEntity;
+import org.drools.task.PeopleAssignments;
+import org.drools.task.Reassignment;
+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.TaskService;
+import org.drools.task.utils.CollectionUtils;
+import org.mvel.MVEL;
+import org.mvel.ParserContext;
+import org.mvel.compiler.ExpressionCompiler;
+import org.mvel.util.MVELClassLoader;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
+
+import junit.framework.TestCase;
+
+public class BaseTest extends TestCase {
+    protected EntityManagerFactory emf;
+    protected EntityManager em;
+    
+    protected Map<String, User> users;
+    protected Map<String, Group> groups;
+    
+    protected TaskService taskService;
+    
+    protected void setUp() throws Exception {
+        // Use persistence.xml configuration
+        emf = Persistence.createEntityManagerFactory( "org.drools.task" );
+        em = emf.createEntityManager(); // Retrieve an application managed entity manager
+        
+        taskService = new TaskService( em );
+        
+        Map  vars = new HashedMap();
+        //vars.put( "em", em );   
+        
+        Reader reader = new InputStreamReader( BaseTest.class.getResourceAsStream( "LoadUsers.mvel" ) );     
+        users = ( Map<String, User> ) eval( reader, vars );   
+        for ( User user : users.values() ) {
+            taskService.addUser( user );
+        }           
+        
+        reader = new InputStreamReader( BaseTest.class.getResourceAsStream( "LoadGroups.mvel" ) );      
+        groups = ( Map<String, Group> ) eval( reader, vars );     
+        for ( Group group : groups.values() ) {
+            taskService.addGroup( group );
+        }                      
+    }
+    
+    protected void tearDown() throws Exception {
+        em.close();
+        emf.close();
+    }    
+
+    public Object eval(Reader reader, Map vars) {
+        try {
+            return eval( toString( reader ), vars );
+        } catch ( IOException e ) {
+            throw new RuntimeException( "Exception Thrown",
+                                        e );
+        }
+    }
+    
+    public String toString(Reader reader) throws IOException {
+        int charValue = 0;
+        StringBuffer sb = new StringBuffer( 1024 );
+        while ( (charValue = reader.read()) != -1 ) {
+            //result = result + (char) charValue;
+            sb.append( (char) charValue );
+        }
+        return sb.toString();
+    }
+
+    public Object eval(String str, Map vars) {
+        ExpressionCompiler compiler = new ExpressionCompiler( str.trim() );
+
+        ParserContext context = new ParserContext();
+        context.addPackageImport( "org.drools.task" );
+        context.addPackageImport( "java.util" );
+        
+        context.addImport( "AccessType", AccessType.class );
+        context.addImport( "Allowed", Allowed.class );
+        context.addImport( "Attachment", Attachment.class );
+        context.addImport( "BooleanExpression", BooleanExpression.class );
+        context.addImport( "Comment", Comment.class );
+        context.addImport( "Deadline", Deadline.class );
+        context.addImport( "Deadlines", Deadlines.class );
+        context.addImport( "Delegation", Delegation.class );
+        context.addImport( "Escalation", Escalation.class );
+        context.addImport( "Group", Group.class );
+        context.addImport( "I18NText", I18NText.class );
+        context.addImport( "Notification", Notification.class );
+        context.addImport( "OrganizationalEntity", OrganizationalEntity.class );
+        context.addImport( "PeopleAssignments", PeopleAssignments.class );
+        context.addImport( "Reassignment", Reassignment.class );
+        context.addImport( "Status", Status.class );
+        context.addImport( "Task", Task.class );
+        context.addImport( "TaskData", TaskData.class );
+        context.addImport( "User", User.class );
+
+        return MVEL.executeExpression( compiler.compile( context ), vars );
+    }
+}

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/TestModelPersistence.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/TestModelPersistence.java	2008-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/TestModelPersistence.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -29,16 +29,14 @@
 import org.drools.task.Group;
 import org.drools.task.I18NText;
 import org.drools.task.Notification;
-import org.drools.task.NotificationPresentationElements;
 import org.drools.task.OrganizationalEntity;
 import org.drools.task.PeopleAssignments;
 import org.drools.task.Reassignment;
-import org.drools.task.TaskPresentationElements;
 import org.drools.task.Status;
 import org.drools.task.Task;
 import org.drools.task.TaskData;
 import org.drools.task.User;
-import org.drools.task.server.TaskService;
+import org.drools.task.service.TaskService;
 import org.drools.task.utils.CollectionUtils;
 import org.mvel.MVEL;
 import org.mvel.ParserContext;
@@ -50,91 +48,16 @@
 
 import junit.framework.TestCase;
 
-public class TestModelPersistence extends TestCase {
-    EntityManagerFactory emf;
-    EntityManager em;
+public class TestModelPersistence extends BaseTest {
     
-    private Map<String, User> users;
-    private Map<String, Group> groups;
-    
-    private TaskService taskService;
-    
     protected void setUp() throws Exception {
-        // Use persistence.xml configuration
-        emf = Persistence.createEntityManagerFactory( "org.drools.task" );
-        em = emf.createEntityManager(); // Retrieve an application managed entity manager
-        
-        taskService = new TaskService( em );
-        
-        Map  vars = new HashedMap();
-        //vars.put( "em", em );   
-        
-        Reader reader = new InputStreamReader( getClass().getResourceAsStream( "LoadUsers.mvel" ) );     
-        users = ( Map<String, User> ) eval( reader, vars );   
-        for ( User user : users.values() ) {
-            taskService.addUser( user );
-        }           
-        
-        reader = new InputStreamReader( getClass().getResourceAsStream( "LoadGroups.mvel" ) );      
-        groups = ( Map<String, Group> ) eval( reader, vars );     
-        for ( Group group : groups.values() ) {
-            taskService.addGroup( group );
-        }           
-        
-    
+        super.setUp();                    
     }
-
-    public Object eval(Reader reader, Map vars) {
-        try {
-            return eval( toString( reader ), vars );
-        } catch ( IOException e ) {
-            throw new RuntimeException( "Exception Thrown",
-                                        e );
-        }
-    }
     
-    public String toString(Reader reader) throws IOException {
-        int charValue = 0;
-        StringBuffer sb = new StringBuffer( 1024 );
-        while ( (charValue = reader.read()) != -1 ) {
-            //result = result + (char) charValue;
-            sb.append( (char) charValue );
-        }
-        return sb.toString();
+    protected void tearDown() throws Exception {
+        super.tearDown();
     }
-
-    public Object eval(String str, Map vars) {
-        ExpressionCompiler compiler = new ExpressionCompiler( str.trim() );
-
-        ParserContext context = new ParserContext();
-        context.addPackageImport( "org.drools.task" );
-        context.addPackageImport( "java.util" );
-        
-        context.addImport( "AccessType", AccessType.class );
-        context.addImport( "Allowed", Allowed.class );
-        context.addImport( "Attachment", Attachment.class );
-        context.addImport( "BooleanExpression", BooleanExpression.class );
-        context.addImport( "Comment", Comment.class );
-        context.addImport( "Deadline", Deadline.class );
-        context.addImport( "Deadlines", Deadlines.class );
-        context.addImport( "Delegation", Delegation.class );
-        context.addImport( "Escalation", Escalation.class );
-        context.addImport( "Group", Group.class );
-        context.addImport( "I18NText", I18NText.class );
-        context.addImport( "Notification", Notification.class );
-        context.addImport( "NotificationPresentationElements", NotificationPresentationElements.class );
-        context.addImport( "OrganizationalEntity", OrganizationalEntity.class );
-        context.addImport( "PeopleAssignments", PeopleAssignments.class );
-        context.addImport( "Reassignment", Reassignment.class );
-        context.addImport( "Status", Status.class );
-        context.addImport( "Task", Task.class );
-        context.addImport( "TaskData", TaskData.class );
-        context.addImport( "TaskPresentationElements", TaskPresentationElements.class );
-        context.addImport( "User", User.class );
-
-        return MVEL.executeExpression( compiler.compile( context ), vars );
-    }
-
+    
     public void testfullHibernateRoundtripWithAdditionalMVELCheck() throws Exception {
 
         Task task1 = new Task();
@@ -218,14 +141,12 @@
         comment.setText( "this is a loooooooooooooooooooooooooooooooooooooooooooooooong comment" );
         comments.add( comment );
 
-        TaskPresentationElements tpresentationElements = new TaskPresentationElements();
-        task1.setTaskPresentationElements( tpresentationElements );
         List<I18NText> names = new ArrayList<I18NText>();
-        tpresentationElements.setNames( names );
+        task1.setNames( names );
         List<I18NText> subjects = new ArrayList<I18NText>();
-        tpresentationElements.setSubjects( subjects );
+        task1.setSubjects( subjects );
         List<I18NText> descriptions = new ArrayList<I18NText>();
-        tpresentationElements.setDescriptions( descriptions );
+        task1.setDescriptions( descriptions );
 
         names.add( new I18NText( "en-UK",
                                  "This is my task name" ) );
@@ -300,14 +221,12 @@
         recipients.add( users.get( "tony" ) );
         recipients.add( users.get( "darth" ) );
 
-        NotificationPresentationElements npresentationElements = new NotificationPresentationElements();
-        notification.setNotificationPresentationElements( npresentationElements );
         names = new ArrayList<I18NText>();
-        npresentationElements.setNames( names );
+        notification.setNames( names );
         subjects = new ArrayList<I18NText>();
-        npresentationElements.setSubjects( subjects );
+        notification.setSubjects( subjects );
         descriptions = new ArrayList<I18NText>();
-        npresentationElements.setDescriptions( descriptions );
+        notification.setDescriptions( descriptions );
 
         names.add( new I18NText( "en-UK",
                                  "This is my start notification name" ) );
@@ -381,14 +300,12 @@
         recipients.add( users.get( "liz" ) );
         recipients.add( users.get( "jane" ) );
 
-        npresentationElements = new NotificationPresentationElements();
-        notification.setNotificationPresentationElements( npresentationElements );
         names = new ArrayList<I18NText>();
-        npresentationElements.setNames( names );
+        notification.setNames( names );
         subjects = new ArrayList<I18NText>();
-        npresentationElements.setSubjects( subjects );
+        notification.setSubjects( subjects );
         descriptions = new ArrayList<I18NText>();
-        npresentationElements.setDescriptions( descriptions );
+        notification.setDescriptions( descriptions );
 
         names.add( new I18NText( "en-UK",
                                  "This is my end notification name" ) );
@@ -445,9 +362,6 @@
                        task3 );
         assertEquals( task1,
                       task3 );
-
-        em.close();
-        emf.close();
     }
     
     public void testQuery() throws Exception {
@@ -466,15 +380,15 @@
         reader = new InputStreamReader( getClass().getResourceAsStream( "QueryResultsInEnglish.mvel" ) );
         Map<String, List<TaskSummary>> expected = ( Map<String, List<TaskSummary>> ) eval( reader, vars );
            
-        List actual = taskService.getAllOpenTasks( users.get( "peter" ).getId(), "en-UK" );
+        List actual = taskService.getAllOpenTasksForUser( users.get( "peter" ).getId(), "en-UK" );
         assertEquals( 3, actual.size() );
         assertTrue( CollectionUtils.equals( expected.get( "peter" ), actual ) );
 
-        actual = taskService.getAllOpenTasks( users.get( "steve" ).getId(), "en-UK" );
+        actual = taskService.getAllOpenTasksForUser( users.get( "steve" ).getId(), "en-UK" );
         assertEquals( 2, actual.size() );
         assertTrue( CollectionUtils.equals( expected.get( "steve" ), actual ) );
         
-        actual = taskService.getAllOpenTasks( users.get( "darth" ).getId(), "en-UK" );
+        actual = taskService.getAllOpenTasksForUser( users.get( "darth" ).getId(), "en-UK" );
         assertEquals( 1, actual.size() );
         assertTrue( CollectionUtils.equals( expected.get( "darth" ), actual ) );
         
@@ -482,20 +396,17 @@
         reader = new InputStreamReader( getClass().getResourceAsStream( "QueryResultsInGerman.mvel" ) );
         expected = ( Map<String, List<TaskSummary>> ) eval( reader, vars );
             
-        actual = taskService.getAllOpenTasks( users.get( "peter" ).getId(), "en-DK" );
+        actual = taskService.getAllOpenTasksForUser( users.get( "peter" ).getId(), "en-DK" );
         assertEquals( 3, actual.size() );
         assertTrue( CollectionUtils.equals( expected.get( "peter" ), actual ) );
 
-        actual = taskService.getAllOpenTasks( users.get( "steve" ).getId(), "en-DK" );
+        actual = taskService.getAllOpenTasksForUser( users.get( "steve" ).getId(), "en-DK" );
         assertEquals( 2, actual.size() );
         assertTrue( CollectionUtils.equals( expected.get( "steve" ), actual ) );
         
-        actual = taskService.getAllOpenTasks( users.get( "darth" ).getId(), "en-DK" );
+        actual = taskService.getAllOpenTasksForUser( users.get( "darth" ).getId(), "en-DK" );
         assertEquals( 1, actual.size() );
-        assertTrue( CollectionUtils.equals( expected.get( "darth" ), actual ) );        
-        
-        em.close();
-        emf.close();        
+        assertTrue( CollectionUtils.equals( expected.get( "darth" ), actual ) );              
     }
 
 }

Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceTest.java	2008-08-28 20:48:21 UTC (rev 21972)
@@ -0,0 +1,131 @@
+package org.drools.task.service;
+
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.collections.map.HashedMap;
+import org.apache.mina.transport.socket.nio.NioSocketConnector;
+import org.drools.task.BaseTest;
+import org.drools.task.Task;
+import org.drools.task.TaskSummary;
+import org.drools.task.TestModelPersistence;
+import org.drools.task.service.TaskClientHandler.AllOpenTasksForUseResponseHandler;
+import org.drools.task.utils.CollectionUtils;
+
+import junit.framework.TestCase;
+
+public class TaskServiceTest extends BaseTest  {
+    MinaTaskServer server;
+    MinaTaskClient client;
+    
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        server = new MinaTaskServer( taskService );
+        Thread thread = new Thread( server );
+        thread.start();     
+        
+        client = new MinaTaskClient( "client 1", new TaskClientHandler() );
+        NioSocketConnector connector = new NioSocketConnector();
+        SocketAddress address =  new InetSocketAddress( "127.0.0.1", 9123 );
+        client.connect( connector, address );        
+    }
+    
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        client.disconnect();
+        server.stop();
+    }
+    
+    public void testQuery() throws Exception {
+        Map  vars = new HashedMap();     
+        vars.put( "users", users );
+        vars.put( "groups", groups );        
+        
+        //Reader reader;
+        Reader reader = new InputStreamReader( getClass().getResourceAsStream( "../AllOpenTasksData.mvel" ) );
+        List<Task> tasks = ( List<Task> ) eval( reader, vars );
+        for ( Task task : tasks) {
+            client.addTask( task );
+        }
+        
+        // Test UK I18N  
+        reader = new InputStreamReader( getClass().getResourceAsStream( "../QueryResultsInEnglish.mvel" ) );
+        Map<String, List<TaskSummary>> expected = ( Map<String, List<TaskSummary>> ) eval( reader, vars );
+           
+
+        AllOpenTasksForUseResponseHandler responseHandler = new BlockingAllOpenTasksForUseResponseHandler();       
+        client.getAllOpenTasksForUser( users.get( "peter" ).getId(), "en-UK", responseHandler );
+        List<TaskSummary> actual = responseHandler.getResults();       
+        assertEquals( 3, actual.size() );
+        assertTrue( CollectionUtils.equals( expected.get( "peter" ), actual ) );
+
+        responseHandler = new BlockingAllOpenTasksForUseResponseHandler();  
+        client.getAllOpenTasksForUser( users.get( "steve" ).getId(), "en-UK", responseHandler );
+        actual = responseHandler.getResults();           
+        assertEquals( 2, actual.size() );
+        assertTrue( CollectionUtils.equals( expected.get( "steve" ), actual ) );
+        
+        responseHandler = new BlockingAllOpenTasksForUseResponseHandler();  
+        client.getAllOpenTasksForUser( users.get( "darth" ).getId(), "en-UK", responseHandler );
+        actual = responseHandler.getResults();        
+        assertEquals( 1, actual.size() );
+        assertTrue( CollectionUtils.equals( expected.get( "darth" ), actual ) );
+        
+        // Test DK I18N 
+        reader = new InputStreamReader( getClass().getResourceAsStream( "../QueryResultsInGerman.mvel" ) );
+        expected = ( Map<String, List<TaskSummary>> ) eval( reader, vars );            
+        
+        responseHandler = new BlockingAllOpenTasksForUseResponseHandler();  
+        client.getAllOpenTasksForUser(  users.get( "peter" ).getId(), "en-DK",  responseHandler   );
+        actual = responseHandler.getResults();        
+        assertEquals( 3, actual.size() );
+        assertTrue( CollectionUtils.equals( expected.get( "peter" ), actual ) );
+
+        responseHandler = new BlockingAllOpenTasksForUseResponseHandler();  
+        client.getAllOpenTasksForUser(  users.get( "steve" ).getId(), "en-DK",  responseHandler   );
+        actual = responseHandler.getResults();            
+        assertEquals( 2, actual.size() );
+        assertTrue( CollectionUtils.equals( expected.get( "steve" ), actual ) );
+        
+        responseHandler = new BlockingAllOpenTasksForUseResponseHandler();  
+        client.getAllOpenTasksForUser(  users.get( "darth" ).getId(), "en-DK",  responseHandler   );
+        actual = responseHandler.getResults();        
+        assertEquals( 1, actual.size() );
+        assertTrue( CollectionUtils.equals( expected.get( "darth" ), actual ) );              
+    }
+    
+    
+    public static class BlockingAllOpenTasksForUseResponseHandler implements AllOpenTasksForUseResponseHandler {
+        private volatile List<TaskSummary> results;
+
+        public synchronized void execute(List<TaskSummary> results) {
+            this.results = results;
+            notifyAll();                
+        }
+        
+        public synchronized List<TaskSummary> getResults() {
+            if ( results == null ) {                  
+                try {
+                    wait( 3000 );
+                } catch ( InterruptedException e ) {
+                    e.printStackTrace();
+                }
+            }
+            
+            if ( results == null ) {
+                throw new RuntimeException("Timeout : unable to retrieve results" );
+            }
+            
+            return results;
+
+        }
+        
+    };    
+    
+    
+}

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/AllOpenTasksData.mvel
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/AllOpenTasksData.mvel	2008-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/AllOpenTasksData.mvel	2008-08-28 20:48:21 UTC (rev 21972)
@@ -11,14 +11,12 @@
 	        expirationTime = format.parse( "25/Jan/2008" ),
 	        status = Status.Created,
 	    }),
-	    taskPresentationElements = (with ( new TaskPresentationElements() ) {
-	        names = [ new I18NText( "en-UK", "This is my task name Jan" ),
-	                  new I18NText( "en-DK", "Dies ist mein task Name Jan" )],
-	        subjects = [ new I18NText( "en-UK", "This is my task subject Jan" ),
-	                     new I18NText( "en-DK", "Das ist mein task Thema Jan" ) ],
-	        descriptions = [ new I18NText( "en-UK", "This is my task description Jan" ),
-	                          new I18NText( "en-DK", "Das ist mein task Beschreibung Jan" ) ]   
-	    })  
+        names = [ new I18NText( "en-UK", "This is my task name Jan" ),
+                  new I18NText( "en-DK", "Dies ist mein task Name Jan" )],
+        subjects = [ new I18NText( "en-UK", "This is my task subject Jan" ),
+                     new I18NText( "en-DK", "Das ist mein task Thema Jan" ) ],
+        descriptions = [ new I18NText( "en-UK", "This is my task description Jan" ),
+                         new I18NText( "en-DK", "Das ist mein task Beschreibung Jan" ) ]    
 	}),
 	(with ( new Task() ) { 
 	    priority = 150,
@@ -30,14 +28,12 @@
 	        expirationTime = format.parse( "25/Feb/2008" ),
 	        status = Status.Created,
 	    }),
-	    taskPresentationElements = (with ( new TaskPresentationElements() ) {
-	        names = [ new I18NText( "en-UK", "This is my task name Feb" ),
-	                  new I18NText( "en-DK", "Dies ist mein task Name Feb" )],
-	        subjects = [ new I18NText( "en-UK", "This is my task subject Feb" ),
-	                     new I18NText( "en-DK", "Das ist mein task Thema Feb" ) ],
-	        descriptions = [ new I18NText( "en-UK", "This is my task description Feb" ),
-	                          new I18NText( "en-DK", "Das ist mein task Beschreibung Feb" ) ]   
-	    })       
+        names = [ new I18NText( "en-UK", "This is my task name Feb" ),
+                  new I18NText( "en-DK", "Dies ist mein task Name Feb" )],
+        subjects = [ new I18NText( "en-UK", "This is my task subject Feb" ),
+                     new I18NText( "en-DK", "Das ist mein task Thema Feb" ) ],
+        descriptions = [ new I18NText( "en-UK", "This is my task description Feb" ),
+                         new I18NText( "en-DK", "Das ist mein task Beschreibung Feb" ) ]          
 	}),
 	(with ( new Task() ) { 
 	    priority = 90,
@@ -49,14 +45,12 @@
 	        expirationTime = format.parse( "25/Mar/2008" ),
 	        status = Status.Created,
 	    }),
-	    taskPresentationElements = (with ( new TaskPresentationElements() ) {
-	        names = [ new I18NText( "en-UK", "This is my task name Mar" ),
-	                  new I18NText( "en-DK", "Dies ist mein task Name Mar" )],
-	        subjects = [ new I18NText( "en-UK", "This is my task subject Mar" ),
-	                     new I18NText( "en-DK", "Das ist mein task Thema Mar" ) ],
-	        descriptions = [ new I18NText( "en-UK", "This is my task description Mar" ),
-	                          new I18NText( "en-DK", "Das ist mein task Beschreibung Mar" ) ]   
-	    })     
+        names = [ new I18NText( "en-UK", "This is my task name Mar" ),
+                  new I18NText( "en-DK", "Dies ist mein task Name Mar" )],
+        subjects = [ new I18NText( "en-UK", "This is my task subject Mar" ),
+                     new I18NText( "en-DK", "Das ist mein task Thema Mar" ) ],
+        descriptions = [ new I18NText( "en-UK", "This is my task description Mar" ),
+                         new I18NText( "en-DK", "Das ist mein task Beschreibung Mar" ) ]       
 	}),
 	(with ( new Task() ) { 
 	    priority = 20,
@@ -68,14 +62,12 @@
 	        expirationTime = format.parse( "25/Apr/2008" ),
 	        status = Status.Created,
 	    }),
-	    taskPresentationElements = (with ( new TaskPresentationElements() ) {
-	        names = [ new I18NText( "en-UK", "This is my task name Apr" ),
-	                  new I18NText( "en-DK", "Dies ist mein task Name Apr" )],
-	        subjects = [ new I18NText( "en-UK", "This is my task subject Apr" ),
-	                     new I18NText( "en-DK", "Das ist mein task Thema Apr" ) ],
-	        descriptions = [ new I18NText( "en-UK", "This is my task description Apr" ),
-	                          new I18NText( "en-DK", "Das ist mein task Beschreibung Apr" ) ]   
-	    })      
+        names = [ new I18NText( "en-UK", "This is my task name Apr" ),
+                  new I18NText( "en-DK", "Dies ist mein task Name Apr" )],
+        subjects = [ new I18NText( "en-UK", "This is my task subject Apr" ),
+                     new I18NText( "en-DK", "Das ist mein task Thema Apr" ) ],
+        descriptions = [ new I18NText( "en-UK", "This is my task description Apr" ),
+                         new I18NText( "en-DK", "Das ist mein task Beschreibung Apr" ) ]     
 	}),
 	(with ( new Task() ) { 
 	    priority = 20,
@@ -87,14 +79,12 @@
 	        expirationTime = format.parse( "25/May/2008" ),
 	        status = Status.Created,
 	    }),
-	    taskPresentationElements = (with ( new TaskPresentationElements() ) {
-	        names = [ new I18NText( "en-UK", "This is my task name May" ),
-	                  new I18NText( "en-DK", "Dies ist mein task Name May" )],
-	        subjects = [ new I18NText( "en-UK", "This is my task subject May" ),
-	                     new I18NText( "en-DK", "Das ist mein task Thema May" ) ],
-	        descriptions = [ new I18NText( "en-UK", "This is my task description May" ),
-	                          new I18NText( "en-DK", "Das ist mein task Beschreibung May" ) ]   
-	    })
+        names = [ new I18NText( "en-UK", "This is my task name May" ),
+                  new I18NText( "en-DK", "Dies ist mein task Name May" )],
+        subjects = [ new I18NText( "en-UK", "This is my task subject May" ),
+                     new I18NText( "en-DK", "Das ist mein task Thema May" ) ],
+        descriptions = [ new I18NText( "en-UK", "This is my task description May" ),
+                         new I18NText( "en-DK", "Das ist mein task Beschreibung May" ) ]   
 	}),	
 	(with ( new Task() ) { 
 	    priority = 15,
@@ -106,14 +96,12 @@
 	        expirationTime = format.parse( "25/Jun/2008" ),
 	        status = Status.Created,
 	    }),
-	    taskPresentationElements = (with ( new TaskPresentationElements() ) {
-	        names = [ new I18NText( "en-UK", "This is my task name Jun" ),
-	                  new I18NText( "en-DK", "Dies ist mein task Name Jun" )],
-	        subjects = [ new I18NText( "en-UK", "This is my task subject Jun" ),
-	                     new I18NText( "en-DK", "Das ist mein task Thema Jun" ) ],
-	        descriptions = [ new I18NText( "en-UK", "This is my task description Jun" ),
-	                          new I18NText( "en-DK", "Das ist mein task Beschreibung Jun" ) ]   
-	    })  
+        names = [ new I18NText( "en-UK", "This is my task name Jun" ),
+                  new I18NText( "en-DK", "Dies ist mein task Name Jun" )],
+        subjects = [ new I18NText( "en-UK", "This is my task subject Jun" ),
+                     new I18NText( "en-DK", "Das ist mein task Thema Jun" ) ],
+        descriptions = [ new I18NText( "en-UK", "This is my task description Jun" ),
+                         new I18NText( "en-DK", "Das ist mein task Beschreibung Jun" ) ]    
 	})			
 ]
 

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-08-28 20:42:10 UTC (rev 21971)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/FullyPopulatedTask.mvel	2008-08-28 20:48:21 UTC (rev 21972)
@@ -46,14 +46,12 @@
              })
         ]
     }),
-    taskPresentationElements = (with ( new TaskPresentationElements() ) {
-        names = [ new I18NText( "en-UK", "This is my task name" ),
-                  new I18NText( "en-DK", "Dies ist mein task Name" )],
-        subjects = [ new I18NText( "en-UK", "This is my task subject" ),
-                     new I18NText( "en-DK", "Das ist mein task Thema" ) ],
-        descriptions = [ new I18NText( "en-UK", "This is my task description" ),
-                          new I18NText( "en-DK", "Das ist mein task Beschreibung" ) ]   
-    }),  
+    names = [ new I18NText( "en-UK", "This is my task name" ),
+              new I18NText( "en-DK", "Dies ist mein task Name" )],
+    subjects = [ new I18NText( "en-UK", "This is my task subject" ),
+                 new I18NText( "en-DK", "Das ist mein task Thema" ) ],
+    descriptions = [ new I18NText( "en-UK", "This is my task description" ),
+                     new I18NText( "en-DK", "Das ist mein task Beschreibung" ) ],
     delegation = ( with( new Delegation() ) {
         allowed = Allowed.PotentialOwners,
         delegates = [ groups['crusaders' ], groups['knightsTempler' ] ]                                                                
@@ -74,14 +72,12 @@
                                                    new I18NText( "en-DK", "Start Anmeldung Dokumentation" ) ],
                                 businessAdministrators = [ users['bruce' ], users['peter' ] ],
                                 recipients = [ users['tony' ], users['darth' ] ],                                                                                        
-                                notificationPresentationElements = (with (new NotificationPresentationElements()) {
-                                    names = [ new I18NText( "en-UK", "This is my start notification name" ),
-                                              new I18NText( "en-DK", "Dies ist mein start anmeldung Name" ) ],
-                                    subjects = [ new I18NText( "en-UK", "This is my start notification subject" ), 
-                                                 new I18NText( "en-DK", "Das ist mein start anmeldung Thema" ) ],
-                                    descriptions = [new I18NText( "en-UK", "This is my start notification description" ),
-                                                    new I18NText( "en-DK", "Das ist mein start anmeldung Beschreibung" ) ]
-                                })                                                                                                                                                                                       
+                                names = [ new I18NText( "en-UK", "This is my start notification name" ),
+                                          new I18NText( "en-DK", "Dies ist mein start anmeldung Name" ) ],
+                                subjects = [ new I18NText( "en-UK", "This is my start notification subject" ), 
+                                             new I18NText( "en-DK", "Das ist mein start anmeldung Thema" ) ],
+                                descriptions = [new I18NText( "en-UK", "This is my start notification description" ),
+                                                new I18NText( "en-DK", "Das ist mein start anmeldung Beschreibung" ) ]                                                                                                                                                                                       
                             }) 
                         ],
                         reassignments = [
@@ -111,14 +107,12 @@
                                                    new I18NText( "en-DK", "Ende Anmeldung Dokumentation" ) ],
                                 businessAdministrators = [ users['bobba' ], users['darth' ] ],
                                 recipients = [ users['liz' ], users['jane' ] ],                                                                                        
-                                notificationPresentationElements = (with (new NotificationPresentationElements()) {
-                                    names = [ new I18NText( "en-UK", "This is my end notification name" ),
-                                              new I18NText( "en-DK", "Dies ist mein ende anmeldung Name" ) ],
-                                    subjects = [ new I18NText( "en-UK", "This is my end notification subject" ), 
-                                                 new I18NText( "en-DK", "Das ist mein ende anmeldung Thema" ) ],
-                                    descriptions = [new I18NText( "en-UK", "This is my end notification description" ),
-                                                    new I18NText( "en-DK", "Das ist mein ende anmeldung Beschreibung" ) ]
-                                })                                                                                                                                                                                       
+                                names = [ new I18NText( "en-UK", "This is my end notification name" ),
+                                          new I18NText( "en-DK", "Dies ist mein ende anmeldung Name" ) ],
+                                subjects = [ new I18NText( "en-UK", "This is my end notification subject" ), 
+                                             new I18NText( "en-DK", "Das ist mein ende anmeldung Thema" ) ],
+                                descriptions = [new I18NText( "en-UK", "This is my end notification description" ),
+                                                new I18NText( "en-DK", "Das ist mein ende anmeldung Beschreibung" ) ]                                                                                                  
                             }) 
                         ],
                         reassignments = [

Copied: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service (from rev 21945, labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/server)


Property changes on: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service
___________________________________________________________________
Name: svn:mergeinfo
   + 

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/AllOpenTasks.txt
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/server/AllOpenTasks.txt	2008-08-28 04:10:14 UTC (rev 21945)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/AllOpenTasks.txt	2008-08-28 20:48:21 UTC (rev 21972)
@@ -19,9 +19,9 @@
     I18NText descriptions 
 where    
     t.taskData.actualOwner.id = :currentUser and
-    names in elements( t.taskPresentationElements.names) and
+    names in elements( t.names) and
     names.language = :language and
-    subjects in elements( t.taskPresentationElements.subjects) and
+    subjects in elements( t.subjects) and
     subjects.language = :language and
-    descriptions in elements( t.taskPresentationElements.descriptions) and
+    descriptions in elements( t.descriptions) and
     descriptions.language = :language
\ No newline at end of file




More information about the jboss-svn-commits mailing list