[jboss-svn-commits] JBL Code SVN: r22819 - in labs/jbossrules/trunk/drools-process/drools-process-task/src: main/java/org/drools/client and 7 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Sep 16 11:19:07 EDT 2008
Author: mark.proctor at jboss.com
Date: 2008-09-16 11:19:06 -0400 (Tue, 16 Sep 2008)
New Revision: 22819
Added:
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/KnowledgeBaseCommand.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/KnowledgeBaseCommandName.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/KnowledgeBaseHandler.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/MinaKnowledgeBaseClient.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServiceSession.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/orm.xml
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceDeadlinesTest.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/DeadlineWithNotification.mvel
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/DeadlineWithReassignment.mvel
Removed:
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsBusinessAdministrator.txt
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsExcludedOwner.txt
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsPotentialOwner.txt
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsRecipient.txt
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsTaskInitiator.txt
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsTaskStakeholder.txt
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksOwned.txt
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/UnescalatedDeadlines.txt
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEmailNotificationTest.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/Notification1.mvel
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/Task.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/DefaultEscalatedDeadlineHandler.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/SendIcal.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServerHandler.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskService.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/BaseTest.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/ModelPersistenceTest.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/QueryTest.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingEventResponseHandler.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/DemoTaskService.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/MockEventMessagingTest.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceCommentsAndAttachmentsTest.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEscalationTest.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEventMessagingTest.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceTest.java
Log:
JBRULES-1745 WS-Human-Task
-TaskService is now thread safe using TaskServiceSession
-Querries now use named querries.
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/KnowledgeBaseCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/KnowledgeBaseCommand.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/KnowledgeBaseCommand.java 2008-09-16 15:19:06 UTC (rev 22819)
@@ -0,0 +1,42 @@
+package org.drools.client;
+
+import java.io.Serializable;
+import java.util.List;
+
+public class KnowledgeBaseCommand implements Serializable {
+
+ private int id;
+
+ private KnowledgeBaseCommandName name;
+
+ private List<Object> arguments;
+
+ public KnowledgeBaseCommand(int id, KnowledgeBaseCommandName 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 KnowledgeBaseCommandName getName() {
+ return name;
+ }
+ public void setName(KnowledgeBaseCommandName 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/client/KnowledgeBaseCommandName.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/KnowledgeBaseCommandName.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/KnowledgeBaseCommandName.java 2008-09-16 15:19:06 UTC (rev 22819)
@@ -0,0 +1,6 @@
+package org.drools.client;
+
+
+public enum KnowledgeBaseCommandName {
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/KnowledgeBaseHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/KnowledgeBaseHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/KnowledgeBaseHandler.java 2008-09-16 15:19:06 UTC (rev 22819)
@@ -0,0 +1,48 @@
+package org.drools.client;
+
+import org.apache.mina.core.session.IoSession;
+import org.drools.task.service.BaseMinaHandler;
+import org.drools.task.service.MinaTaskClient;
+
+public class KnowledgeBaseHandler extends BaseMinaHandler {
+ private MinaTaskClient client;
+
+
+ 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();
+ if ( !session.isConnected() ) {
+ client.connect();
+ }
+ }
+
+ @Override
+ public void messageReceived(IoSession session,
+ Object message) throws Exception {
+ KnowledgeBaseCommand cmd = (KnowledgeBaseCommand) message;
+ switch ( cmd.getName() ) {
+// case : {
+// Task task = (Task) cmd.getArguments().get( 0 );
+// AddPackageResponseHandler responseHandler = (AddPackageResponseHandler) responseHandlers.remove( cmd.getId() );
+// if ( responseHandler != null ) {
+// responseHandler.execute( task );
+// }
+// break;
+// }
+ default : {
+
+ }
+ }
+ }
+
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/MinaKnowledgeBaseClient.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/MinaKnowledgeBaseClient.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/client/MinaKnowledgeBaseClient.java 2008-09-16 15:19:06 UTC (rev 22819)
@@ -0,0 +1,64 @@
+package org.drools.client;
+
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+
+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.eventmessaging.EventKey;
+import org.drools.eventmessaging.EventResponseHandler;
+import org.drools.task.AccessType;
+import org.drools.task.Attachment;
+import org.drools.task.Content;
+import org.drools.task.Comment;
+import org.drools.task.Task;
+import org.drools.task.User;
+import org.drools.task.service.BaseMinaClient;
+import org.drools.task.service.Command;
+import org.drools.task.service.CommandName;
+import org.drools.task.service.TaskClientHandler;
+import org.drools.task.service.TaskClientHandler.AddAttachmentResponseHandler;
+import org.drools.task.service.TaskClientHandler.AddCommentResponseHandler;
+import org.drools.task.service.TaskClientHandler.AddTaskResponseHandler;
+import org.drools.task.service.TaskClientHandler.GetContentResponseHandler;
+import org.drools.task.service.TaskClientHandler.GetTaskResponseHandler;
+import org.drools.task.service.TaskClientHandler.SetDocumentResponseHandler;
+import org.drools.task.service.TaskClientHandler.TaskSummaryResponseHandler;
+
+public class MinaKnowledgeBaseClient extends BaseMinaClient {
+
+ public MinaKnowledgeBaseClient(String name,
+ TaskClientHandler handler) {
+ super( name,
+ handler );
+ }
+
+ public void addPackage(Task task,
+ AddTaskResponseHandler responseHandler) {
+ List args = new ArrayList( 1 );
+ args.add( task );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.AddTaskRequest,
+ args );
+
+ handler.addResponseHandler( cmd.getId(),
+ responseHandler );
+
+ session.write( cmd );
+ }
+
+
+}
\ No newline at end of file
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-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Deadlines.java 2008-09-16 15:19:06 UTC (rev 22819)
@@ -44,7 +44,7 @@
this.startDeadlines = startDeadlines;
}
- public List<Deadline> getEndDeadLines() {
+ public List<Deadline> getEndDeadlines() {
return endDeadlines;
}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Task.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Task.java 2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Task.java 2008-09-16 15:19:06 UTC (rev 22819)
@@ -45,7 +45,6 @@
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "Task_Descriptions_Id", nullable = true)
- @Lob
private List<I18NText> descriptions = Collections.emptyList();
@@ -226,7 +225,9 @@
if ( !(obj instanceof Task) ) return false;
Task other = (Task) obj;
if ( deadlines == null ) {
- if ( other.deadlines != null ) return false;
+ if ( other.deadlines != null ) {
+
+ }
} else if ( !deadlines.equals( other.deadlines ) ) return false;
if ( delegation == null ) {
if ( other.delegation != null ) return false;
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/DefaultEscalatedDeadlineHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/DefaultEscalatedDeadlineHandler.java 2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/DefaultEscalatedDeadlineHandler.java 2008-09-16 15:19:06 UTC (rev 22819)
@@ -26,6 +26,7 @@
import org.drools.task.NotificationType;
import org.drools.task.OrganizationalEntity;
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;
@@ -115,34 +116,20 @@
for ( Notification notification : escalation.getNotifications() ) {
if ( notification.getNotificationType() == NotificationType.Email) {
executeEmailNotification( (EmailNotification) notification, task, em );
- }
- // I18NText name = null;
- // I18NText subject = null;
- // I18NText description = null;
- // for ( I18NText item : notification.getNames() ) {
- // if ( item.getLanguage().equals( language ) ) {
- // name = item;
- // break;
- // }
- // }
- // for ( I18NText item : notification.getSubjects() ) {
- // if ( item.getLanguage().equals( language ) ) {
- // subject = item;
- // break;
- // }
- // }
- // for ( I18NText item : notification.getDescriptions() ) {
- // if ( item.getLanguage().equals( language ) ) {
- // description = item;
- // break;
- // }
- // }
-
+ }
}
- for ( Reassignment reassignment : escalation.getReassignments() ) {
- //reassignment.g
- }
+
+ if ( !escalation.getReassignments().isEmpty()) {
+ // get first and ignore the rest.
+ Reassignment reassignment = escalation.getReassignments().get( 0 );
+ em.getTransaction().begin();
+ task.getTaskData().setStatus( Status.Ready );
+ List potentialOwners = new ArrayList( reassignment.getPotentialOwners() );
+ System.out.println( potentialOwners );
+ task.getPeopleAssignments().setPotentialOwners( potentialOwners );
+ em.getTransaction().commit();
+ }
}
em.getTransaction().begin();
deadline.setEscalated( true );
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/SendIcal.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/SendIcal.java 2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/SendIcal.java 2008-09-16 15:19:06 UTC (rev 22819)
@@ -105,7 +105,7 @@
}
// get latest end deadline
- List<Deadline> endDeadlines = task.getDeadlines().getEndDeadLines();
+ List<Deadline> endDeadlines = task.getDeadlines().getEndDeadlines();
Deadline end = null;
for ( Deadline deadline : endDeadlines ) {
if ( end == null || end.getDate().getTime() < deadline.getDate().getTime() ) {
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServerHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServerHandler.java 2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServerHandler.java 2008-09-16 15:19:06 UTC (rev 22819)
@@ -8,6 +8,8 @@
import java.util.List;
import java.util.Map;
+import javax.persistence.EntityManager;
+
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
@@ -20,7 +22,7 @@
import org.drools.task.query.TaskSummary;
public class TaskServerHandler extends IoHandlerAdapter {
- private TaskService service;
+ private TaskService service;
private Map<String, IoSession> clients;
public TaskServerHandler(TaskService service) {
@@ -38,245 +40,277 @@
public void messageReceived(IoSession session,
Object message) throws Exception {
Command cmd = (Command) message;
- switch ( cmd.getName() ) {
- case ClaimRequest : {
- long taskId = ( Long ) cmd.getArguments().get( 0 );
- String userId = ( String ) cmd.getArguments().get( 1 );
- service.claim( taskId, userId );
- break;
- }
- case StartRequest : {
- long taskId = ( Long ) cmd.getArguments().get( 0 );
- String userId = ( String ) cmd.getArguments().get( 1 );
- service.start( taskId, userId );
- break;
- }
- case StopRequest : {
- long taskId = ( Long ) cmd.getArguments().get( 0 );
- String userId = ( String ) cmd.getArguments().get( 1 );
- service.stop( taskId, userId );
- break;
- }
- case ReleaseRequest : {
- long taskId = ( Long ) cmd.getArguments().get( 0 );
- String userId = ( String ) cmd.getArguments().get( 1 );
- service.release( taskId, userId );
- break;
- }
- case SuspendRequest : {
- long taskId = ( Long ) cmd.getArguments().get( 0 );
- String userId = ( String ) cmd.getArguments().get( 1 );
- service.suspend( taskId, userId );
- break;
- }
- case ResumeRequest : {
- long taskId = ( Long ) cmd.getArguments().get( 0 );
- String userId = ( String ) cmd.getArguments().get( 1 );
- service.resume( taskId, userId );
- break;
- }
- case SkipRequest : {
- long taskId = ( Long ) cmd.getArguments().get( 0 );
- String userId = ( String ) cmd.getArguments().get( 1 );
- service.skip( taskId, userId );
- break;
- }
- case CompleteRequest : {
- long taskId = ( Long ) cmd.getArguments().get( 0 );
- String userId = ( String ) cmd.getArguments().get( 1 );
- service.complete( taskId, userId );
- break;
- }
- case FailRequest : {
- long taskId = ( Long ) cmd.getArguments().get( 0 );
- String userId = ( String ) cmd.getArguments().get( 1 );
- service.fail( taskId, userId );
- break;
- }
- case GetTaskRequest : {
- long taskId = ( Long ) cmd.getArguments().get( 0 );
- Task task = service.getTask( taskId );
- List args = new ArrayList( 1 );
- args.add( task );
- Command resultsCmnd = new Command( cmd.getId(),
- CommandName.GetTaskResponse,
- args );
- session.write( resultsCmnd );
- break;
- }
- case AddTaskRequest : {
- Task task = (Task) cmd.getArguments().get( 0 ) ;
- service.addTask( task );
-
- List args = new ArrayList( 1 );
- args.add( task.getId() );
- Command resultsCmnd = new Command( cmd.getId(),
- CommandName.AddTaskResponse,
- args );
- session.write( resultsCmnd );
- break;
- }
- case AddCommentRequest : {
- Comment comment = ( Comment ) cmd.getArguments().get( 1 );
- service.addComment( (Long) cmd.getArguments().get( 0 ), comment );
-
- List args = new ArrayList( 1 );
- args.add( comment.getId() );
- Command resultsCmnd = new Command( cmd.getId(),
- CommandName.AddCommentResponse,
- args );
- session.write( resultsCmnd );
- break;
- }
- case DeleteCommentRequest : {
- long taskId = ( Long ) cmd.getArguments().get( 0 );
- long commentId = ( Long ) cmd.getArguments().get( 1 );
- service.deleteComment( taskId, commentId );
- break;
- }
- case AddAttachmentRequest : {
- Attachment attachment = ( Attachment ) cmd.getArguments().get( 1 );
- Content content = ( Content ) cmd.getArguments().get( 2 );
- service.addAttachment( (Long) cmd.getArguments().get( 0 ), attachment, content );
-
- List args = new ArrayList( 2 );
- args.add( attachment.getId() );
- args.add( content.getId() );
- Command resultsCmnd = new Command( cmd.getId(),
- CommandName.AddAttachmentResponse,
- args );
- session.write( resultsCmnd );
- break;
- }
- case DeleteAttachmentRequest : {
- long taskId = ( Long ) cmd.getArguments().get( 0 );
- long attachmentId = ( Long ) cmd.getArguments().get( 1 );
- long contentId = ( Long ) cmd.getArguments().get( 2 );
- service.deleteAttachment( taskId, attachmentId, contentId );
- break;
- }
- case SetDocumentContentRequest : {
- long taskId = ( Long ) cmd.getArguments().get( 0 );
- Content content = ( Content ) cmd.getArguments().get( 1 );
- service.setDocumentContent( taskId, content );
-
- List args = new ArrayList( 1 );
- args.add( content.getId() );
- Command resultsCmnd = new Command( cmd.getId(),
- CommandName.SetDocumentContentResponse,
- args );
- session.write( resultsCmnd );
- break;
- }
- case GetContentRequest : {
- long contentId = ( Long ) cmd.getArguments().get( 0 );
- Content content = service.getContent( contentId );
- List args = new ArrayList( 1 );
- args.add( content );
- Command resultsCmnd = new Command( cmd.getId(),
- CommandName.GetContentResponse,
- args );
- session.write( resultsCmnd );
- break;
- }
- case QueryTasksOwned : {
- List<TaskSummary> results = service.getTasksOwned( (String) cmd.getArguments().get( 0 ),
- (String) cmd.getArguments().get( 1 ) );
- List args = new ArrayList( 1 );
- args.add( results );
- Command resultsCmnd = new Command( cmd.getId(),
- CommandName.QueryTaskSummaryResponse,
- args );
- session.write( resultsCmnd );
- break;
- }
- case QueryTasksAssignedAsBusinessAdministrator : {
- List<TaskSummary> results = service.getTasksAssignedAsBusinessAdministrator( (String) cmd.getArguments().get( 0 ),
+ TaskServiceSession taskSession = service.createSession();
+ try {
+ switch ( cmd.getName() ) {
+ case ClaimRequest : {
+ long taskId = (Long) cmd.getArguments().get( 0 );
+ String userId = (String) cmd.getArguments().get( 1 );
+ taskSession.claim( taskId,
+ userId );
+ break;
+ }
+ case StartRequest : {
+ long taskId = (Long) cmd.getArguments().get( 0 );
+ String userId = (String) cmd.getArguments().get( 1 );
+ taskSession.start( taskId,
+ userId );
+ break;
+ }
+ case StopRequest : {
+ long taskId = (Long) cmd.getArguments().get( 0 );
+ String userId = (String) cmd.getArguments().get( 1 );
+ taskSession.stop( taskId,
+ userId );
+ break;
+ }
+ case ReleaseRequest : {
+ long taskId = (Long) cmd.getArguments().get( 0 );
+ String userId = (String) cmd.getArguments().get( 1 );
+ taskSession.release( taskId,
+ userId );
+ break;
+ }
+ case SuspendRequest : {
+ long taskId = (Long) cmd.getArguments().get( 0 );
+ String userId = (String) cmd.getArguments().get( 1 );
+ taskSession.suspend( taskId,
+ userId );
+ break;
+ }
+ case ResumeRequest : {
+ long taskId = (Long) cmd.getArguments().get( 0 );
+ String userId = (String) cmd.getArguments().get( 1 );
+ taskSession.resume( taskId,
+ userId );
+ break;
+ }
+ case SkipRequest : {
+ long taskId = (Long) cmd.getArguments().get( 0 );
+ String userId = (String) cmd.getArguments().get( 1 );
+ taskSession.skip( taskId,
+ userId );
+ break;
+ }
+ case CompleteRequest : {
+ long taskId = (Long) cmd.getArguments().get( 0 );
+ String userId = (String) cmd.getArguments().get( 1 );
+ taskSession.complete( taskId,
+ userId );
+ break;
+ }
+ case FailRequest : {
+ long taskId = (Long) cmd.getArguments().get( 0 );
+ String userId = (String) cmd.getArguments().get( 1 );
+ taskSession.fail( taskId,
+ userId );
+ break;
+ }
+ case GetTaskRequest : {
+ long taskId = (Long) cmd.getArguments().get( 0 );
+ EntityManager em = service.getEntityManagerFactory().createEntityManager();
+ try {
+ Task task = taskSession.getTask( taskId );
+ List args = new ArrayList( 1 );
+ args.add( task );
+ Command resultsCmnd = new Command( cmd.getId(),
+ CommandName.GetTaskResponse,
+ args );
+ session.write( resultsCmnd );
+ } finally {
+ em.close();
+ }
+ break;
+ }
+ case AddTaskRequest : {
+ Task task = (Task) cmd.getArguments().get( 0 );
+ taskSession.addTask( task );
+
+ List args = new ArrayList( 1 );
+ args.add( task.getId() );
+ Command resultsCmnd = new Command( cmd.getId(),
+ CommandName.AddTaskResponse,
+ args );
+ session.write( resultsCmnd );
+ break;
+ }
+ case AddCommentRequest : {
+ Comment comment = (Comment) cmd.getArguments().get( 1 );
+ taskSession.addComment( (Long) cmd.getArguments().get( 0 ),
+ comment );
+
+ List args = new ArrayList( 1 );
+ args.add( comment.getId() );
+ Command resultsCmnd = new Command( cmd.getId(),
+ CommandName.AddCommentResponse,
+ args );
+ session.write( resultsCmnd );
+ break;
+ }
+ case DeleteCommentRequest : {
+ long taskId = (Long) cmd.getArguments().get( 0 );
+ long commentId = (Long) cmd.getArguments().get( 1 );
+ taskSession.deleteComment( taskId,
+ commentId );
+ break;
+ }
+ case AddAttachmentRequest : {
+ Attachment attachment = (Attachment) cmd.getArguments().get( 1 );
+ Content content = (Content) cmd.getArguments().get( 2 );
+ taskSession.addAttachment( (Long) cmd.getArguments().get( 0 ),
+ attachment,
+ content );
+
+ List args = new ArrayList( 2 );
+ args.add( attachment.getId() );
+ args.add( content.getId() );
+ Command resultsCmnd = new Command( cmd.getId(),
+ CommandName.AddAttachmentResponse,
+ args );
+ session.write( resultsCmnd );
+ break;
+ }
+ case DeleteAttachmentRequest : {
+ long taskId = (Long) cmd.getArguments().get( 0 );
+ long attachmentId = (Long) cmd.getArguments().get( 1 );
+ long contentId = (Long) cmd.getArguments().get( 2 );
+ taskSession.deleteAttachment( taskId,
+ attachmentId,
+ contentId );
+ break;
+ }
+ case SetDocumentContentRequest : {
+ long taskId = (Long) cmd.getArguments().get( 0 );
+ Content content = (Content) cmd.getArguments().get( 1 );
+ taskSession.setDocumentContent( taskId,
+ content );
+
+ List args = new ArrayList( 1 );
+ args.add( content.getId() );
+ Command resultsCmnd = new Command( cmd.getId(),
+ CommandName.SetDocumentContentResponse,
+ args );
+ session.write( resultsCmnd );
+ break;
+ }
+ case GetContentRequest : {
+ long contentId = (Long) cmd.getArguments().get( 0 );
+ Content content = taskSession.getContent( contentId );
+ List args = new ArrayList( 1 );
+ args.add( content );
+ Command resultsCmnd = new Command( cmd.getId(),
+ CommandName.GetContentResponse,
+ args );
+ session.write( resultsCmnd );
+ break;
+ }
+ case QueryTasksOwned : {
+ List<TaskSummary> results = taskSession.getTasksOwned( (String) cmd.getArguments().get( 0 ),
+ (String) cmd.getArguments().get( 1 ) );
+ List args = new ArrayList( 1 );
+ args.add( results );
+ Command resultsCmnd = new Command( cmd.getId(),
+ CommandName.QueryTaskSummaryResponse,
+ args );
+ session.write( resultsCmnd );
+ break;
+ }
+ case QueryTasksAssignedAsBusinessAdministrator : {
+ List<TaskSummary> results = taskSession.getTasksAssignedAsBusinessAdministrator( (String) cmd.getArguments().get( 0 ),
+ (String) cmd.getArguments().get( 1 ) );
+ List args = new ArrayList( 1 );
+ args.add( results );
+ Command resultsCmnd = new Command( cmd.getId(),
+ CommandName.QueryTaskSummaryResponse,
+ args );
+ session.write( resultsCmnd );
+ break;
+ }
+ case QueryTasksAssignedAsPotentialOwner : {
+ List<TaskSummary> results = taskSession.getTasksAssignedAsPotentialOwner( (String) cmd.getArguments().get( 0 ),
+ (String) cmd.getArguments().get( 1 ) );
+ List args = new ArrayList( 1 );
+ args.add( results );
+ Command resultsCmnd = new Command( cmd.getId(),
+ CommandName.QueryTaskSummaryResponse,
+ args );
+ session.write( resultsCmnd );
+ break;
+ }
+ case QueryTasksAssignedAsTaskInitiator : {
+ List<TaskSummary> results = taskSession.getTasksAssignedAsTaskInitiator( (String) cmd.getArguments().get( 0 ),
(String) cmd.getArguments().get( 1 ) );
- List args = new ArrayList( 1 );
- args.add( results );
- Command resultsCmnd = new Command( cmd.getId(),
- CommandName.QueryTaskSummaryResponse,
- args );
- session.write( resultsCmnd );
- break;
+ List args = new ArrayList( 1 );
+ args.add( results );
+ Command resultsCmnd = new Command( cmd.getId(),
+ CommandName.QueryTaskSummaryResponse,
+ args );
+ session.write( resultsCmnd );
+ break;
+ }
+ case QueryTasksAssignedAsExcludedOwner : {
+ List<TaskSummary> results = taskSession.getTasksAssignedAsExcludedOwner( (String) cmd.getArguments().get( 0 ),
+ (String) cmd.getArguments().get( 1 ) );
+ List args = new ArrayList( 1 );
+ args.add( results );
+ Command resultsCmnd = new Command( cmd.getId(),
+ CommandName.QueryTaskSummaryResponse,
+ args );
+ session.write( resultsCmnd );
+ break;
+ }
+ case QueryTasksAssignedAsRecipient : {
+ List<TaskSummary> results = taskSession.getTasksAssignedAsRecipient( (String) cmd.getArguments().get( 0 ),
+ (String) cmd.getArguments().get( 1 ) );
+ List args = new ArrayList( 1 );
+ args.add( results );
+ Command resultsCmnd = new Command( cmd.getId(),
+ CommandName.QueryTaskSummaryResponse,
+ args );
+ session.write( resultsCmnd );
+ break;
+ }
+ case QueryTasksAssignedAsTaskStakeholder : {
+ List<TaskSummary> results = taskSession.getTasksAssignedAsTaskStakeholder( (String) cmd.getArguments().get( 0 ),
+ (String) cmd.getArguments().get( 1 ) );
+ List args = new ArrayList( 1 );
+ args.add( results );
+ Command resultsCmnd = new Command( cmd.getId(),
+ CommandName.QueryTaskSummaryResponse,
+ args );
+ session.write( resultsCmnd );
+ break;
+ }
+ case RegisterForEventRequest : {
+ EventKey key = (EventKey) cmd.getArguments().get( 0 );
+ boolean remove = (Boolean) cmd.getArguments().get( 1 );
+ String uuid = (String) cmd.getArguments().get( 2 );
+ clients.put( uuid,
+ session );
+ MinaEventTransport transport = new MinaEventTransport( uuid,
+ cmd.getId(),
+ clients,
+ remove );
+ service.getEventKeys().register( key,
+ transport );
+ break;
+ }
+ case RegisterClient : {
+ String uuid = (String) cmd.getArguments().get( 0 );
+ clients.put( uuid,
+ session );
+ break;
+ }
+ default : {
+ // unknown command
+ }
}
- case QueryTasksAssignedAsPotentialOwner : {
- List<TaskSummary> results = service.getTasksAssignedAsPotentialOwner( (String) cmd.getArguments().get( 0 ),
- (String) cmd.getArguments().get( 1 ) );
- List args = new ArrayList( 1 );
- args.add( results );
- Command resultsCmnd = new Command( cmd.getId(),
- CommandName.QueryTaskSummaryResponse,
- args );
- session.write( resultsCmnd );
- break;
- }
- case QueryTasksAssignedAsTaskInitiator : {
- List<TaskSummary> results = service.getTasksAssignedAsTaskInitiator( (String) cmd.getArguments().get( 0 ),
- (String) cmd.getArguments().get( 1 ) );
- List args = new ArrayList( 1 );
- args.add( results );
- Command resultsCmnd = new Command( cmd.getId(),
- CommandName.QueryTaskSummaryResponse,
- args );
- session.write( resultsCmnd );
- break;
- }
- case QueryTasksAssignedAsExcludedOwner : {
- List<TaskSummary> results = service.getTasksAssignedAsExcludedOwner( (String) cmd.getArguments().get( 0 ),
- (String) cmd.getArguments().get( 1 ) );
- List args = new ArrayList( 1 );
- args.add( results );
- Command resultsCmnd = new Command( cmd.getId(),
- CommandName.QueryTaskSummaryResponse,
- args );
- session.write( resultsCmnd );
- break;
- }
- case QueryTasksAssignedAsRecipient : {
- List<TaskSummary> results = service.getTasksAssignedAsRecipient( (String) cmd.getArguments().get( 0 ),
- (String) cmd.getArguments().get( 1 ) );
- List args = new ArrayList( 1 );
- args.add( results );
- Command resultsCmnd = new Command( cmd.getId(),
- CommandName.QueryTaskSummaryResponse,
- args );
- session.write( resultsCmnd );
- break;
- }
- case QueryTasksAssignedAsTaskStakeholder : {
- List<TaskSummary> results = service.getTasksAssignedAsTaskStakeholder( (String) cmd.getArguments().get( 0 ),
- (String) cmd.getArguments().get( 1 ) );
- List args = new ArrayList( 1 );
- args.add( results );
- Command resultsCmnd = new Command( cmd.getId(),
- CommandName.QueryTaskSummaryResponse,
- args );
- session.write( resultsCmnd );
- break;
- }
- case RegisterForEventRequest : {
- EventKey key = ( EventKey ) cmd.getArguments().get( 0 );
- boolean remove = ( Boolean ) cmd.getArguments().get( 1 );
- String uuid = ( String ) cmd.getArguments().get( 2 );
- clients.put( uuid, session );
- MinaEventTransport transport = new MinaEventTransport(uuid, cmd.getId(), clients, remove );
- service.getEventKeys().register( key, transport );
- break;
- }
- case RegisterClient : {
- String uuid = ( String ) cmd.getArguments().get( 0 );
- clients.put( uuid, session );
- break;
- }
- default : {
- // unknown command
- }
+
+ Date date = new Date();
+ System.out.println( "Message written : " + cmd.getName() + " : " + date );
+ } finally {
+ taskSession.dispose();
}
-
- Date date = new Date();
- System.out.println( "Message written : " + cmd.getName() + " : " + date );
}
@Override
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskService.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskService.java 2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskService.java 2008-09-16 15:19:06 UTC (rev 22819)
@@ -1,12 +1,7 @@
package org.drools.task.service;
import java.io.IOException;
-import java.io.InputStreamReader;
import java.io.Reader;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Iterator;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ScheduledThreadPoolExecutor;
@@ -14,47 +9,20 @@
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
-import javax.persistence.Query;
-import org.drools.event.WorkingMemoryEventListener;
import org.drools.eventmessaging.EventKeys;
-import org.drools.task.AccessType;
-import org.drools.task.Attachment;
-import org.drools.task.Content;
-import org.drools.task.Comment;
import org.drools.task.Deadline;
-import org.drools.task.Group;
-import org.drools.task.OrganizationalEntity;
-import org.drools.task.PeopleAssignments;
-import org.drools.task.Status;
import org.drools.task.Task;
-import org.drools.task.TaskData;
-import org.drools.task.User;
import org.drools.task.UserInfo;
import org.drools.task.event.MessagingTaskEventListener;
import org.drools.task.event.TaskEventListener;
import org.drools.task.event.TaskEventSupport;
import org.drools.task.query.DeadlineSummary;
-import org.drools.task.query.TaskSummary;
-import sun.misc.resources.Messages_zh_TW;
-
public class TaskService {
EntityManagerFactory emf;
-
- //@TODO we should not be re-using the same em, create as needed (but have issues with closing the em while returned objects are still in use
EntityManager em;
- //@TODO these should all be named querries
- Query tasksAssignedAsBusinessAdministrator;
- Query tasksAssignedAsExcludedOwner;
- Query tasksAssignedAsPotentialOwner;
- Query tasksAssignedAsRecipient;
- Query tasksAssignedAsTaskInitiator;
- Query tasksAssignedAsTaskStakeholder;
- Query tasksOwned;
- Query unescalatedDeadlines;
-
ScheduledThreadPoolExecutor scheduler;
private EscalatedDeadlineHandler escalatedDeadlineHandler;
@@ -66,57 +34,35 @@
public TaskService(EntityManagerFactory emf) {
this.emf = emf;
- em = emf.createEntityManager();
+ this.em = emf.createEntityManager();
eventSupport = new TaskEventSupport();
eventKeys = new EventKeys();
eventSupport.addEventListener( new MessagingTaskEventListener( eventKeys ) );
-
- try {
- Reader reader = new InputStreamReader( getClass().getResourceAsStream( "TasksOwned.txt" ) );
- tasksOwned = em.createQuery( toString( reader ) );
-
- reader = new InputStreamReader( getClass().getResourceAsStream( "TasksAssignedAsBusinessAdministrator.txt" ) );
- tasksAssignedAsBusinessAdministrator = em.createQuery( toString( reader ) );
-
- reader = new InputStreamReader( getClass().getResourceAsStream( "TasksAssignedAsExcludedOwner.txt" ) );
- tasksAssignedAsExcludedOwner = em.createQuery( toString( reader ) );
-
- reader = new InputStreamReader( getClass().getResourceAsStream( "TasksAssignedAsPotentialOwner.txt" ) );
- tasksAssignedAsPotentialOwner = em.createQuery( toString( reader ) );
-
- reader = new InputStreamReader( getClass().getResourceAsStream( "TasksAssignedAsRecipient.txt" ) );
- tasksAssignedAsRecipient = em.createQuery( toString( reader ) );
-
- reader = new InputStreamReader( getClass().getResourceAsStream( "TasksAssignedAsTaskInitiator.txt" ) );
- tasksAssignedAsTaskInitiator = em.createQuery( toString( reader ) );
-
- reader = new InputStreamReader( getClass().getResourceAsStream( "TasksAssignedAsTaskStakeholder.txt" ) );
- tasksAssignedAsTaskStakeholder = em.createQuery( toString( reader ) );
- } catch ( IOException e ) {
- throw new RuntimeException( "Unable to inialize TaskService.",
- e );
- }
scheduler = new ScheduledThreadPoolExecutor( 3 );
- try {
- Reader reader = new InputStreamReader( getClass().getResourceAsStream( "UnescalatedDeadlines.txt" ) );
- unescalatedDeadlines = em.createQuery( toString( reader ) );
- long now = System.currentTimeMillis();
- for ( Object object : unescalatedDeadlines.getResultList() ) {
- DeadlineSummary summary = (DeadlineSummary) object;
- scheduler.schedule( new ScheduledTaskDeadline( summary.getTaskId(),
- summary.getDeadlineId(),
- this ),
- summary.getDate().getTime() - now,
- TimeUnit.MILLISECONDS );
- }
- } catch ( IOException e ) {
- throw new RuntimeException( "Unable to inialize TaskService, could not load and schedule oustanding deadlines",
- e );
+ long now = System.currentTimeMillis();
+ for ( Object object : em.createNamedQuery( "UnescalatedDeadlines" ).getResultList() ) {
+ DeadlineSummary summary = (DeadlineSummary) object;
+ schedule( new ScheduledTaskDeadline( summary.getTaskId(),
+ summary.getDeadlineId(),
+ this ),
+ summary.getDate().getTime() - now );
}
}
+ public TaskServiceSession createSession() {
+ return new TaskServiceSession( this,
+ emf.createEntityManager() );
+ }
+
+ public void schedule(ScheduledTaskDeadline deadline,
+ long delay) {
+ scheduler.schedule( deadline,
+ delay,
+ TimeUnit.MILLISECONDS );
+ }
+
public EventKeys getEventKeys() {
return eventKeys;
}
@@ -133,6 +79,10 @@
return this.eventSupport.getEventListeners();
}
+ public TaskEventSupport getEventSupport() {
+ return eventSupport;
+ }
+
public UserInfo getUserinfo() {
return userInfo;
}
@@ -153,546 +103,6 @@
this.escalatedDeadlineHandler = escalatedDeadlineHandler;
}
- public void addUser(User user) {
- em.getTransaction().begin();
- em.persist( user );
- em.getTransaction().commit();
- }
-
- public void addGroup(Group group) {
- em.getTransaction().begin();
- em.persist( group );
- em.getTransaction().commit();
- }
-
- public void addTask(Task task) {
-
- TaskData taskData = task.getTaskData();
- // new tasks start off with status created
- taskData.setStatus( Status.Created );
-
- if ( task.getPeopleAssignments() != null ) {
- List potentialOwners = task.getPeopleAssignments().getPotentialOwners();
- if ( potentialOwners.size() == 1 ) {
- // if there is a single potential owner, assign and set status to Reserved
- taskData.setActualOwner( (User) potentialOwners.get( 0 ) );
- taskData.setStatus( Status.Reserved );
- } else if ( potentialOwners.size() > 1 ) {
- // multiple potential owners, so set to Ready so one can claim.
- taskData.setStatus( Status.Ready );
- } else {
- //@TODO we have no potential owners
- }
- } else {
- //@TODO we have no potential owners
- }
-
- // set the CreatedOn date if it's not already set
- if ( taskData.getCreatedOn() == null ) {
- taskData.setCreatedOn( new Date() );
- }
-
- //@FIXME for now we activate on creation, unless date is supplied
- if ( taskData.getActivationTime() == null ) {
- taskData.setActivationTime( taskData.getCreatedOn() );
- }
-
- em.getTransaction().begin();
- em.persist( task );
- em.getTransaction().commit();
- long now = System.currentTimeMillis();
- // schedule after it's been persisted, otherwise the id's won't be assigned
- if ( task.getDeadlines() != null ) {
- if ( task.getDeadlines().getStartDeadlines() != null ) {
- for ( Deadline deadline : task.getDeadlines().getStartDeadlines() ) {
- if ( !deadline.isEscalated() ) {
- // only escalate when true - typically this would only be true
- // if the user is requested that the notification should never be escalated
- Date date = deadline.getDate();
- scheduler.schedule( new ScheduledTaskDeadline( task.getId(),
- deadline.getId(),
- this ),
- date.getTime() - now,
- TimeUnit.MILLISECONDS );
- }
- }
- }
-
- if ( task.getDeadlines().getEndDeadLines() != null ) {
- for ( Deadline deadline : task.getDeadlines().getEndDeadLines() ) {
- // only escalate when true - typically this would only be true
- // if the user is requested that the notification should never be escalated
- if ( !deadline.isEscalated() ) {
- Date date = deadline.getDate();
- scheduler.schedule( new ScheduledTaskDeadline( task.getId(),
- deadline.getId(),
- this ),
- date.getTime() - now,
- TimeUnit.MILLISECONDS );
- }
- }
- }
- }
-
- if ( task.getTaskData().getStatus() == Status.Reserved ) {
- // Task was reserved so owner should get icals
- SendIcal.getInstance().sendIcalForTask( task,
- userInfo );
-
- // trigger event support
- eventSupport.fireTaskClaimed( task.getId(),
- task.getTaskData().getActualOwner().getId() );
- }
- }
-
- public void claim(long taskId,
- String userId) {
- Task task = em.find( Task.class,
- taskId );
-
- User user = em.find( User.class,
- userId );
-
- TaskData taskData = task.getTaskData();
-
- //task must be in status Ready
- if ( taskData.getStatus() == Status.Ready ) {
- // check permissions
- PeopleAssignments people = task.getPeopleAssignments();
- if ( isAllowed( user,
- new List[]{people.getPotentialOwners(), people.getBusinessAdministrators()} ) ) {
- em.getTransaction().begin();
- // only potential owners and business admin can claim a task
- taskData.setStatus( Status.Reserved );
- taskData.setActualOwner( user );
- em.getTransaction().commit();
-
- // Task was reserved so owner should get icals
- SendIcal.getInstance().sendIcalForTask( task,
- userInfo );
-
- // trigger event support
- eventSupport.fireTaskClaimed( task.getId(),
- task.getTaskData().getActualOwner().getId() );
- } else {
- // @TODO Error
- }
- } else {
- // @TODO Error
- }
- }
-
- public void start(long taskId,
- String userId) {
- Task task = em.find( Task.class,
- taskId );
-
- User user = em.find( User.class,
- userId );
-
- TaskData taskData = task.getTaskData();
-
- // Status must be Read or Reserved
- if ( taskData.getStatus() == Status.Ready ) {
- // if Ready must be potentialOwner
- PeopleAssignments people = task.getPeopleAssignments();
- if ( isAllowed( user,
- new List[]{people.getPotentialOwners()} ) ) {
- em.getTransaction().begin();
- taskData.setActualOwner( user );
- taskData.setStatus( Status.InProgress );
- em.getTransaction().commit();
- } else {
- // @TODO Error
- }
- } else if ( taskData.getStatus() == Status.Reserved ) {
- // if Reserved must be actual owner
- if ( taskData.getActualOwner().getId().equals( user.getId() ) ) {
- em.getTransaction().begin();
- taskData.setStatus( Status.InProgress );
- em.getTransaction().commit();
- } else {
- // @TODO Error
- }
- } else {
- // @TODO Error
- return;
- }
- }
-
- public void stop(long taskId,
- String userId) {
- Task task = em.find( Task.class,
- taskId );
-
- User user = em.find( User.class,
- userId );
-
- TaskData taskData = task.getTaskData();
-
- PeopleAssignments people = task.getPeopleAssignments();
- if ( taskData.getStatus() == Status.InProgress && (taskData.getActualOwner().getId().equals( user.getId() ) || isAllowed( user,
- new List[]{people.getBusinessAdministrators()} )) ) {
- // Status must be InProgress and actual owner, switch to Reserved
- em.getTransaction().begin();
- taskData.setStatus( Status.Reserved );
- em.getTransaction().commit();
- } else {
- // @TODO Error
- return;
- }
- }
-
- public void release(long taskId,
- String userId) {
- Task task = em.find( Task.class,
- taskId );
-
- User user = em.find( User.class,
- userId );
-
- TaskData taskData = task.getTaskData();
-
- // task must be reserved or in progress and owned by user
- PeopleAssignments people = task.getPeopleAssignments();
- if ( (taskData.getStatus() == Status.Reserved || taskData.getStatus() == Status.InProgress) && (taskData.getActualOwner().getId().equals( user.getId() ) || isAllowed( user,
- new List[]{people.getBusinessAdministrators()} )) ) {
- em.getTransaction().begin();
- taskData.setStatus( Status.Ready );
- taskData.setActualOwner( null );
- em.getTransaction().commit();
- } else {
- //@TODO Error
- }
- }
-
- public void suspend(long taskId,
- String userId) {
- Task task = em.find( Task.class,
- taskId );
-
- User user = em.find( User.class,
- userId );
-
- TaskData taskData = task.getTaskData();
-
- List[] allowed;
- PeopleAssignments people = task.getPeopleAssignments();
- if ( taskData.getStatus() == Status.Ready ) {
- // If it's ready then potential owners can suspect too
- allowed = new List[]{people.getPotentialOwners(), people.getBusinessAdministrators()};
- } else {
- allowed = new List[]{people.getBusinessAdministrators()};
- }
-
- if ( (taskData.getStatus() == Status.Ready || taskData.getStatus() == Status.Reserved || taskData.getStatus() == Status.InProgress)
- && ((taskData.getActualOwner() != null && taskData.getActualOwner().getId().equals( user.getId()) ) || isAllowed( user,
- allowed )) ) {
- em.getTransaction().begin();
- taskData.setStatus( Status.Suspended );
- em.getTransaction().commit();
- } else {
- //@TODO Error
- }
- }
-
- public void resume(long taskId,
- String userId) {
- Task task = em.find( Task.class,
- taskId );
-
- User user = em.find( User.class,
- userId );
-
- TaskData taskData = task.getTaskData();
-
- List[] allowed;
- PeopleAssignments people = task.getPeopleAssignments();
- if ( taskData.getPreviousStatus() == Status.Ready ) {
- // If it's ready then potential owners can suspect too
- allowed = new List[]{people.getPotentialOwners(), people.getBusinessAdministrators()};
- } else {
- allowed = new List[]{people.getBusinessAdministrators()};
- }
-
- if ( (taskData.getStatus() == Status.Suspended) && ((taskData.getActualOwner() != null && taskData.getActualOwner().getId().equals( user.getId()) ) || isAllowed( user,
- allowed )) ) {
- em.getTransaction().begin();
- taskData.setStatus( taskData.getPreviousStatus() );
- em.getTransaction().commit();
- } else {
- //@TODO Error
- }
- }
-
- public void skip(long taskId,
- String userId) {
- Task task = em.find( Task.class,
- taskId );
-
- User user = em.find( User.class,
- userId );
-
- TaskData taskData = task.getTaskData();
-
- List[] allowed;
- PeopleAssignments people = task.getPeopleAssignments();
- if ( taskData.getStatus() == Status.Ready ) {
- // If it's ready then potential owners can skip too
- allowed = new List[]{people.getPotentialOwners(), people.getBusinessAdministrators()};
- } else {
- allowed = new List[]{people.getBusinessAdministrators()};
- }
-
- if ( task.getTaskData().isSkipable() && (taskData.getStatus() != Status.Completed && taskData.getStatus() != Status.Failed) && ((taskData.getActualOwner() != null && taskData.getActualOwner().getId().equals( user.getId()) ) || isAllowed( user,
- allowed )) ) {
- em.getTransaction().begin();
- taskData.setStatus( Status.Obselete );
- em.getTransaction().commit();
- } else {
- //@TODO Error
- }
- }
-
- public void complete(long taskId,
- String userId) {
- Task task = em.find( Task.class,
- taskId );
-
- User user = em.find( User.class,
- userId );
-
- TaskData taskData = task.getTaskData();
-
- if ( taskData.getStatus() == Status.InProgress && taskData.getActualOwner().getId().equals( user.getId() ) ) {
- // Status must be InProgress and actual owner, switch to Reserved
- em.getTransaction().begin();
- taskData.setStatus( Status.Completed );
- em.getTransaction().commit();
- } else {
- // @TODO Error
- return;
- }
- }
-
- public void fail(long taskId,
- String userId) {
- Task task = em.find( Task.class,
- taskId );
-
- User user = em.find( User.class,
- userId );
-
- TaskData taskData = task.getTaskData();
-
- if ( taskData.getStatus() == Status.InProgress && taskData.getActualOwner().getId().equals( user.getId() ) ) {
- // Status must be InProgress and actual owner, switch to Reserved
- em.getTransaction().begin();
- taskData.setStatus( Status.Failed );
- em.getTransaction().commit();
- } else {
- // @TODO Error
- return;
- }
- }
-
- public void addComment(long taskId,
- Comment comment) {
- Task task = em.find( Task.class,
- taskId );
- if ( task == null ) {
- // throw some exception
- }
-
- em.getTransaction().begin();
-
- List<Comment> list = task.getTaskData().getComments();
- if ( list == null || list == Collections.<Comment> emptyList() ) {
- list = new ArrayList<Comment>( 1 );
- task.getTaskData().setComments( list );
- }
-
- list.add( comment );
-
- em.getTransaction().commit();
- }
-
- public void addAttachment(long taskId,
- Attachment attachment,
- Content content) {
- Task task = em.find( Task.class,
- taskId );
-
- if ( task == null ) {
- // throw some exception
- }
-
- em.getTransaction().begin();
-
- em.persist( content );
- attachment.setSize( content.getContent().length );
- attachment.setAttachmentContentId( content.getId() );
-
- List<Attachment> list = task.getTaskData().getAttachments();
- if ( list == null || list == Collections.<Attachment> emptyList() ) {
- list = new ArrayList<Attachment>( 1 );
- task.getTaskData().setAttachments( list );
- }
-
- list.add( attachment );
- em.getTransaction().commit();
- }
-
- public void setDocumentContent(long taskId,
- Content content) {
- Task task = em.find( Task.class,
- taskId );
-
- if ( task == null ) {
- // throw some exception
- }
-
- em.getTransaction().begin();
-
- em.persist( content );
-
- task.getTaskData().setDocumentContentId( content.getId() );
-
- em.getTransaction().commit();
- }
-
- public Content getContent(long contentId) {
- Content content = em.find( Content.class,
- contentId );
- return content;
- }
-
- public void deleteAttachment(long taskId,
- long attachmentId,
- long contentId) {
- // @TODO I can't get this to work with HQL deleting the Attachment. Hibernate needs both the item removed from the collection
- // and also the item deleted, so for now have to load the entire Task, I suspect that this is due to using the same EM which
- // is caching things.
- Task task = em.find( Task.class,
- taskId );
-
- em.getTransaction().begin();
- for ( Iterator<Attachment> it = task.getTaskData().getAttachments().iterator(); it.hasNext(); ) {
- Attachment attachment = it.next();
- if ( attachment.getId() == attachmentId ) {
- it.remove();
- em.remove( attachment ); // need to do this otherwise it just removes the link id, without removing the attachment
- break;
- }
- }
-
- // we do this as HQL to avoid streaming in the entire HQL
- String deleteContent = "delete from Content where id = :id";
- em.createQuery( deleteContent ).setParameter( "id",
- contentId ).executeUpdate();
-
- em.getTransaction().commit();
- }
-
- public void deleteComment(long taskId,
- long commentId) {
- // @TODO I can't get this to work with HQL deleting the Comment. Hibernate needs both the item removed from the collection
- // and also the item deleted, so for now have to load the entire Task, I suspect that this is due to using the same EM which
- // is caching things.
- Task task = em.find( Task.class,
- taskId );
- em.getTransaction().begin();
- for ( Iterator<Comment> it = task.getTaskData().getComments().iterator(); it.hasNext(); ) {
- Comment comment = it.next();
- if ( comment.getId() == commentId ) {
- it.remove();
- em.remove( comment ); // need to do this otherwise it just removes the link id, without removing the comment
- break;
- }
- }
- em.getTransaction().commit();
- }
-
- public Task getTask(long taskId) {
- Task task = em.find( Task.class,
- taskId );
- return task;
- }
-
- public List<DeadlineSummary> getUnescalatedDeadlines() {
- return (List<DeadlineSummary>) unescalatedDeadlines.getResultList();
- }
-
- public List<TaskSummary> getTasksOwned(String userId,
- String language) {
- tasksOwned.setParameter( "userId",
- userId );
- tasksOwned.setParameter( "language",
- language );
- List<TaskSummary> list = (List<TaskSummary>) tasksOwned.getResultList();
- return list;
- }
-
- public List<TaskSummary> getTasksAssignedAsBusinessAdministrator(String userId,
- String language) {
- tasksAssignedAsBusinessAdministrator.setParameter( "userId",
- userId );
- tasksAssignedAsBusinessAdministrator.setParameter( "language",
- language );
- List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsBusinessAdministrator.getResultList();
- return list;
- }
-
- public List<TaskSummary> getTasksAssignedAsExcludedOwner(String userId,
- String language) {
- tasksAssignedAsExcludedOwner.setParameter( "userId",
- userId );
- tasksAssignedAsExcludedOwner.setParameter( "language",
- language );
- List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsExcludedOwner.getResultList();
- return list;
- }
-
- public List<TaskSummary> getTasksAssignedAsPotentialOwner(String userId,
- String language) {
- tasksAssignedAsPotentialOwner.setParameter( "userId",
- userId );
- tasksAssignedAsPotentialOwner.setParameter( "language",
- language );
- List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsPotentialOwner.getResultList();
- return list;
- }
-
- public List<TaskSummary> getTasksAssignedAsRecipient(String userId,
- String language) {
- tasksAssignedAsRecipient.setParameter( "userId",
- userId );
- tasksAssignedAsRecipient.setParameter( "language",
- language );
- List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsRecipient.getResultList();
- return list;
- }
-
- public List<TaskSummary> getTasksAssignedAsTaskInitiator(String userId,
- String language) {
- tasksAssignedAsTaskInitiator.setParameter( "userId",
- userId );
- tasksAssignedAsTaskInitiator.setParameter( "language",
- language );
- List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsTaskInitiator.getResultList();
- return list;
- }
-
- public List<TaskSummary> getTasksAssignedAsTaskStakeholder(String userId,
- String language) {
- tasksAssignedAsTaskStakeholder.setParameter( "userId",
- userId );
- tasksAssignedAsTaskStakeholder.setParameter( "language",
- language );
- List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsTaskStakeholder.getResultList();
- return list;
- }
-
public void executeEscalatedDeadline(long taskId,
long deadlineId) {
EntityManager localEm = emf.createEntityManager();
@@ -712,28 +122,6 @@
localEm.close();
}
- public boolean isAllowed(User user,
- List<OrganizationalEntity>[] people) {
- for ( List<OrganizationalEntity> list : people ) {
- if ( isAllowed( user,
- list ) ) {
- return true;
- }
- }
- return false;
- }
-
- public boolean isAllowed(User user,
- List<OrganizationalEntity> entities) {
- // for now just do a contains, I'll figure out group membership later.
- for ( OrganizationalEntity entity : entities ) {
- if ( entity.getId().equals( user.getId() ) ) {
- return true;
- }
- }
- return false;
- }
-
public static String toString(Reader reader) throws IOException {
int charValue = 0;
StringBuffer sb = new StringBuffer( 1024 );
@@ -768,8 +156,12 @@
}
public Object call() throws Exception {
- service.executeEscalatedDeadline( taskId,
- deadlineId );
+ try {
+ service.executeEscalatedDeadline( taskId,
+ deadlineId );
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ }
return null;
}
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServiceSession.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServiceSession.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServiceSession.java 2008-09-16 15:19:06 UTC (rev 22819)
@@ -0,0 +1,668 @@
+package org.drools.task.service;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+
+import org.drools.task.Attachment;
+import org.drools.task.Comment;
+import org.drools.task.Content;
+import org.drools.task.Deadline;
+import org.drools.task.Delegation;
+import org.drools.task.Group;
+import org.drools.task.OrganizationalEntity;
+import org.drools.task.PeopleAssignments;
+import org.drools.task.Status;
+import org.drools.task.Task;
+import org.drools.task.TaskData;
+import org.drools.task.User;
+import org.drools.task.query.DeadlineSummary;
+import org.drools.task.query.TaskSummary;
+import org.drools.task.service.TaskService.ScheduledTaskDeadline;
+
+public class TaskServiceSession {
+ TaskService service;
+ EntityManager em;
+
+ public TaskServiceSession(TaskService service,
+ EntityManager em) {
+ this.service = service;
+ this.em = em;
+ }
+
+ public void dispose() {
+ em.close();
+ }
+
+ public EntityManager getEntityManager() {
+ return em;
+ }
+
+ public void addUser(User user) {
+ em.getTransaction().begin();
+ em.persist( user );
+ em.getTransaction().commit();
+ }
+
+ public void addGroup(Group group) {
+ em.getTransaction().begin();
+ em.persist( group );
+ em.getTransaction().commit();
+ }
+
+ public void addTask(Task task) {
+ TaskData taskData = task.getTaskData();
+ // new tasks start off with status created
+ taskData.setStatus( Status.Created );
+
+ if ( task.getPeopleAssignments() != null ) {
+ List potentialOwners = task.getPeopleAssignments().getPotentialOwners();
+ if ( potentialOwners.size() == 1 ) {
+ // if there is a single potential owner, assign and set status to Reserved
+ taskData.setActualOwner( (User) potentialOwners.get( 0 ) );
+ taskData.setStatus( Status.Reserved );
+ } else if ( potentialOwners.size() > 1 ) {
+ // multiple potential owners, so set to Ready so one can claim.
+ taskData.setStatus( Status.Ready );
+ } else {
+ //@TODO we have no potential owners
+ }
+ } else {
+ //@TODO we have no potential owners
+ }
+
+ // set the CreatedOn date if it's not already set
+ if ( taskData.getCreatedOn() == null ) {
+ taskData.setCreatedOn( new Date() );
+ }
+
+ //@FIXME for now we activate on creation, unless date is supplied
+ if ( taskData.getActivationTime() == null ) {
+ taskData.setActivationTime( taskData.getCreatedOn() );
+ }
+
+ em.getTransaction().begin();
+ em.persist( task );
+ em.getTransaction().commit();
+ long now = System.currentTimeMillis();
+ // schedule after it's been persisted, otherwise the id's won't be assigned
+ if ( task.getDeadlines() != null ) {
+ if ( task.getDeadlines().getStartDeadlines() != null ) {
+ for ( Deadline deadline : task.getDeadlines().getStartDeadlines() ) {
+ if ( !deadline.isEscalated() ) {
+ // only escalate when true - typically this would only be true
+ // if the user is requested that the notification should never be escalated
+ Date date = deadline.getDate();
+ service.schedule( new ScheduledTaskDeadline( task.getId(),
+ deadline.getId(),
+ service ),
+ date.getTime() - now );
+ }
+ }
+ }
+
+ if ( task.getDeadlines().getEndDeadlines() != null ) {
+ for ( Deadline deadline : task.getDeadlines().getEndDeadlines() ) {
+ // only escalate when true - typically this would only be true
+ // if the user is requested that the notification should never be escalated
+ if ( !deadline.isEscalated() ) {
+ Date date = deadline.getDate();
+ service.schedule( new ScheduledTaskDeadline( task.getId(),
+ deadline.getId(),
+ service ),
+ date.getTime() - now );
+ }
+ }
+ }
+ }
+
+ if ( task.getTaskData().getStatus() == Status.Reserved ) {
+ // Task was reserved so owner should get icals
+ SendIcal.getInstance().sendIcalForTask( task,
+ service.getUserinfo() );
+
+ // trigger event support
+ service.getEventSupport().fireTaskClaimed( task.getId(),
+ task.getTaskData().getActualOwner().getId() );
+ }
+ }
+
+ public void claim(long taskId,
+ String userId) {
+ Task task = em.find( Task.class,
+ taskId );
+
+ User user = em.find( User.class,
+ userId );
+ em.getTransaction().begin();
+ claim(task, user);
+ em.getTransaction().commit();
+ }
+
+ public void claim(Task task,
+ User user) {
+ TaskData taskData = task.getTaskData();
+
+ //task must be in status Ready
+ if ( taskData.getStatus() == Status.Ready ) {
+ // check permissions
+ PeopleAssignments people = task.getPeopleAssignments();
+ if ( isAllowed( user,
+ new List[]{people.getPotentialOwners(), people.getBusinessAdministrators()} ) ) {
+ // only potential owners and business admin can claim a task
+ taskData.setStatus( Status.Reserved );
+ taskData.setActualOwner( user );
+
+ // Task was reserved so owner should get icals
+ SendIcal.getInstance().sendIcalForTask( task,
+ service.getUserinfo() );
+
+ // trigger event support
+ service.getEventSupport().fireTaskClaimed( task.getId(),
+ task.getTaskData().getActualOwner().getId() );
+ } else {
+ // @TODO Error
+ }
+ } else {
+ // @TODO Error
+ }
+ }
+
+ public void start(long taskId,
+ String userId) {
+ Task task = em.find( Task.class,
+ taskId );
+
+ User user = em.find( User.class,
+ userId );
+
+ TaskData taskData = task.getTaskData();
+
+ // Status must be Read or Reserved
+ if ( taskData.getStatus() == Status.Ready ) {
+ // if Ready must be potentialOwner
+ PeopleAssignments people = task.getPeopleAssignments();
+ if ( isAllowed( user,
+ new List[]{people.getPotentialOwners()} ) ) {
+ em.getTransaction().begin();
+ taskData.setActualOwner( user );
+ taskData.setStatus( Status.InProgress );
+ em.getTransaction().commit();
+ } else {
+ // @TODO Error
+ }
+ } else if ( taskData.getStatus() == Status.Reserved ) {
+ // if Reserved must be actual owner
+ if ( taskData.getActualOwner().getId().equals( user.getId() ) ) {
+ em.getTransaction().begin();
+ taskData.setStatus( Status.InProgress );
+ em.getTransaction().commit();
+ } else {
+ // @TODO Error
+ }
+ } else {
+ // @TODO Error
+ return;
+ }
+ }
+
+ public void stop(long taskId,
+ String userId) {
+ Task task = em.find( Task.class,
+ taskId );
+
+ User user = em.find( User.class,
+ userId );
+
+ TaskData taskData = task.getTaskData();
+
+ PeopleAssignments people = task.getPeopleAssignments();
+ if ( taskData.getStatus() == Status.InProgress && (taskData.getActualOwner().getId().equals( user.getId() ) || isAllowed( user,
+ new List[]{people.getBusinessAdministrators()} )) ) {
+ // Status must be InProgress and actual owner, switch to Reserved
+ em.getTransaction().begin();
+ taskData.setStatus( Status.Reserved );
+ em.getTransaction().commit();
+ } else {
+ // @TODO Error
+ return;
+ }
+ }
+
+ public void release(long taskId,
+ String userId) {
+ Task task = em.find( Task.class,
+ taskId );
+
+ User user = em.find( User.class,
+ userId );
+
+ TaskData taskData = task.getTaskData();
+
+ // task must be reserved or in progress and owned by user
+ PeopleAssignments people = task.getPeopleAssignments();
+ if ( (taskData.getStatus() == Status.Reserved || taskData.getStatus() == Status.InProgress) && (taskData.getActualOwner().getId().equals( user.getId() ) || isAllowed( user,
+ new List[]{people.getBusinessAdministrators()} )) ) {
+ em.getTransaction().begin();
+ taskData.setStatus( Status.Ready );
+ taskData.setActualOwner( null );
+ em.getTransaction().commit();
+ } else {
+ //@TODO Error
+ }
+ }
+
+ public void suspend(long taskId,
+ String userId) {
+ Task task = em.find( Task.class,
+ taskId );
+
+ User user = em.find( User.class,
+ userId );
+
+ TaskData taskData = task.getTaskData();
+
+ List[] allowed;
+ PeopleAssignments people = task.getPeopleAssignments();
+ if ( taskData.getStatus() == Status.Ready ) {
+ // If it's ready then potential owners can suspect too
+ allowed = new List[]{people.getPotentialOwners(), people.getBusinessAdministrators()};
+ } else {
+ allowed = new List[]{people.getBusinessAdministrators()};
+ }
+
+ if ( (taskData.getStatus() == Status.Ready || taskData.getStatus() == Status.Reserved || taskData.getStatus() == Status.InProgress)
+ && ((taskData.getActualOwner() != null && taskData.getActualOwner().getId().equals( user.getId() )) || isAllowed( user,
+ allowed )) ) {
+ em.getTransaction().begin();
+ taskData.setStatus( Status.Suspended );
+ em.getTransaction().commit();
+ } else {
+ //@TODO Error
+ }
+ }
+
+ public void resume(long taskId,
+ String userId) {
+ Task task = em.find( Task.class,
+ taskId );
+
+ User user = em.find( User.class,
+ userId );
+
+ TaskData taskData = task.getTaskData();
+
+ List[] allowed;
+ PeopleAssignments people = task.getPeopleAssignments();
+ if ( taskData.getPreviousStatus() == Status.Ready ) {
+ // If it's ready then potential owners can suspect too
+ allowed = new List[]{people.getPotentialOwners(), people.getBusinessAdministrators()};
+ } else {
+ allowed = new List[]{people.getBusinessAdministrators()};
+ }
+
+ if ( (taskData.getStatus() == Status.Suspended) && ((taskData.getActualOwner() != null && taskData.getActualOwner().getId().equals( user.getId() )) || isAllowed( user,
+ allowed )) ) {
+ em.getTransaction().begin();
+ taskData.setStatus( taskData.getPreviousStatus() );
+ em.getTransaction().commit();
+ } else {
+ //@TODO Error
+ }
+ }
+
+ public void skip(long taskId,
+ String userId) {
+ Task task = em.find( Task.class,
+ taskId );
+
+ User user = em.find( User.class,
+ userId );
+
+ TaskData taskData = task.getTaskData();
+
+ List[] allowed;
+ PeopleAssignments people = task.getPeopleAssignments();
+ if ( taskData.getStatus() == Status.Ready ) {
+ // If it's ready then potential owners can skip too
+ allowed = new List[]{people.getPotentialOwners(), people.getBusinessAdministrators()};
+ } else {
+ allowed = new List[]{people.getBusinessAdministrators()};
+ }
+
+ if ( task.getTaskData().isSkipable() && (taskData.getStatus() != Status.Completed && taskData.getStatus() != Status.Failed)
+ && ((taskData.getActualOwner() != null && taskData.getActualOwner().getId().equals( user.getId() )) || isAllowed( user,
+ allowed )) ) {
+ em.getTransaction().begin();
+ taskData.setStatus( Status.Obselete );
+ em.getTransaction().commit();
+ } else {
+ //@TODO Error
+ }
+ }
+
+ public void complete(long taskId,
+ String userId) {
+ Task task = em.find( Task.class,
+ taskId );
+
+ User user = em.find( User.class,
+ userId );
+
+ TaskData taskData = task.getTaskData();
+
+ if ( taskData.getStatus() == Status.InProgress && taskData.getActualOwner().getId().equals( user.getId() ) ) {
+ // Status must be InProgress and actual owner, switch to Reserved
+ em.getTransaction().begin();
+ taskData.setStatus( Status.Completed );
+ em.getTransaction().commit();
+ } else {
+ // @TODO Error
+ return;
+ }
+ }
+
+ public void delegate(long taskId,
+ String delegateId,
+ String userId) {
+ Task task = em.find( Task.class,
+ taskId );
+ TaskData taskData = task.getTaskData();
+ Delegation delegation = task.getDelegation();
+
+
+ User delegate = em.find( User.class,
+ delegateId );
+
+ User user = em.find( User.class,
+ userId );
+
+ // check correct status
+ if ( taskData.getStatus() == Status.Ready || taskData.getStatus() == Status.Reserved || taskData.getStatus() == Status.InProgress ) {
+ // check valid user
+ PeopleAssignments people = task.getPeopleAssignments();
+ if ( taskData.getActualOwner().getId().equals( user.getId() ) || isAllowed( user,
+ new List[]{people.getPotentialOwners(), people.getBusinessAdministrators()} ) ) {
+ // is valid delegate
+ if ( isAllowed( delegate, new List[] { delegation.getDelegates() } ) ) {
+ em.getTransaction().begin();
+ taskData.setStatus( Status.Ready );
+ if ( people.getPotentialOwners().contains( delegate ) ) {
+ // Add delegate to potentialOwners if it's not already
+ people.getPotentialOwners().add( delegate );
+ }
+ claim(task, delegate);
+ em.getTransaction().commit();
+ }
+ } else {
+ // @TODO ERROR
+ }
+ } else {
+ // @TODO ERROR
+ }
+ }
+
+ public void fail(long taskId,
+ String userId) {
+ Task task = em.find( Task.class,
+ taskId );
+
+ User user = em.find( User.class,
+ userId );
+
+ TaskData taskData = task.getTaskData();
+
+ if ( taskData.getStatus() == Status.InProgress && taskData.getActualOwner().getId().equals( user.getId() ) ) {
+ // Status must be InProgress and actual owner, switch to Reserved
+ em.getTransaction().begin();
+ taskData.setStatus( Status.Failed );
+ em.getTransaction().commit();
+ } else {
+ // @TODO Error
+ return;
+ }
+ }
+
+ public void addComment(long taskId,
+ Comment comment) {
+ Task task = em.find( Task.class,
+ taskId );
+ if ( task == null ) {
+ // throw some exception
+ }
+
+ em.getTransaction().begin();
+
+ List<Comment> list = task.getTaskData().getComments();
+ if ( list == null || list == Collections.<Comment> emptyList() ) {
+ list = new ArrayList<Comment>( 1 );
+ task.getTaskData().setComments( list );
+ }
+
+ list.add( comment );
+
+ em.getTransaction().commit();
+ }
+
+ public void addAttachment(long taskId,
+ Attachment attachment,
+ Content content) {
+ Task task = em.find( Task.class,
+ taskId );
+
+ if ( task == null ) {
+ // throw some exception
+ }
+
+ em.getTransaction().begin();
+
+ em.persist( content );
+ attachment.setSize( content.getContent().length );
+ attachment.setAttachmentContentId( content.getId() );
+
+ List<Attachment> list = task.getTaskData().getAttachments();
+ if ( list == null || list == Collections.<Attachment> emptyList() ) {
+ list = new ArrayList<Attachment>( 1 );
+ task.getTaskData().setAttachments( list );
+ }
+
+ list.add( attachment );
+ em.getTransaction().commit();
+ }
+
+ public void setDocumentContent(long taskId,
+ Content content) {
+ Task task = em.find( Task.class,
+ taskId );
+
+ if ( task == null ) {
+ // throw some exception
+ }
+
+ em.getTransaction().begin();
+
+ em.persist( content );
+
+ task.getTaskData().setDocumentContentId( content.getId() );
+
+ em.getTransaction().commit();
+ }
+
+ public Content getContent(long contentId) {
+ Content content = em.find( Content.class,
+ contentId );
+ return content;
+ }
+
+ public void deleteAttachment(long taskId,
+ long attachmentId,
+ long contentId) {
+ // @TODO I can't get this to work with HQL deleting the Attachment. Hibernate needs both the item removed from the collection
+ // and also the item deleted, so for now have to load the entire Task, I suspect that this is due to using the same EM which
+ // is caching things.
+ Task task = em.find( Task.class,
+ taskId );
+
+ em.getTransaction().begin();
+ for ( Iterator<Attachment> it = task.getTaskData().getAttachments().iterator(); it.hasNext(); ) {
+ Attachment attachment = it.next();
+ if ( attachment.getId() == attachmentId ) {
+ it.remove();
+ em.remove( attachment ); // need to do this otherwise it just removes the link id, without removing the attachment
+ break;
+ }
+ }
+
+ // we do this as HQL to avoid streaming in the entire HQL
+ String deleteContent = "delete from Content where id = :id";
+ em.createQuery( deleteContent ).setParameter( "id",
+ contentId ).executeUpdate();
+
+ em.getTransaction().commit();
+ }
+
+ public void deleteComment(long taskId,
+ long commentId) {
+ // @TODO I can't get this to work with HQL deleting the Comment. Hibernate needs both the item removed from the collection
+ // and also the item deleted, so for now have to load the entire Task, I suspect that this is due to using the same EM which
+ // is caching things.
+ Task task = em.find( Task.class,
+ taskId );
+ em.getTransaction().begin();
+ for ( Iterator<Comment> it = task.getTaskData().getComments().iterator(); it.hasNext(); ) {
+ Comment comment = it.next();
+ if ( comment.getId() == commentId ) {
+ it.remove();
+ em.remove( comment ); // need to do this otherwise it just removes the link id, without removing the comment
+ break;
+ }
+ }
+ em.getTransaction().commit();
+ }
+
+ public Task getTask(long taskId) {
+ Task task = em.find( Task.class,
+ taskId );
+ return task;
+ }
+
+ public List<DeadlineSummary> getUnescalatedDeadlines() {
+ return (List<DeadlineSummary>) em.createNamedQuery( "UnescalatedDeadlines" ).getResultList();
+ }
+
+ public List<TaskSummary> getTasksOwned(String userId,
+ String language) {
+ Query tasksOwned = em.createNamedQuery( "TasksOwned" );
+ tasksOwned.setParameter( "userId",
+ userId );
+ tasksOwned.setParameter( "language",
+ language );
+ List<TaskSummary> list = (List<TaskSummary>) tasksOwned.getResultList();
+ return list;
+ }
+
+ public List<TaskSummary> getTasksAssignedAsBusinessAdministrator(String userId,
+ String language) {
+ Query tasksAssignedAsBusinessAdministrator = em.createNamedQuery( "TasksAssignedAsBusinessAdministrator" );
+ tasksAssignedAsBusinessAdministrator.setParameter( "userId",
+ userId );
+ tasksAssignedAsBusinessAdministrator.setParameter( "language",
+ language );
+ List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsBusinessAdministrator.getResultList();
+ return list;
+ }
+
+ public List<TaskSummary> getTasksAssignedAsExcludedOwner(String userId,
+ String language) {
+ Query tasksAssignedAsExcludedOwner = em.createNamedQuery( "TasksAssignedAsExcludedOwner" );
+ tasksAssignedAsExcludedOwner.setParameter( "userId",
+ userId );
+ tasksAssignedAsExcludedOwner.setParameter( "language",
+ language );
+ List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsExcludedOwner.getResultList();
+ return list;
+ }
+
+ public List<TaskSummary> getTasksAssignedAsPotentialOwner(String userId,
+ String language) {
+ Query tasksAssignedAsPotentialOwner = em.createNamedQuery( "TasksAssignedAsPotentialOwner" );
+ tasksAssignedAsPotentialOwner.setParameter( "userId",
+ userId );
+ tasksAssignedAsPotentialOwner.setParameter( "language",
+ language );
+ List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsPotentialOwner.getResultList();
+ return list;
+ }
+
+ public List<TaskSummary> getTasksAssignedAsRecipient(String userId,
+ String language) {
+ Query tasksAssignedAsRecipient = em.createNamedQuery( "TasksAssignedAsRecipient" );
+ tasksAssignedAsRecipient.setParameter( "userId",
+ userId );
+ tasksAssignedAsRecipient.setParameter( "language",
+ language );
+ List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsRecipient.getResultList();
+ return list;
+ }
+
+ public List<TaskSummary> getTasksAssignedAsTaskInitiator(String userId,
+ String language) {
+ Query tasksAssignedAsTaskInitiator = em.createNamedQuery( "TasksAssignedAsTaskInitiator" );
+ tasksAssignedAsTaskInitiator.setParameter( "userId",
+ userId );
+ tasksAssignedAsTaskInitiator.setParameter( "language",
+ language );
+ List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsTaskInitiator.getResultList();
+ return list;
+ }
+
+ public List<TaskSummary> getTasksAssignedAsTaskStakeholder(String userId,
+ String language) {
+ Query tasksAssignedAsTaskStakeholder = em.createNamedQuery( "TasksAssignedAsTaskStakeholder" );
+ tasksAssignedAsTaskStakeholder.setParameter( "userId",
+ userId );
+ tasksAssignedAsTaskStakeholder.setParameter( "language",
+ language );
+ List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsTaskStakeholder.getResultList();
+ return list;
+ }
+
+ public boolean isAllowed(User user,
+ List<OrganizationalEntity>[] people) {
+ for ( List<OrganizationalEntity> list : people ) {
+ if ( isAllowed( user,
+ list ) ) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean isAllowed(User user,
+ List<OrganizationalEntity> entities) {
+ // for now just do a contains, I'll figure out group membership later.
+ for ( OrganizationalEntity entity : entities ) {
+ if ( entity.getId().equals( user.getId() ) ) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public static 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();
+ }
+}
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/orm.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/orm.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/orm.xml 2008-09-16 15:19:06 UTC (rev 22819)
@@ -0,0 +1,294 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd"
+ version="1.0">
+ <package>org.drools.task</package>
+ <entity class="Task" metadata-complete="false" access="FIELD">
+ <named-query name="TasksAssignedAsBusinessAdministrator">
+ <query>
+select
+ new org.drools.task.query.TaskSummary(
+ t.id,
+ names.text,
+ subjects.text,
+ descriptions.text,
+ t.taskData.status,
+ t.priority,
+ t.taskData.skipable,
+ t.taskData.actualOwner,
+ t.taskData.createdBy,
+ t.taskData.createdOn,
+ t.taskData.activationTime,
+ t.taskData.expirationTime)
+from
+ Task t left join t.taskData.createdBy,
+ I18NText names,
+ I18NText subjects,
+ I18NText descriptions,
+ OrganizationalEntity businessAdministrator
+where
+ businessAdministrator.id = :userId and
+ businessAdministrator in elements ( t.peopleAssignments.businessAdministrators ) and
+
+ names.language = :language and
+ names in elements( t.names) and
+
+ subjects.language = :language and
+ subjects in elements( t.subjects) and
+
+ descriptions.language = :language and
+ descriptions in elements( t.descriptions) and
+
+ t.taskData.expirationTime is null
+ </query>
+ <hint name="org.hibernate.timeout" value="200"/>
+ </named-query>
+ <named-query name="TasksAssignedAsExcludedOwner">
+ <query>
+select
+ new org.drools.task.query.TaskSummary(
+ t.id,
+ names.text,
+ subjects.text,
+ descriptions.text,
+ t.taskData.status,
+ t.priority,
+ t.taskData.skipable,
+ t.taskData.actualOwner,
+ t.taskData.createdBy,
+ t.taskData.createdOn,
+ t.taskData.activationTime,
+ t.taskData.expirationTime)
+from
+ Task t left join t.taskData.createdBy,
+ I18NText names,
+ I18NText subjects,
+ I18NText descriptions,
+ OrganizationalEntity excludedOwners
+where
+ excludedOwners.id = :userId and
+ excludedOwners in elements ( t.peopleAssignments.excludedOwners ) and
+
+ names.language = :language and
+ names in elements( t.names) and
+
+ subjects.language = :language and
+ subjects in elements( t.subjects) and
+
+ descriptions.language = :language and
+ descriptions in elements( t.descriptions) and
+
+ t.taskData.expirationTime is null
+ </query>
+ <hint name="org.hibernate.timeout" value="200"/>
+ </named-query>
+ <named-query name="TasksAssignedAsPotentialOwner">
+ <query>
+select
+ new org.drools.task.query.TaskSummary(
+ t.id,
+ names.text,
+ subjects.text,
+ descriptions.text,
+ t.taskData.status,
+ t.priority,
+ t.taskData.skipable,
+ t.taskData.actualOwner,
+ t.taskData.createdBy,
+ t.taskData.createdOn,
+ t.taskData.activationTime,
+ t.taskData.expirationTime)
+from
+ Task t left join t.taskData.createdBy,
+ I18NText names,
+ I18NText subjects,
+ I18NText descriptions,
+ OrganizationalEntity potentialOwners
+where
+ potentialOwners.id = :userId and
+ potentialOwners in elements ( t.peopleAssignments.potentialOwners ) and
+
+ names.language = :language and
+ names in elements( t.names) and
+
+ subjects.language = :language and
+ subjects in elements( t.subjects) and
+
+ descriptions.language = :language and
+ descriptions in elements( t.descriptions) and
+
+ t.taskData.expirationTime is null
+ </query>
+ <hint name="org.hibernate.timeout" value="200"/>
+ </named-query>
+ <named-query name="TasksAssignedAsRecipient">
+ <query>
+select
+ new org.drools.task.query.TaskSummary(
+ t.id,
+ names.text,
+ subjects.text,
+ descriptions.text,
+ t.taskData.status,
+ t.priority,
+ t.taskData.skipable,
+ t.taskData.actualOwner,
+ t.taskData.createdBy,
+ t.taskData.createdOn,
+ t.taskData.activationTime,
+ t.taskData.expirationTime)
+from
+ Task t left join t.taskData.createdBy,
+ I18NText names,
+ I18NText subjects,
+ I18NText descriptions,
+ OrganizationalEntity recipients
+where
+ recipients.id = :userId and
+ recipients in elements ( t.peopleAssignments.recipients ) and
+
+ names.language = :language and
+ names in elements( t.names) and
+
+ subjects.language = :language and
+ subjects in elements( t.subjects) and
+
+ descriptions.language = :language and
+ descriptions in elements( t.descriptions) and
+
+ t.taskData.expirationTime is null
+ </query>
+ <hint name="org.hibernate.timeout" value="200"/>
+ </named-query>
+ <named-query name="TasksAssignedAsTaskInitiator">
+ <query>
+select
+ new org.drools.task.query.TaskSummary(
+ t.id,
+ names.text,
+ subjects.text,
+ descriptions.text,
+ t.taskData.status,
+ t.priority,
+ t.taskData.skipable,
+ t.taskData.actualOwner,
+ t.taskData.createdBy,
+ t.taskData.createdOn,
+ t.taskData.activationTime,
+ t.taskData.expirationTime)
+from
+ Task t left join t.taskData.createdBy,
+ I18NText names,
+ I18NText subjects,
+ I18NText descriptions,
+ OrganizationalEntity taskInitiator
+where
+ taskInitiator.id = :userId and
+ taskInitiator = t.peopleAssignments.taskInitiator and
+
+ names.language = :language and
+ names in elements( t.names) and
+
+ subjects.language = :language and
+ subjects in elements( t.subjects) and
+
+ descriptions.language = :language and
+ descriptions in elements( t.descriptions) and
+
+ t.taskData.expirationTime is null
+ </query>
+ <hint name="org.hibernate.timeout" value="200"/>
+ </named-query>
+ <named-query name="TasksAssignedAsTaskStakeholder">
+ <query>
+select
+ new org.drools.task.query.TaskSummary(
+ t.id,
+ names.text,
+ subjects.text,
+ descriptions.text,
+ t.taskData.status,
+ t.priority,
+ t.taskData.skipable,
+ t.taskData.actualOwner,
+ t.taskData.createdBy,
+ t.taskData.createdOn,
+ t.taskData.activationTime,
+ t.taskData.expirationTime)
+from
+ Task t left join t.taskData.createdBy,
+ I18NText names,
+ I18NText subjects,
+ I18NText descriptions,
+ OrganizationalEntity taskStakeholder
+where
+ taskStakeholder.id = :userId and
+ taskStakeholder in elements ( t.peopleAssignments.taskStakeholders ) and
+
+ names.language = :language and
+ names in elements( t.names) and
+
+ subjects.language = :language and
+ subjects in elements( t.subjects) and
+
+ descriptions.language = :language and
+ descriptions in elements( t.descriptions) and
+
+ t.taskData.expirationTime is null
+ </query>
+ <hint name="org.hibernate.timeout" value="200"/>
+ </named-query>
+ <named-query name="TasksOwned">
+ <query>
+select
+ new org.drools.task.query.TaskSummary(
+ t.id,
+ names.text,
+ subjects.text,
+ descriptions.text,
+ t.taskData.status,
+ t.priority,
+ t.taskData.skipable,
+ t.taskData.actualOwner,
+ t.taskData.createdBy,
+ t.taskData.createdOn,
+ t.taskData.activationTime,
+ t.taskData.expirationTime)
+from
+ Task t left join t.taskData.createdBy,
+ I18NText names,
+ I18NText subjects,
+ I18NText descriptions
+where
+ t.taskData.actualOwner.id = :userId and
+ names in elements( t.names) and
+ names.language = :language and
+ subjects in elements( t.subjects) and
+ subjects.language = :language and
+ descriptions in elements( t.descriptions) and
+ descriptions.language = :language and
+ t.taskData.expirationTime is null
+ </query>
+ <hint name="org.hibernate.timeout" value="200"/>
+ </named-query>
+ <named-query name="UnescalatedDeadlines">
+ <query>
+select
+ new org.drools.task.query.DeadlineSummary(
+ t.id,
+ d.id,
+ d.date)
+from
+ Task t,
+ Deadline d
+where
+ (d in elements( t.deadlines.startDeadlines ) or d in elements( t.deadlines.endDeadlines ) ) and
+ d.escalated = false
+order by
+ d.date
+ </query>
+ <hint name="org.hibernate.timeout" value="200"/>
+ </named-query>
+ </entity>
+</entity-mappings>
Deleted: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsBusinessAdministrator.txt
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsBusinessAdministrator.txt 2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsBusinessAdministrator.txt 2008-09-16 15:19:06 UTC (rev 22819)
@@ -1,35 +0,0 @@
-select
- new org.drools.task.query.TaskSummary(
- t.id,
- names.text,
- subjects.text,
- descriptions.text,
- t.taskData.status,
- t.priority,
- t.taskData.skipable,
- t.taskData.actualOwner,
- t.taskData.createdBy,
- t.taskData.createdOn,
- t.taskData.activationTime,
- t.taskData.expirationTime)
-from
- Task t left join t.taskData.createdBy,
- I18NText names,
- I18NText subjects,
- I18NText descriptions,
- OrganizationalEntity businessAdministrator
-where
- businessAdministrator.id = :userId and
- businessAdministrator in elements ( t.peopleAssignments.businessAdministrators ) and
-
- names.language = :language and
- names in elements( t.names) and
-
- subjects.language = :language and
- subjects in elements( t.subjects) and
-
- descriptions.language = :language and
- descriptions in elements( t.descriptions) and
-
- t.taskData.expirationTime is null
-
Deleted: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsExcludedOwner.txt
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsExcludedOwner.txt 2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsExcludedOwner.txt 2008-09-16 15:19:06 UTC (rev 22819)
@@ -1,35 +0,0 @@
-select
- new org.drools.task.query.TaskSummary(
- t.id,
- names.text,
- subjects.text,
- descriptions.text,
- t.taskData.status,
- t.priority,
- t.taskData.skipable,
- t.taskData.actualOwner,
- t.taskData.createdBy,
- t.taskData.createdOn,
- t.taskData.activationTime,
- t.taskData.expirationTime)
-from
- Task t left join t.taskData.createdBy,
- I18NText names,
- I18NText subjects,
- I18NText descriptions,
- OrganizationalEntity excludedOwners
-where
- excludedOwners.id = :userId and
- excludedOwners in elements ( t.peopleAssignments.excludedOwners ) and
-
- names.language = :language and
- names in elements( t.names) and
-
- subjects.language = :language and
- subjects in elements( t.subjects) and
-
- descriptions.language = :language and
- descriptions in elements( t.descriptions) and
-
- t.taskData.expirationTime is null
-
Deleted: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsPotentialOwner.txt
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsPotentialOwner.txt 2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsPotentialOwner.txt 2008-09-16 15:19:06 UTC (rev 22819)
@@ -1,35 +0,0 @@
-select
- new org.drools.task.query.TaskSummary(
- t.id,
- names.text,
- subjects.text,
- descriptions.text,
- t.taskData.status,
- t.priority,
- t.taskData.skipable,
- t.taskData.actualOwner,
- t.taskData.createdBy,
- t.taskData.createdOn,
- t.taskData.activationTime,
- t.taskData.expirationTime)
-from
- Task t left join t.taskData.createdBy,
- I18NText names,
- I18NText subjects,
- I18NText descriptions,
- OrganizationalEntity potentialOwners
-where
- potentialOwners.id = :userId and
- potentialOwners in elements ( t.peopleAssignments.potentialOwners ) and
-
- names.language = :language and
- names in elements( t.names) and
-
- subjects.language = :language and
- subjects in elements( t.subjects) and
-
- descriptions.language = :language and
- descriptions in elements( t.descriptions) and
-
- t.taskData.expirationTime is null
-
Deleted: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsRecipient.txt
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsRecipient.txt 2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsRecipient.txt 2008-09-16 15:19:06 UTC (rev 22819)
@@ -1,35 +0,0 @@
-select
- new org.drools.task.query.TaskSummary(
- t.id,
- names.text,
- subjects.text,
- descriptions.text,
- t.taskData.status,
- t.priority,
- t.taskData.skipable,
- t.taskData.actualOwner,
- t.taskData.createdBy,
- t.taskData.createdOn,
- t.taskData.activationTime,
- t.taskData.expirationTime)
-from
- Task t left join t.taskData.createdBy,
- I18NText names,
- I18NText subjects,
- I18NText descriptions,
- OrganizationalEntity recipients
-where
- recipients.id = :userId and
- recipients in elements ( t.peopleAssignments.recipients ) and
-
- names.language = :language and
- names in elements( t.names) and
-
- subjects.language = :language and
- subjects in elements( t.subjects) and
-
- descriptions.language = :language and
- descriptions in elements( t.descriptions) and
-
- t.taskData.expirationTime is null
-
Deleted: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsTaskInitiator.txt
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsTaskInitiator.txt 2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsTaskInitiator.txt 2008-09-16 15:19:06 UTC (rev 22819)
@@ -1,35 +0,0 @@
-select
- new org.drools.task.query.TaskSummary(
- t.id,
- names.text,
- subjects.text,
- descriptions.text,
- t.taskData.status,
- t.priority,
- t.taskData.skipable,
- t.taskData.actualOwner,
- t.taskData.createdBy,
- t.taskData.createdOn,
- t.taskData.activationTime,
- t.taskData.expirationTime)
-from
- Task t left join t.taskData.createdBy,
- I18NText names,
- I18NText subjects,
- I18NText descriptions,
- OrganizationalEntity taskInitiator
-where
- taskInitiator.id = :userId and
- taskInitiator = t.peopleAssignments.taskInitiator and
-
- names.language = :language and
- names in elements( t.names) and
-
- subjects.language = :language and
- subjects in elements( t.subjects) and
-
- descriptions.language = :language and
- descriptions in elements( t.descriptions) and
-
- t.taskData.expirationTime is null
-
Deleted: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsTaskStakeholder.txt
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsTaskStakeholder.txt 2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksAssignedAsTaskStakeholder.txt 2008-09-16 15:19:06 UTC (rev 22819)
@@ -1,35 +0,0 @@
-select
- new org.drools.task.query.TaskSummary(
- t.id,
- names.text,
- subjects.text,
- descriptions.text,
- t.taskData.status,
- t.priority,
- t.taskData.skipable,
- t.taskData.actualOwner,
- t.taskData.createdBy,
- t.taskData.createdOn,
- t.taskData.activationTime,
- t.taskData.expirationTime)
-from
- Task t left join t.taskData.createdBy,
- I18NText names,
- I18NText subjects,
- I18NText descriptions,
- OrganizationalEntity taskStakeholder
-where
- taskStakeholder.id = :userId and
- taskStakeholder in elements ( t.peopleAssignments.taskStakeholders ) and
-
- names.language = :language and
- names in elements( t.names) and
-
- subjects.language = :language and
- subjects in elements( t.subjects) and
-
- descriptions.language = :language and
- descriptions in elements( t.descriptions) and
-
- t.taskData.expirationTime is null
-
Deleted: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksOwned.txt
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksOwned.txt 2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/TasksOwned.txt 2008-09-16 15:19:06 UTC (rev 22819)
@@ -1,28 +0,0 @@
-select
- new org.drools.task.query.TaskSummary(
- t.id,
- names.text,
- subjects.text,
- descriptions.text,
- t.taskData.status,
- t.priority,
- t.taskData.skipable,
- t.taskData.actualOwner,
- t.taskData.createdBy,
- t.taskData.createdOn,
- t.taskData.activationTime,
- t.taskData.expirationTime)
-from
- Task t left join t.taskData.createdBy,
- I18NText names,
- I18NText subjects,
- I18NText descriptions
-where
- t.taskData.actualOwner.id = :userId and
- names in elements( t.names) and
- names.language = :language and
- subjects in elements( t.subjects) and
- subjects.language = :language and
- descriptions in elements( t.descriptions) and
- descriptions.language = :language and
- t.taskData.expirationTime is null
\ No newline at end of file
Deleted: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/UnescalatedDeadlines.txt
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/UnescalatedDeadlines.txt 2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/UnescalatedDeadlines.txt 2008-09-16 15:19:06 UTC (rev 22819)
@@ -1,13 +0,0 @@
-select
- new org.drools.task.query.DeadlineSummary(
- t.id,
- d.id,
- d.date)
-from
- Task t,
- Deadline d
-where
- (d in elements( t.deadlines.startDeadlines ) or d in elements( t.deadlines.endDeadlines ) ) and
- d.escalated = false
-order by
- d.date
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/BaseTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/BaseTest.java 2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/BaseTest.java 2008-09-16 15:19:06 UTC (rev 22819)
@@ -38,6 +38,7 @@
import org.drools.task.User;
import org.drools.task.query.TaskSummary;
import org.drools.task.service.TaskService;
+import org.drools.task.service.TaskServiceSession;
import org.drools.task.utils.CollectionUtils;
import org.mvel.MVEL;
import org.mvel.ParserContext;
@@ -51,46 +52,54 @@
public abstract class BaseTest extends TestCase {
protected EntityManagerFactory emf;
-
- protected Map<String, User> users;
- protected Map<String, Group> groups;
-
- protected TaskService taskService;
-
+
+ protected Map<String, User> users;
+ protected Map<String, Group> groups;
+
+ protected TaskService taskService;
+ protected TaskServiceSession taskSession;
+
protected void setUp() throws Exception {
// Use persistence.xml configuration
- emf = Persistence.createEntityManagerFactory( "org.drools.task" );
-
+ emf = Persistence.createEntityManagerFactory( "org.drools.task" );
+
taskService = new TaskService( emf );
-
- Map vars = new HashedMap();
-
- Reader reader = new InputStreamReader( BaseTest.class.getResourceAsStream( "LoadUsers.mvel" ) );
- users = ( Map<String, User> ) eval( reader, vars );
+ taskSession = taskService.createSession();
+ MockUserInfo userInfo = new MockUserInfo();
+ taskService.setUserinfo( userInfo );
+ Map vars = new HashedMap();
+
+ 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 );
+ taskSession.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 );
- }
+ taskSession.addGroup( group );
+ }
}
-
+
protected void tearDown() throws Exception {
+ taskSession.dispose();
emf.close();
- }
+ }
- public Object eval(Reader reader, Map vars) {
+ public Object eval(Reader reader,
+ Map vars) {
try {
- return eval( toString( reader ), vars );
+ 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 );
@@ -101,36 +110,60 @@
return sb.toString();
}
- public Object eval(String str, Map vars) {
+ 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( "EmailNotification", EmailNotification.class );
- context.addImport( "EmailNotificationHeader", EmailNotificationHeader.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( "TaskSummary", TaskSummary.class );
- context.addImport( "User", User.class );
- return MVEL.executeExpression( compiler.compile( context ), vars );
+ 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( "EmailNotification",
+ EmailNotification.class );
+ context.addImport( "EmailNotificationHeader",
+ EmailNotificationHeader.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( "TaskSummary",
+ TaskSummary.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/ModelPersistenceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/ModelPersistenceTest.java 2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/ModelPersistenceTest.java 2008-09-16 15:19:06 UTC (rev 22819)
@@ -37,6 +37,7 @@
import org.drools.task.TaskData;
import org.drools.task.User;
import org.drools.task.service.TaskService;
+import org.drools.task.service.TaskServiceSession;
import org.drools.task.utils.CollectionUtils;
import org.mvel.MVEL;
import org.mvel.ParserContext;
@@ -59,6 +60,7 @@
}
public void testfullHibernateRoundtripWithAdditionalMVELCheck() throws Exception {
+ TaskServiceSession session = taskService.createSession();
Task task1 = new Task();
task1.setPriority( 100 );
@@ -340,12 +342,12 @@
potentialOwners.add( users.get( "stuart" ) );
potentialOwners.add( users.get( "dalai" ) );
- taskService.addTask( task1 );
+ session.addTask( task1 );
- taskService.getEntityManager().clear();
+ session.dispose();
+ session = taskService.createSession();
- Task task2 = taskService.getTask( task1.getId( ) );
-
+ Task task2 = session.getTask( task1.getId( ) );
assertNotSame( task1,
task2 );
assertEquals( task1,
@@ -362,6 +364,7 @@
task3 );
assertEquals( task1,
task3 );
+ session.dispose();
}
}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/QueryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/QueryTest.java 2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/QueryTest.java 2008-09-16 15:19:06 UTC (rev 22819)
@@ -42,6 +42,7 @@
import org.drools.task.query.TaskSummary;
import org.drools.task.service.EscalatedDeadlineHandler;
import org.drools.task.service.TaskService;
+import org.drools.task.service.TaskServiceSession;
import org.drools.task.utils.CollectionUtils;
import org.mvel.MVEL;
import org.mvel.ParserContext;
@@ -58,6 +59,7 @@
public class QueryTest extends BaseTest {
public void testUnescalatedDeadlines() throws Exception {
+ TaskServiceSession taskSession = taskService.createSession();
Map vars = new HashedMap();
vars.put( "users",
users );
@@ -72,11 +74,11 @@
List<Task> tasks = (List<Task>) eval( reader,
vars );
for ( Task task : tasks ) {
- taskService.addTask( task );
+ taskSession.addTask( task );
}
// should be three, one is marked as escalated
- List<DeadlineSummary> list = taskService.getUnescalatedDeadlines();
+ List<DeadlineSummary> list = taskSession.getUnescalatedDeadlines();
assertEquals( 3,
list.size() );
@@ -91,6 +93,7 @@
result = list.get( 2 );
assertEquals( result.getDate().getTime(),
now + 5000 );
+ taskSession.dispose();
}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingEventResponseHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingEventResponseHandler.java 2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingEventResponseHandler.java 2008-09-16 15:19:06 UTC (rev 22819)
@@ -19,7 +19,7 @@
public synchronized Payload getPayload() {
if ( !wait ) {
try {
- wait( 300000 );
+ wait( 3000 );
} catch ( InterruptedException e ) {
// swallow as this is just a notification
}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/DemoTaskService.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/DemoTaskService.java 2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/DemoTaskService.java 2008-09-16 15:19:06 UTC (rev 22819)
@@ -40,22 +40,24 @@
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.drools.task");
TaskService taskService = new TaskService(emf);
+ TaskServiceSession taskSession = taskService.createSession();
// Add users
Map vars = new HashedMap();
Reader reader = new InputStreamReader( BaseTest.class.getResourceAsStream( "LoadUsers.mvel" ) );
Map<String, User> users = ( Map<String, User> ) eval( reader, vars );
for ( User user : users.values() ) {
- taskService.addUser( user );
+ taskSession.addUser( user );
}
reader = new InputStreamReader( BaseTest.class.getResourceAsStream( "LoadGroups.mvel" ) );
Map<String, Group> groups = ( Map<String, Group> ) eval( reader, vars );
for ( Group group : groups.values() ) {
- taskService.addGroup( group );
+ taskSession.addGroup( group );
}
// start server
MinaTaskServer server = new MinaTaskServer(taskService);
Thread thread = new Thread(server);
thread.start();
+ taskSession.dispose();
}
@SuppressWarnings("unchecked")
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/MockEventMessagingTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/MockEventMessagingTest.java 2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/MockEventMessagingTest.java 2008-09-16 15:19:06 UTC (rev 22819)
@@ -37,14 +37,14 @@
str += "names = [ new I18NText( 'en-UK', 'This is my task name')] })";
Task task = ( Task ) eval( new StringReader( str ), vars );
- taskService.addTask( task );
+ taskSession.addTask( task );
long taskId = task.getId();
EventKey key = new TaskEventKey(TaskClaimedEvent.class, taskId );
MockEventTriggerTransport transport = new MockEventTriggerTransport();
taskService.getEventKeys().register( key, transport );
- taskService.claim( taskId, users.get( "darth" ).getId() );
+ taskSession.claim( taskId, users.get( "darth" ).getId() );
assertEquals( 1, transport.list.size() );
assertEquals( taskId, ((TaskClaimedEvent) ((Payload) transport.list.get(0)).get()).getTaskId() );
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceCommentsAndAttachmentsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceCommentsAndAttachmentsTest.java 2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceCommentsAndAttachmentsTest.java 2008-09-16 15:19:06 UTC (rev 22819)
@@ -64,6 +64,9 @@
vars.put( "now", new Date() );
String str = "(with (new Task()) { priority = 55, taskData = (with( new TaskData()) { createdOn = now, activationTime = now}), ";
+ str += "deadlines = new Deadlines(),";
+ str += "delegation = new Delegation(),";
+ str += "peopleAssignments = new PeopleAssignments(),";
str += "names = [ new I18NText( 'en-UK', 'This is my task name')] })";
BlockingAddTaskResponseHandler addTaskResponseHandler = new BlockingAddTaskResponseHandler();
@@ -140,6 +143,9 @@
vars.put( "now", new Date() );
String str = "(with (new Task()) { priority = 55, taskData = (with( new TaskData()) { createdOn = now, activationTime = now}), ";
+ str += "deadlines = new Deadlines(),";
+ str += "delegation = new Delegation(),";
+ str += "peopleAssignments = new PeopleAssignments(),";
str += "names = [ new I18NText( 'en-UK', 'This is my task name')] })";
BlockingAddTaskResponseHandler addTaskResponseHandler = new BlockingAddTaskResponseHandler();
Copied: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceDeadlinesTest.java (from rev 22782, labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEmailNotificationTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceDeadlinesTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceDeadlinesTest.java 2008-09-16 15:19:06 UTC (rev 22819)
@@ -0,0 +1,193 @@
+package org.drools.task.service;
+
+import java.io.InputStreamReader;
+import java.io.StringReader;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMessage.RecipientType;
+
+import org.apache.commons.collections.map.HashedMap;
+import org.apache.mina.transport.socket.nio.NioSocketConnector;
+import org.drools.process.instance.WorkItemManager;
+import org.drools.process.instance.impl.DefaultWorkItemManager;
+import org.drools.process.instance.impl.WorkItemImpl;
+import org.drools.process.workitem.email.EmailWorkItemHandler;
+import org.drools.task.BaseTest;
+import org.drools.task.Content;
+import org.drools.task.EmailNotification;
+import org.drools.task.MockUserInfo;
+import org.drools.task.OrganizationalEntity;
+import org.drools.task.Status;
+import org.drools.task.Task;
+import org.drools.task.User;
+import org.drools.task.service.DefaultEscalatedDeadlineHandler;
+import org.mvel.MVEL;
+import org.mvel.compiler.ExpressionCompiler;
+import org.mvel.templates.CompiledTemplate;
+import org.mvel.templates.TemplateCompiler;
+import org.mvel.templates.TemplateRuntime;
+import org.subethamail.wiser.Wiser;
+import org.subethamail.wiser.WiserMessage;
+
+public class TaskServiceDeadlinesTest extends BaseTest {
+ MinaTaskServer server;
+ MinaTaskClient client;
+
+ Wiser wiser;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ server = new MinaTaskServer( taskService );
+ Thread thread = new Thread( server );
+ thread.start();
+ Thread.sleep( 500 );
+
+ client = new MinaTaskClient( "client 1",
+ new TaskClientHandler() );
+ NioSocketConnector connector = new NioSocketConnector();
+ SocketAddress address = new InetSocketAddress( "127.0.0.1",
+ 9123 );
+ client.connect( connector,
+ address );
+
+ wiser = new Wiser();
+ wiser.start();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ client.disconnect();
+ server.stop();
+
+ wiser.stop();
+ }
+
+ public void testDelayedEmailNotificationOnDeadline() throws Exception {
+ Map vars = new HashedMap();
+ vars.put( "users", users );
+ vars.put( "groups", groups );
+ vars.put( "now", new Date() );
+
+ DefaultEscalatedDeadlineHandler notificationHandler = new DefaultEscalatedDeadlineHandler();
+ notificationHandler.getHandler().setConnection( "localhost", "25", null, null );
+ WorkItemManager manager = new DefaultWorkItemManager( null );
+ notificationHandler.setManager( manager );
+
+ MockUserInfo userInfo = new MockUserInfo();
+ userInfo.getEmails().put( users.get("tony"), "tony at domain.com" );
+ userInfo.getEmails().put( users.get("darth"), "darth at domain.com" );
+
+ userInfo.getLanguages().put( users.get("tony"), "en-UK" );
+ userInfo.getLanguages().put( users.get("darth"), "en-UK" );
+ notificationHandler.setUserInfo( userInfo );
+
+ taskService.setEscalatedDeadlineHandler( notificationHandler );
+
+ String string = toString( new InputStreamReader( getClass().getResourceAsStream( "DeadlineWithNotification.mvel" ) ) );
+
+ BlockingAddTaskResponseHandler addTaskResponseHandler = new BlockingAddTaskResponseHandler();
+ Task task = ( Task ) eval( new StringReader( string ), vars );
+ client.addTask( task, addTaskResponseHandler );
+ long taskId = addTaskResponseHandler.getTaskId();
+
+ Content content = new Content();
+ content.setContent( "['subject' : 'My Subject', 'body' : 'My Body']".getBytes() );
+ BlockingSetContentResponseHandler setContentResponseHandler = new BlockingSetContentResponseHandler();
+ client.setDocumentContent( taskId, content, setContentResponseHandler );
+ long contentId = setContentResponseHandler.getContentId();
+
+ // emails should not be set yet
+ assertEquals(0, wiser.getMessages().size() );
+ Thread.sleep( 1000 );
+
+ // nor yet
+ assertEquals(0, wiser.getMessages().size() );
+
+ Thread.sleep( 6000 );
+
+ // 1 email with two recipients should now exist
+ assertEquals(2, wiser.getMessages().size() );
+
+ List<String> list = new ArrayList<String>(2);
+ list.add( wiser.getMessages().get( 0 ).getEnvelopeReceiver() );
+ list.add( wiser.getMessages().get( 1 ).getEnvelopeReceiver() );
+
+ assertTrue( list.contains("tony at domain.com"));
+ assertTrue( list.contains("darth at domain.com"));
+
+
+ MimeMessage msg = (( WiserMessage ) wiser.getMessages().get( 0 )).getMimeMessage();
+ assertEquals( "My Body", msg.getContent() );
+ assertEquals( "My Subject", msg.getSubject() );
+ assertEquals( "from at domain.com", ((InternetAddress)msg.getFrom()[0]).getAddress() );
+ assertEquals( "replyTo at domain.com", ((InternetAddress)msg.getReplyTo()[0]).getAddress() );
+ assertEquals( "tony at domain.com", ((InternetAddress)msg.getRecipients( RecipientType.TO )[0]).getAddress() );
+ assertEquals( "darth at domain.com", ((InternetAddress)msg.getRecipients( RecipientType.TO )[1]).getAddress() );
+ }
+
+ public void testDelayedReassignmentOnDeadline() throws Exception {
+ Map vars = new HashedMap();
+ vars.put( "users", users );
+ vars.put( "groups", groups );
+ vars.put( "now", new Date() );
+
+ DefaultEscalatedDeadlineHandler notificationHandler = new DefaultEscalatedDeadlineHandler();
+ notificationHandler.getHandler().setConnection( "localhost", "25", null, null );
+ WorkItemManager manager = new DefaultWorkItemManager( null );
+ notificationHandler.setManager( manager );
+
+ MockUserInfo userInfo = new MockUserInfo();
+ userInfo.getEmails().put( users.get("tony"), "tony at domain.com" );
+ userInfo.getEmails().put( users.get("darth"), "darth at domain.com" );
+
+ userInfo.getLanguages().put( users.get("tony"), "en-UK" );
+ userInfo.getLanguages().put( users.get("darth"), "en-UK" );
+ notificationHandler.setUserInfo( userInfo );
+
+ taskService.setEscalatedDeadlineHandler( notificationHandler );
+
+ String string = toString( new InputStreamReader( getClass().getResourceAsStream( "DeadlineWithReassignment.mvel" ) ) );
+
+ BlockingAddTaskResponseHandler addTaskResponseHandler = new BlockingAddTaskResponseHandler();
+ Task task = ( Task ) eval( new StringReader( string ), vars );
+ client.addTask( task, addTaskResponseHandler );
+ long taskId = addTaskResponseHandler.getTaskId();
+
+ // Shouldn't have re-assigned yet
+ Thread.sleep( 1000 );
+ BlockingGetTaskResponseHandler getTaskHandler = new BlockingGetTaskResponseHandler();
+ client.getTask( taskId, getTaskHandler );
+ task = getTaskHandler.getTask();
+ List<OrganizationalEntity> potentialOwners = task.getPeopleAssignments().getPotentialOwners();
+ List<String> ids = new ArrayList<String>(potentialOwners.size());
+ for ( OrganizationalEntity entity : potentialOwners ) {
+ ids.add( entity.getId() );
+ }
+ assertTrue( ids.contains( users.get( "tony" ).getId() ));
+ assertTrue( ids.contains( users.get( "luke" ).getId() ));
+
+ // should have re-assigned by now
+ Thread.sleep( 5000 );
+ getTaskHandler = new BlockingGetTaskResponseHandler();
+ client.getTask( taskId, getTaskHandler );
+ task = getTaskHandler.getTask();
+ assertEquals( Status.Ready, task.getTaskData().getStatus() );
+ potentialOwners = task.getPeopleAssignments().getPotentialOwners();
+ System.out.println( potentialOwners );
+ ids = new ArrayList<String>(potentialOwners.size());
+ for ( OrganizationalEntity entity : potentialOwners ) {
+ ids.add( entity.getId() );
+ }
+ assertTrue( ids.contains( users.get( "bobba" ).getId() ));
+ assertTrue( ids.contains( users.get( "jabba" ).getId() ));
+ }
+}
Property changes on: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceDeadlinesTest.java
___________________________________________________________________
Name: svn:mergeinfo
+
Deleted: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEmailNotificationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEmailNotificationTest.java 2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEmailNotificationTest.java 2008-09-16 15:19:06 UTC (rev 22819)
@@ -1,134 +0,0 @@
-package org.drools.task.service;
-
-import java.io.InputStreamReader;
-import java.io.StringReader;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.mail.internet.InternetAddress;
-import javax.mail.internet.MimeMessage;
-import javax.mail.internet.MimeMessage.RecipientType;
-
-import org.apache.commons.collections.map.HashedMap;
-import org.apache.mina.transport.socket.nio.NioSocketConnector;
-import org.drools.process.instance.WorkItemManager;
-import org.drools.process.instance.impl.DefaultWorkItemManager;
-import org.drools.process.instance.impl.WorkItemImpl;
-import org.drools.process.workitem.email.EmailWorkItemHandler;
-import org.drools.task.BaseTest;
-import org.drools.task.Content;
-import org.drools.task.EmailNotification;
-import org.drools.task.MockUserInfo;
-import org.drools.task.Task;
-import org.drools.task.User;
-import org.drools.task.service.DefaultEscalatedDeadlineHandler;
-import org.mvel.MVEL;
-import org.mvel.compiler.ExpressionCompiler;
-import org.mvel.templates.CompiledTemplate;
-import org.mvel.templates.TemplateCompiler;
-import org.mvel.templates.TemplateRuntime;
-import org.subethamail.wiser.Wiser;
-import org.subethamail.wiser.WiserMessage;
-
-public class TaskServiceEmailNotificationTest extends BaseTest {
- MinaTaskServer server;
- MinaTaskClient client;
-
- Wiser wiser;
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- server = new MinaTaskServer( taskService );
- Thread thread = new Thread( server );
- thread.start();
- Thread.sleep( 500 );
-
- client = new MinaTaskClient( "client 1",
- new TaskClientHandler() );
- NioSocketConnector connector = new NioSocketConnector();
- SocketAddress address = new InetSocketAddress( "127.0.0.1",
- 9123 );
- client.connect( connector,
- address );
-
- wiser = new Wiser();
- wiser.start();
- }
-
- protected void tearDown() throws Exception {
- super.tearDown();
- client.disconnect();
- server.stop();
-
- wiser.stop();
- }
-
- public void testDelayedEmailNotificationOnDeadline() throws Exception {
- Map vars = new HashedMap();
- vars.put( "users", users );
- vars.put( "groups", groups );
- vars.put( "now", new Date() );
-
- DefaultEscalatedDeadlineHandler notificationHandler = new DefaultEscalatedDeadlineHandler();
- notificationHandler.getHandler().setConnection( "localhost", "25", null, null );
- WorkItemManager manager = new DefaultWorkItemManager( null );
- notificationHandler.setManager( manager );
-
- MockUserInfo userInfo = new MockUserInfo();
- userInfo.getEmails().put( users.get("tony"), "tony at domain.com" );
- userInfo.getEmails().put( users.get("darth"), "darth at domain.com" );
-
- userInfo.getLanguages().put( users.get("tony"), "en-UK" );
- userInfo.getLanguages().put( users.get("darth"), "en-UK" );
- notificationHandler.setUserInfo( userInfo );
-
- taskService.setEscalatedDeadlineHandler( notificationHandler );
-
- String string = toString( new InputStreamReader( getClass().getResourceAsStream( "Notification1.mvel" ) ) );
-
- BlockingAddTaskResponseHandler addTaskResponseHandler = new BlockingAddTaskResponseHandler();
- Task task = ( Task ) eval( new StringReader( string ), vars );
- client.addTask( task, addTaskResponseHandler );
- long taskId = addTaskResponseHandler.getTaskId();
-
- Content content = new Content();
- content.setContent( "['subject' : 'My Subject', 'body' : 'My Body']".getBytes() );
- BlockingSetContentResponseHandler setContentResponseHandler = new BlockingSetContentResponseHandler();
- client.setDocumentContent( taskId, content, setContentResponseHandler );
- long contentId = setContentResponseHandler.getContentId();
-
- // emails should not be set yet
- assertEquals(0, wiser.getMessages().size() );
- Thread.sleep( 1000 );
-
- // nor yet
- assertEquals(0, wiser.getMessages().size() );
-
- Thread.sleep( 6000 );
-
- // 1 email with two recipients should now exist
- assertEquals(2, wiser.getMessages().size() );
-
- List<String> list = new ArrayList<String>(2);
- list.add( wiser.getMessages().get( 0 ).getEnvelopeReceiver() );
- list.add( wiser.getMessages().get( 1 ).getEnvelopeReceiver() );
-
- assertTrue( list.contains("tony at domain.com"));
- assertTrue( list.contains("darth at domain.com"));
-
-
- MimeMessage msg = (( WiserMessage ) wiser.getMessages().get( 0 )).getMimeMessage();
- assertEquals( "My Body", msg.getContent() );
- assertEquals( "My Subject", msg.getSubject() );
- assertEquals( "from at domain.com", ((InternetAddress)msg.getFrom()[0]).getAddress() );
- assertEquals( "replyTo at domain.com", ((InternetAddress)msg.getReplyTo()[0]).getAddress() );
- assertEquals( "tony at domain.com", ((InternetAddress)msg.getRecipients( RecipientType.TO )[0]).getAddress() );
- assertEquals( "darth at domain.com", ((InternetAddress)msg.getRecipients( RecipientType.TO )[1]).getAddress() );
- }
-}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEscalationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEscalationTest.java 2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEscalationTest.java 2008-09-16 15:19:06 UTC (rev 22819)
@@ -43,7 +43,7 @@
List<Task> tasks = (List<Task>) eval( reader,
vars );
for ( Task task : tasks ) {
- taskService.addTask( task );
+ taskSession.addTask( task );
}
Thread.sleep( 4000 );
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEventMessagingTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEventMessagingTest.java 2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEventMessagingTest.java 2008-09-16 15:19:06 UTC (rev 22819)
@@ -15,6 +15,7 @@
import org.drools.eventmessaging.EventTriggerTransport;
import org.drools.eventmessaging.Payload;
import org.drools.task.BaseTest;
+import org.drools.task.MockUserInfo;
import org.drools.task.Status;
import org.drools.task.Task;
import org.drools.task.event.TaskClaimedEvent;
@@ -40,6 +41,18 @@
9123 );
client.connect( connector,
address );
+
+ MockUserInfo userInfo = new MockUserInfo();
+ userInfo.getEmails().put( users.get( "tony" ),
+ "tony at domain.com" );
+ userInfo.getEmails().put( users.get( "steve" ),
+ "steve at domain.com" );
+
+ userInfo.getLanguages().put( users.get( "tony" ),
+ "en-UK" );
+ userInfo.getLanguages().put( users.get( "steve" ),
+ "en-UK" );
+ taskService.setUserinfo( userInfo );
}
protected void tearDown() throws Exception {
@@ -75,9 +88,8 @@
BlockingEventResponseHandler handler = new BlockingEventResponseHandler();
client.registerForEvent( key, true, handler );
- taskService.claim( taskId, users.get( "darth" ).getId() );
+ taskSession.claim( taskId, users.get( "darth" ).getId() );
-
Payload payload = handler.getPayload();
TaskClaimedEvent event = ( TaskClaimedEvent ) payload.get();
assertNotNull( event );
Modified: 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 2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceTest.java 2008-09-16 15:19:06 UTC (rev 22819)
@@ -139,7 +139,7 @@
List<Task> tasks = (List<Task>) eval( reader,
vars );
for ( Task task : tasks ) {
- taskService.addTask( task );
+ taskSession.addTask( task );
}
reader = new InputStreamReader( getClass().getResourceAsStream( "QueryResults_PeopleAssignmentQuerries.mvel" ) );
Copied: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/DeadlineWithNotification.mvel (from rev 22782, labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/Notification1.mvel)
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/DeadlineWithNotification.mvel (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/DeadlineWithNotification.mvel 2008-09-16 15:19:06 UTC (rev 22819)
@@ -0,0 +1,29 @@
+with ( new Task() ) {
+ taskData = (with ( new TaskData() ) {
+ documentAccessType = AccessType.Inline,
+ documentType = "MVEL"
+ }),
+ deadlines = ( with ( new Deadlines() ) {
+ startDeadlines = [
+ (with (new Deadline()) {
+ date = new Date( now.time + 5000 ),
+ escalations = [
+ (with (new Escalation()) {
+ name = "My Start Escalation",
+ constraints = [new BooleanExpression( "mvel", "true" )],
+ notifications = [
+ (with (new EmailNotification()) {
+ recipients = [ users['tony' ], users['darth' ] ],
+ emailHeaders = [ 'en-UK' : (with (new EmailNotificationHeader()) {
+ language = 'en-UK',
+ subject = "@{doc.subject}",
+ body = "@{doc.body}"
+ }) ]
+ })
+ ]
+ })
+ ]
+ })
+ ]
+ })
+};
\ No newline at end of file
Property changes on: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/DeadlineWithNotification.mvel
___________________________________________________________________
Name: svn:mergeinfo
+
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/DeadlineWithReassignment.mvel
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/DeadlineWithReassignment.mvel (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/DeadlineWithReassignment.mvel 2008-09-16 15:19:06 UTC (rev 22819)
@@ -0,0 +1,25 @@
+with ( new Task() ) {
+ peopleAssignments = (with ( new PeopleAssignments() ) {
+ potentialOwners = [users['luke' ], users['tony']],
+ }),
+ taskData = (with ( new TaskData() ) {
+ documentAccessType = AccessType.Inline,
+ documentType = "MVEL"
+ }),
+ deadlines = ( with ( new Deadlines() ) {
+ startDeadlines = [
+ (with (new Deadline()) {
+ date = new Date( now.time + 5000 ),
+ escalations = [
+ (with (new Escalation()) {
+ name = "My Start Escalation",
+ constraints = [new BooleanExpression( "mvel", "true" )],
+ reassignments = [(with ( new Reassignment() ) {
+ potentialOwners = [users['bobba' ], users['jabba' ]]
+ })]
+ })
+ ]
+ })
+ ]
+ })
+};
\ No newline at end of file
Deleted: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/Notification1.mvel
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/Notification1.mvel 2008-09-16 15:00:14 UTC (rev 22818)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/service/Notification1.mvel 2008-09-16 15:19:06 UTC (rev 22819)
@@ -1,29 +0,0 @@
-with ( new Task() ) {
- taskData = (with ( new TaskData() ) {
- documentAccessType = AccessType.Inline,
- documentType = "MVEL"
- }),
- deadlines = ( with ( new Deadlines() ) {
- startDeadlines = [
- (with (new Deadline()) {
- date = new Date( now.time + 5000 ),
- escalations = [
- (with (new Escalation()) {
- name = "My Start Escalation",
- constraints = [new BooleanExpression( "mvel", "true" )],
- notifications = [
- (with (new EmailNotification()) {
- recipients = [ users['tony' ], users['darth' ] ],
- emailHeaders = [ 'en-UK' : (with (new EmailNotificationHeader()) {
- language = 'en-UK',
- subject = "@{doc.subject}",
- body = "@{doc.body}"
- }) ]
- })
- ]
- })
- ]
- })
- ]
- })
-};
\ No newline at end of file
More information about the jboss-svn-commits
mailing list