[jboss-svn-commits] JBL Code SVN: r24980 - in labs/jbossrules/trunk/drools-process/drools-process-task: src/main/java/org/drools/process/workitem/wsht and 5 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Jan 28 12:41:28 EST 2009
Author: salaboy21
Date: 2009-01-28 12:41:27 -0500 (Wed, 28 Jan 2009)
New Revision: 24980
Added:
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/OnAllSubTasksEndParentEndStrategy.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/OnParentAbortAllSubTasksEndStrategy.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/SubTasksStrategy.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/SubTasksStrategyFactory.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/InternalTaskEventListener.java
Modified:
labs/jbossrules/trunk/drools-process/drools-process-task/pom.xml
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Task.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/TaskData.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/CommandName.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskClient.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/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/main/resources/META-INF/persistence.xml
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/process/workitem/wsht/WSHumanTaskHandlerTest.java
Log:
JBRULES-1900: Task parent/child relationships support
- Closing the issue, tests working with SubTasksStrategy extensible
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/pom.xml 2009-01-28 17:26:05 UTC (rev 24979)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/pom.xml 2009-01-28 17:41:27 UTC (rev 24980)
@@ -11,7 +11,20 @@
<artifactId>drools-process-task</artifactId>
<packaging>jar</packaging>
<name>Drools :: Process :: Task</name>
-
+
+ <!--build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.3</version>
+ <configuration>
+ <argLine>-Xdebug -Djava.compiler=none -Xnoagent -Xrunjdwp:transport=dt_socket,server=n,address=${jpda.address}</argLine>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build-->
+
<dependencies>
<dependency>
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java 2009-01-28 17:26:05 UTC (rev 24979)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java 2009-01-28 17:41:27 UTC (rev 24980)
@@ -22,8 +22,11 @@
import org.drools.task.AccessType;
import org.drools.task.Content;
import org.drools.task.I18NText;
+import org.drools.task.OnParentAbortAllSubTasksEndStrategy;
import org.drools.task.OrganizationalEntity;
import org.drools.task.PeopleAssignments;
+import org.drools.task.SubTasksStrategy;
+import org.drools.task.SubTasksStrategyFactory;
import org.drools.task.Task;
import org.drools.task.TaskData;
import org.drools.task.User;
@@ -95,7 +98,23 @@
TaskData taskData = new TaskData();
taskData.setWorkItemId(workItem.getId());
taskData.setSkipable(!"false".equals(workItem.getParameter("Skippable")));
- task.setTaskData(taskData);
+ //Sub Task Data
+ Long parentId = (Long) workItem.getParameter("ParentId");
+ if(parentId != null){
+ taskData.setParentId(parentId);
+ }
+
+ String subTaskStrategiesCommaSeparated = (String) workItem.getParameter("SubTaskStrategies");
+ if(subTaskStrategiesCommaSeparated!= null && !subTaskStrategiesCommaSeparated.equals("")){
+ String[] subTaskStrategies = subTaskStrategiesCommaSeparated.split(",");
+ List<SubTasksStrategy> strategies = new ArrayList<SubTasksStrategy>();
+ for(String subTaskStrategyString : subTaskStrategies){
+ SubTasksStrategy subTaskStrategy = SubTasksStrategyFactory.newStrategy(subTaskStrategyString);
+ strategies.add(subTaskStrategy);
+ }
+ task.setSubTaskStrategies(strategies);
+ }
+
String actorId = (String) workItem.getParameter("ActorId");
if (actorId != null) {
PeopleAssignments assignments = new PeopleAssignments();
@@ -106,13 +125,20 @@
user.setId(id.trim());
potentialOwners.add(user);
}
+ //Set the first user as creator ID??? hmmm might be wrong
+ if (potentialOwners.size() > 0){
+ taskData.setCreatedBy((User)potentialOwners.get(0));
+ }
+
assignments.setPotentialOwners(potentialOwners);
List<OrganizationalEntity> businessAdministrators = new ArrayList<OrganizationalEntity>();
businessAdministrators.add(new User("Administrator"));
assignments.setBusinessAdministrators(businessAdministrators);
task.setPeopleAssignments(assignments);
}
-
+
+ task.setTaskData(taskData);
+
ContentData content = null;
Object contentObject = workItem.getParameter("Content");
if (contentObject != null) {
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/OnAllSubTasksEndParentEndStrategy.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/OnAllSubTasksEndParentEndStrategy.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/OnAllSubTasksEndParentEndStrategy.java 2009-01-28 17:41:27 UTC (rev 24980)
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2009 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.task;
+
+import java.util.List;
+import javax.persistence.Entity;
+import org.drools.task.event.InternalTaskEventListener;
+import org.drools.task.query.TaskSummary;
+import org.drools.task.service.TaskService;
+import org.drools.task.service.TaskServiceSession;
+
+/**
+ *
+ * @author salaboy
+ */
+ at Entity
+public class OnAllSubTasksEndParentEndStrategy extends SubTasksStrategy {
+
+ public OnAllSubTasksEndParentEndStrategy() {
+ }
+
+ public OnAllSubTasksEndParentEndStrategy(String name) {
+ this.setName(name);
+ }
+
+ public void execute(TaskServiceSession taskServiceSession, TaskService service, Task parentTask) {
+
+ List<TaskSummary> subTasks = taskServiceSession.getSubTasksByParent(parentTask.getId(), "en-UK");
+
+ if (subTasks.size() == 0) {
+ // trigger event support
+ service.addEventListener(new InternalTaskEventListener(taskServiceSession));
+
+ service.getEventSupport().fireTaskCompleted( parentTask.getId(),
+ parentTask.getTaskData().getActualOwner().getId() );
+ }
+ }
+}
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/OnParentAbortAllSubTasksEndStrategy.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/OnParentAbortAllSubTasksEndStrategy.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/OnParentAbortAllSubTasksEndStrategy.java 2009-01-28 17:41:27 UTC (rev 24980)
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2009 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.task;
+
+import java.util.List;
+import javax.persistence.Entity;
+import org.drools.task.event.InternalTaskEventListener;
+import org.drools.task.query.TaskSummary;
+import org.drools.task.service.TaskService;
+import org.drools.task.service.TaskServiceSession;
+
+/**
+ *
+ * @author salaboy
+ */
+ at Entity
+public class OnParentAbortAllSubTasksEndStrategy extends SubTasksStrategy {
+
+ public OnParentAbortAllSubTasksEndStrategy(){}
+
+ public OnParentAbortAllSubTasksEndStrategy(String name) {
+ this.setName(name);
+ }
+
+
+
+ public void execute(TaskServiceSession taskServiceSession, TaskService service, Task task) {
+
+ List<TaskSummary> subTasks = taskServiceSession.getSubTasksByParent(task.getId(), "en-UK");
+ for(TaskSummary taskSummary : subTasks){
+ Task subTask = taskServiceSession.getTask(taskSummary.getId());
+ service.addEventListener(new InternalTaskEventListener(taskServiceSession));
+
+ service.getEventSupport().fireTaskCompleted( subTask.getId(),
+ subTask.getTaskData().getActualOwner().getId() );
+ }
+ }
+
+
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/SubTasksStrategy.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/SubTasksStrategy.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/SubTasksStrategy.java 2009-01-28 17:41:27 UTC (rev 24980)
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2009 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.task;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.io.Serializable;
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.DiscriminatorType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import org.drools.task.service.TaskService;
+import org.drools.task.service.TaskServiceSession;
+
+/**
+ *
+ * @author salaboy
+ */
+
+ at Entity
+ at Inheritance(strategy=InheritanceType.SINGLE_TABLE)
+ at DiscriminatorColumn(discriminatorType=DiscriminatorType.STRING, name="DTYPE",length=100)
+public abstract class SubTasksStrategy implements Externalizable {
+ @Id @GeneratedValue(strategy = GenerationType.AUTO)
+ private long id;
+ private String name;
+
+ public abstract void execute(TaskServiceSession taskServiceSession, TaskService service, Task task);
+
+ /**
+ * @return the id
+ */
+ public long getId() {
+ return id;
+ }
+
+ /**
+ * @param id the id to set
+ */
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeLong( id );
+ out.writeUTF( name );
+ }
+ public void readExternal(ObjectInput in) throws IOException,
+ ClassNotFoundException {
+ id = in.readLong();
+ name = in.readUTF();
+ }
+
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @param name the name to set
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/SubTasksStrategyFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/SubTasksStrategyFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/SubTasksStrategyFactory.java 2009-01-28 17:41:27 UTC (rev 24980)
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2009 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.task;
+
+/**
+ *
+ * @author salaboy
+ */
+public class SubTasksStrategyFactory {
+
+ public SubTasksStrategyFactory() {
+
+ }
+ public static SubTasksStrategy newStrategy(String type){
+ if(type!= null && !type.equals("")){
+ if(type.equals("OnParentAbortAllSubTasksEnd")){
+ return new OnParentAbortAllSubTasksEndStrategy("OnParentAbortAllSubTasksEnd");
+ }
+ if(type.equals("OnAllSubTasksEndParentEnd")){
+ return new OnAllSubTasksEndParentEndStrategy("OnAllSubTasksEndParentEnd");
+ }
+
+ }
+
+
+ return null;
+ }
+
+
+
+
+}
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 2009-01-28 17:26:05 UTC (rev 24979)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/Task.java 2009-01-28 17:41:27 UTC (rev 24980)
@@ -4,12 +4,15 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Embedded;
import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@@ -21,11 +24,11 @@
@Entity
public class Task implements Externalizable {
/**
- * WSHT uses a name for the unique identifier, for now we use a generated ID which is also the key, which can be
+ * WSHT uses a name for the unique identifier, for now we use a generated ID which is also the key, which can be
* mapped to the name or a unique name field added later.
*/
@Id
- @GeneratedValue(strategy = GenerationType.AUTO)
+ @GeneratedValue(strategy = GenerationType.AUTO)
private long id;
/**
@@ -33,103 +36,123 @@
* default value is 0.
*/
private int priority;
-
+
@OneToMany(cascade = CascadeType.ALL)
- @JoinColumn(name = "Task_Names_Id", nullable = true)
+ @JoinColumn(name = "Task_Names_Id", nullable = true)
private List<I18NText> names = Collections.emptyList();
-
+
@OneToMany(cascade = CascadeType.ALL)
- @JoinColumn(name = "Task_Subjects_Id", nullable = true)
+ @JoinColumn(name = "Task_Subjects_Id", nullable = true)
private List<I18NText> subjects = Collections.emptyList();
-
+
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "Task_Descriptions_Id", nullable = true)
- private List<I18NText> descriptions = Collections.emptyList();
-
+ private List<I18NText> descriptions = Collections.emptyList();
+
@Embedded
- private PeopleAssignments peopleAssignments;
+ private PeopleAssignments peopleAssignments;
- @Embedded
+ @Embedded
private Delegation delegation;
@Embedded
- private TaskData taskData;
-
- @Embedded
+ private TaskData taskData;
+
+ @Embedded
private Deadlines deadlines;
-
+
+ @OneToMany(cascade = CascadeType.ALL)
+ @JoinColumn(name = "Task_Id", nullable = true)
+ private List<SubTasksStrategy> subTaskStrategies = Collections.emptyList();
+
public Task() {
}
-
+
public void writeExternal(ObjectOutput out) throws IOException {
out.writeLong( id );
out.writeInt( priority );
-
+
CollectionUtils.writeI18NTextList( names, out );
CollectionUtils.writeI18NTextList( subjects, out );
CollectionUtils.writeI18NTextList( descriptions, out );
-
+
if ( peopleAssignments != null ) {
out.writeBoolean( true );
peopleAssignments.writeExternal( out );
} else {
out.writeBoolean( false );
}
-
+
if ( delegation != null ) {
out.writeBoolean( true );
delegation.writeExternal( out );
} else {
out.writeBoolean( false );
}
-
+
if ( taskData != null ) {
out.writeBoolean( true );
taskData.writeExternal( out );
} else {
out.writeBoolean( false );
}
-
+
if ( deadlines != null ) {
out.writeBoolean( true );
deadlines.writeExternal( out );
} else {
out.writeBoolean( false );
}
-
- }
-
+
+ out.writeInt( subTaskStrategies.size() );
+ for( SubTasksStrategy strategy : subTaskStrategies ) {
+ out.writeUTF(strategy.getName());
+ strategy.writeExternal( out );
+ }
+ }
+
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
id = in.readLong();
priority = in.readInt();
-
+
names = CollectionUtils.readI18NTextList( in );
subjects = CollectionUtils.readI18NTextList( in );
descriptions = CollectionUtils.readI18NTextList( in );
-
+
if ( in.readBoolean() ) {
peopleAssignments = new PeopleAssignments();
peopleAssignments.readExternal( in );
}
-
+
if ( in.readBoolean() ) {
delegation = new Delegation();
delegation.readExternal( in );
}
-
+
if ( in.readBoolean() ) {
taskData = new TaskData();
taskData.readExternal( in );
}
-
+
if ( in.readBoolean() ) {
deadlines = new Deadlines();
deadlines.readExternal( in );
}
- }
+ int size = in.readInt();
+ List<SubTasksStrategy> list = new ArrayList<SubTasksStrategy>(size);
+ for ( int i = 0; i < size; i++ ) {
+ String name = in.readUTF();
+ SubTasksStrategy strategy = SubTasksStrategyFactory.newStrategy(name) ;
+ strategy.readExternal( in );
+ list.add( strategy );
+ }
+ subTaskStrategies = list;
+
+ }
+
public Long getId() {
return id;
}
@@ -145,7 +168,7 @@
public void setPriority(int priority) {
this.priority = priority;
}
-
+
public List<I18NText> getNames() {
return names;
}
@@ -161,14 +184,14 @@
public void setSubjects(List<I18NText> subjects) {
this.subjects = subjects;
}
-
+
public List<I18NText> getDescriptions() {
return descriptions;
- }
+ }
public void setDescriptions(List<I18NText> descriptions) {
this.descriptions = descriptions;
- }
+ }
public PeopleAssignments getPeopleAssignments() {
return peopleAssignments;
@@ -206,14 +229,14 @@
public int hashCode() {
final int prime = 31;
int result = 1;
- result = prime * result + priority;
+ result = prime * result + priority;
result = prime * result + CollectionUtils.hashCode( descriptions );
result = prime * result + CollectionUtils.hashCode( names );
- result = prime * result + CollectionUtils.hashCode( subjects );
+ result = prime * result + CollectionUtils.hashCode( subjects );
result = prime * result + ((peopleAssignments == null) ? 0 : peopleAssignments.hashCode());
result = prime * result + ((delegation == null) ? 0 : delegation.hashCode());
result = prime * result + ((taskData == null) ? 0 : taskData.hashCode());
- result = prime * result + ((deadlines == null) ? 0 : deadlines.hashCode());
+ result = prime * result + ((deadlines == null) ? 0 : deadlines.hashCode());
return result;
}
@@ -225,7 +248,7 @@
Task other = (Task) obj;
if ( deadlines == null ) {
if ( other.deadlines != null ) {
-
+
}
} else if ( !deadlines.equals( other.deadlines ) ) return false;
if ( delegation == null ) {
@@ -233,8 +256,8 @@
} else if ( !delegation.equals( other.delegation ) ) return false;
if ( peopleAssignments == null ) {
if ( other.peopleAssignments != null ) return false;
- } else if ( !peopleAssignments.equals( other.peopleAssignments ) ) return false;
-
+ } else if ( !peopleAssignments.equals( other.peopleAssignments ) ) return false;
+
if ( priority != other.priority ) return false;
if ( taskData == null ) {
if ( other.taskData != null ) return false;
@@ -242,5 +265,21 @@
return ( CollectionUtils.equals( descriptions, other.descriptions ) && CollectionUtils.equals( names, other.names )
&& CollectionUtils.equals( subjects, other.subjects ));
}
-
+
+ /**
+ * @return the subTaskStrategies
+ */
+ public List<SubTasksStrategy> getSubTaskStrategies() {
+ return subTaskStrategies;
+ }
+
+ /**
+ * @param subTaskStrategies the subTaskStrategies to set
+ */
+ public void setSubTaskStrategies(List<SubTasksStrategy> subTaskStrategies) {
+ this.subTaskStrategies = subTaskStrategies;
+ }
+
+
+
}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/TaskData.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/TaskData.java 2009-01-28 17:26:05 UTC (rev 24979)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/TaskData.java 2009-01-28 17:41:27 UTC (rev 24980)
@@ -24,7 +24,7 @@
Externalizable {
@Enumerated(EnumType.STRING)
private Status status = Status.Created; // initial default state
-
+
private Status previousStatus = null;
@ManyToOne()
@@ -40,9 +40,9 @@
private Date expirationTime;
private boolean skipable;
-
+
private long workItemId = -1;
-
+
private AccessType documentAccessType;
private String documentType;
@@ -54,7 +54,7 @@
private String outputType;
private long outputContentId = -1;
-
+
private String faultName;
private AccessType faultAccessType;
@@ -62,7 +62,9 @@
private String faultType;
private long faultContentId = -1;
-
+
+ private long parentId = -1;
+
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "TaskData_Comments_Id", nullable = true)
private List<Comment> comments = Collections.emptyList();
@@ -78,13 +80,13 @@
} else {
out.writeBoolean( false );
}
-
+
if ( previousStatus != null ) {
out.writeBoolean( true );
out.writeUTF( previousStatus.toString() );
} else {
out.writeBoolean( false );
- }
+ }
if ( actualOwner != null ) {
out.writeBoolean( true );
@@ -120,86 +122,93 @@
} else {
out.writeBoolean( false );
}
-
+
out.writeBoolean( skipable );
-
+
if ( workItemId != -1 ) {
out.writeBoolean( true );
out.writeLong( workItemId );
} else {
out.writeBoolean( false );
}
-
+
if ( documentAccessType != null ) {
out.writeBoolean( true );
out.writeObject( documentAccessType );
} else {
out.writeBoolean( false );
}
-
+
if ( documentType != null ) {
out.writeBoolean( true );
out.writeUTF( documentType );
} else {
out.writeBoolean( false );
}
-
+
if ( documentContentId != -1 ) {
out.writeBoolean( true );
out.writeLong( documentContentId );
} else {
out.writeBoolean( false );
}
-
+
if ( outputAccessType != null ) {
out.writeBoolean( true );
out.writeObject( outputAccessType );
} else {
out.writeBoolean( false );
}
-
+
if ( outputType != null ) {
out.writeBoolean( true );
out.writeUTF( outputType );
} else {
out.writeBoolean( false );
}
-
+
if ( outputContentId != -1 ) {
out.writeBoolean( true );
out.writeLong( outputContentId );
} else {
out.writeBoolean( false );
}
-
+
if ( faultName != null ) {
out.writeBoolean( true );
out.writeUTF( faultName );
} else {
out.writeBoolean( false );
}
-
+
if ( faultAccessType != null ) {
out.writeBoolean( true );
out.writeObject( faultAccessType );
} else {
out.writeBoolean( false );
}
-
+
if ( faultType != null ) {
out.writeBoolean( true );
out.writeUTF( faultType );
} else {
out.writeBoolean( false );
}
-
+
if ( faultContentId != -1 ) {
out.writeBoolean( true );
out.writeLong( faultContentId );
} else {
out.writeBoolean( false );
}
-
+
+ if ( parentId != -1 ) {
+ out.writeBoolean( true );
+ out.writeLong( parentId );
+ } else {
+ out.writeBoolean( false );
+ }
+
CollectionUtils.writeCommentList( comments,
out );
CollectionUtils.writeAttachmentList( attachments,
@@ -211,7 +220,7 @@
if ( in.readBoolean() ) {
status = Status.valueOf( in.readUTF() );
}
-
+
if ( in.readBoolean() ) {
previousStatus = Status.valueOf( in.readUTF() );
}
@@ -243,7 +252,7 @@
if ( in.readBoolean() ) {
workItemId = in.readLong();
}
-
+
if ( in.readBoolean() ) {
documentAccessType = (AccessType) in.readObject();
}
@@ -251,11 +260,11 @@
if ( in.readBoolean() ) {
documentType = in.readUTF();
}
-
+
if ( in.readBoolean() ) {
documentContentId = in.readLong();
}
-
+
if ( in.readBoolean() ) {
outputAccessType = (AccessType) in.readObject();
}
@@ -263,15 +272,15 @@
if ( in.readBoolean() ) {
outputType = in.readUTF();
}
-
+
if ( in.readBoolean() ) {
outputContentId = in.readLong();
}
-
+
if ( in.readBoolean() ) {
faultName = in.readUTF();
}
-
+
if ( in.readBoolean() ) {
faultAccessType = (AccessType) in.readObject();
}
@@ -279,11 +288,14 @@
if ( in.readBoolean() ) {
faultType = in.readUTF();
}
-
+
if ( in.readBoolean() ) {
faultContentId = in.readLong();
}
-
+
+ if ( in.readBoolean() ) {
+ parentId = in.readLong();
+ }
comments = CollectionUtils.readCommentList( in );
attachments = CollectionUtils.readAttachmentList( in );
@@ -296,7 +308,7 @@
public void setStatus(Status status) {
previousStatus = this.status;
this.status = status;
- }
+ }
public Status getPreviousStatus() {
return previousStatus;
@@ -353,15 +365,15 @@
public void setSkipable(boolean isSkipable) {
this.skipable = isSkipable;
}
-
+
public void setWorkItemId(long workItemId) {
this.workItemId = workItemId;
}
-
+
public long getWorkItemId() {
return workItemId;
}
-
+
public AccessType getDocumentAccessType() {
return documentAccessType;
}
@@ -372,7 +384,7 @@
public String getDocumentType() {
return documentType;
- }
+ }
public long getDocumentContentId() {
return documentContentId;
@@ -458,6 +470,14 @@
this.attachments = attachments;
}
+ public long getParentId() {
+ return parentId;
+ }
+
+ public void setParentId(long parentId) {
+ this.parentId = parentId;
+ }
+
@Override
public int hashCode() {
final int prime = 31;
@@ -471,6 +491,7 @@
result = prime * result + ((status == null) ? 0 : status.hashCode());
result = prime * result + ((previousStatus == null) ? 0 : previousStatus.hashCode());
result = prime * result + ((workItemId == -1) ? 0 : (int) workItemId);
+ //Should I add parentId to this hashCode?
return result;
}
@@ -506,22 +527,24 @@
} else if ( !status.equals( other.status ) ) return false;
if ( previousStatus == null ) {
if ( other.previousStatus != null ) return false;
- } else if ( !previousStatus.equals( other.previousStatus ) ) return false;
+ } else if ( !previousStatus.equals( other.previousStatus ) ) return false;
if ( activationTime == null ) {
if ( other.activationTime != null ) return false;
} else if ( activationTime.getTime() != other.activationTime.getTime() ) return false;
-
+
if ( workItemId != other.workItemId ) return false;
-
+
if ( documentAccessType == null ) {
if ( other.documentAccessType != null ) return false;
} else if ( !documentAccessType.equals( other.documentAccessType ) ) return false;
-
+
if ( documentContentId != other.documentContentId ) return false;
if ( documentType == null ) {
if ( other.documentType != null ) return false;
- } else if ( !documentType.equals( other.documentType ) ) return false;
-
+ } else if ( !documentType.equals( other.documentType ) ) return false;
+ // I think this is OK!
+ if ( parentId != other.parentId ) return false;
+
return CollectionUtils.equals( attachments,
other.attachments ) && CollectionUtils.equals( comments,
other.comments );
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/InternalTaskEventListener.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/InternalTaskEventListener.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/InternalTaskEventListener.java 2009-01-28 17:41:27 UTC (rev 24980)
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2009 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.task.event;
+
+
+import javax.persistence.EntityManager;
+import org.drools.task.Status;
+import org.drools.task.Task;
+import org.drools.task.service.Operation;
+import org.drools.task.service.TaskServiceSession;
+
+/**
+ *
+ * @author salaboy
+ */
+public class InternalTaskEventListener extends DefaultTaskEventListener{
+ private TaskServiceSession session;
+ private EntityManager em;
+ public InternalTaskEventListener(TaskServiceSession session){
+ this.session = session;
+ this.em = session.getEntityManager();
+ }
+
+ @Override
+ public void taskClaimed(TaskClaimedEvent event) {
+ }
+
+ @Override
+ public void taskCompleted(TaskCompletedEvent event) {
+
+ if(! em.getTransaction().isActive()){
+ em.getTransaction().begin();
+ }
+ Task task = session.getTask(event.getTaskId());
+ task.getTaskData().setStatus(Status.Completed);
+ em.persist(task);
+ em.getTransaction().commit();
+
+ }
+
+ @Override
+ public void taskFailed(TaskFailedEvent event) {
+ }
+
+ @Override
+ public void taskSkipped(TaskSkippedEvent event) {
+ }
+}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/CommandName.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/CommandName.java 2009-01-28 17:26:05 UTC (rev 24979)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/CommandName.java 2009-01-28 17:41:27 UTC (rev 24980)
@@ -63,6 +63,8 @@
QueryTasksAssignedAsBusinessAdministrator,
QueryTasksAssignedAsExcludedOwner,
QueryTasksAssignedAsPotentialOwner,
+ QuerySubTasksAssignedAsPotentialOwner,
+ QueryGetSubTasksByParentTaskId,
QueryTasksAssignedAsRecipient,
QueryTasksAssignedAsTaskInitiator,
QueryTasksAssignedAsTaskStakeholder,
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskClient.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskClient.java 2009-01-28 17:26:05 UTC (rev 24979)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskClient.java 2009-01-28 17:41:27 UTC (rev 24980)
@@ -409,6 +409,33 @@
session.write( cmd );
}
+
+ public void getSubTasksAssignedAsPotentialOwner(long parentId, String userId,
+ String language,
+ TaskSummaryResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>( 2 );
+ args.add( parentId );
+ args.add( userId );
+ args.add( language );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.QuerySubTasksAssignedAsPotentialOwner,
+ args );
+ handler.addResponseHandler( cmd.getId(),
+ responseHandler );
+ session.write( cmd );
+ }
+ public void getSubTasksByParent(long parentId, TaskSummaryResponseHandler responseHandler) {
+ List<Object> args = new ArrayList<Object>( 2 );
+ args.add( parentId );
+ //@TODO: un hard code this
+ args.add( "en-UK" );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.QueryGetSubTasksByParentTaskId,
+ args );
+ handler.addResponseHandler( cmd.getId(),
+ responseHandler );
+ session.write( cmd );
+ }
public void getTasksAssignedAsRecipient(String userId,
String language,
TaskSummaryResponseHandler responseHandler) {
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServerHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServerHandler.java 2009-01-28 17:26:05 UTC (rev 24979)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServerHandler.java 2009-01-28 17:41:27 UTC (rev 24980)
@@ -227,6 +227,33 @@
session.write( resultsCmnd );
break;
}
+ case QuerySubTasksAssignedAsPotentialOwner : {
+ response = CommandName.QueryTaskSummaryResponse;
+ List<TaskSummary> results = taskSession.getSubTasksAssignedAsPotentialOwner( (Long) cmd.getArguments().get( 0 ),
+ (String) cmd.getArguments().get( 1 ),
+ (String) cmd.getArguments().get( 2 ) );
+ List args = new ArrayList( 1 );
+ args.add( results );
+ Command resultsCmnd = new Command( cmd.getId(),
+ CommandName.QueryTaskSummaryResponse,
+ args );
+ session.write( resultsCmnd );
+ break;
+ }
+ case QueryGetSubTasksByParentTaskId : {
+ response = CommandName.QueryTaskSummaryResponse;
+ List<TaskSummary> results = taskSession.getSubTasksByParent((Long) cmd.getArguments().get( 0 ),
+ (String) cmd.getArguments().get( 1 ));
+ List args = new ArrayList( 1 );
+ args.add( results );
+ Command resultsCmnd = new Command( cmd.getId(),
+ CommandName.QueryTaskSummaryResponse,
+ args );
+ session.write( resultsCmnd );
+ break;
+ }
+
+
case QueryTasksAssignedAsTaskInitiator : {
response = CommandName.QueryTaskSummaryResponse;
List<TaskSummary> results = taskSession.getTasksAssignedAsTaskInitiator( (String) cmd.getArguments().get( 0 ),
Modified: 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 2009-01-28 17:26:05 UTC (rev 24979)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServiceSession.java 2009-01-28 17:41:27 UTC (rev 24980)
@@ -15,6 +15,7 @@
import org.drools.RuleBase;
import org.drools.StatefulSession;
+import org.drools.eventmessaging.EventKeys;
import org.drools.task.Attachment;
import org.drools.task.Comment;
import org.drools.task.Content;
@@ -23,6 +24,7 @@
import org.drools.task.OrganizationalEntity;
import org.drools.task.PeopleAssignments;
import org.drools.task.Status;
+import org.drools.task.SubTasksStrategy;
import org.drools.task.Task;
import org.drools.task.TaskData;
import org.drools.task.User;
@@ -36,6 +38,7 @@
private EntityManager em;
private Map<String, RuleBase> ruleBases;
private Map<String, Map<String, Object>> globals;
+ private EventKeys eventKeys;
public TaskServiceSession(TaskService service,
EntityManager em) {
@@ -361,7 +364,9 @@
targetEntityId );
}
+ if(! em.getTransaction().isActive()){
em.getTransaction().begin();
+ }
TaskError error = null;
try {
Map<Operation, List<OperationCommand>> dsl = service.getOperations();
@@ -401,6 +406,7 @@
// trigger event support
service.getEventSupport().fireTaskCompleted( task.getId(),
task.getTaskData().getActualOwner().getId() );
+ checkSubTaskStrategy(task);
break;
}
@@ -427,6 +433,7 @@
// trigger event support
service.getEventSupport().fireTaskSkipped( task.getId(),
userId );
+ checkSubTaskStrategy(task);
break;
}
@@ -619,7 +626,30 @@
List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsPotentialOwner.getResultList();
return list;
}
+ public List<TaskSummary> getSubTasksAssignedAsPotentialOwner(long parentId, String userId,
+ String language) {
+ Query tasksAssignedAsPotentialOwner = em.createNamedQuery( "SubTasksAssignedAsPotentialOwner" );
+ tasksAssignedAsPotentialOwner.setParameter( "parentId",
+ parentId );
+ tasksAssignedAsPotentialOwner.setParameter( "userId",
+ userId );
+ tasksAssignedAsPotentialOwner.setParameter( "language",
+ language );
+ List<TaskSummary> list = (List<TaskSummary>) tasksAssignedAsPotentialOwner.getResultList();
+ return list;
+ }
+ public List<TaskSummary> getSubTasksByParent(long parentId, String language) {
+ Query subTaskByParent = em.createNamedQuery( "GetSubTasksByParentTaskId" );
+ subTaskByParent.setParameter( "parentId",
+ parentId );
+ subTaskByParent.setParameter( "language",
+ language );
+
+ List<TaskSummary> list = (List<TaskSummary>) subTaskByParent.getResultList();
+ return list;
+ }
+
public List<TaskSummary> getTasksAssignedAsRecipient(String userId,
String language) {
Query tasksAssignedAsRecipient = em.createNamedQuery( "TasksAssignedAsRecipient" );
@@ -684,4 +714,19 @@
}
return sb.toString();
}
+
+ private void checkSubTaskStrategy(Task task){
+ if(task != null){
+ for(SubTasksStrategy strategy : task.getSubTaskStrategies()){
+ strategy.execute(this, service, task);
+ }
+ }
+ Task parentTask = null;
+ if(task.getTaskData().getParentId() != -1){
+ parentTask = getTask(task.getTaskData().getParentId());
+ for(SubTasksStrategy strategy : parentTask.getSubTaskStrategies()){
+ strategy.execute(this, service, parentTask);
+ }
+ }
+ }
}
Modified: 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 2009-01-28 17:26:05 UTC (rev 24979)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/orm.xml 2009-01-28 17:41:27 UTC (rev 24980)
@@ -123,6 +123,90 @@
</query>
<!-- hint name="org.hibernate.timeout" value="200"/ -->
</named-query>
+ <named-query name="SubTasksAssignedAsPotentialOwner">
+ <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 left join t.taskData.actualOwner,
+ I18NText names,
+ I18NText subjects,
+ I18NText descriptions,
+ OrganizationalEntity potentialOwners
+where
+ t.taskData.parentId = :parentId and
+ 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.status in ('Created', 'Ready', 'Reserved', 'InProgress', 'Suspended') and
+
+ t.taskData.expirationTime is null
+ </query>
+ <!-- hint name="org.hibernate.timeout" value="200"/ -->
+ </named-query>
+
+<named-query name="GetSubTasksByParentTaskId">
+ <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,
+ I18NText names,
+ I18NText subjects,
+ I18NText descriptions
+
+where
+ t.taskData.parentId = :parentId 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.status in ('Created', 'Ready', 'Reserved', 'InProgress', 'Suspended') and
+
+ t.taskData.expirationTime is null
+ </query>
+ <!-- hint name="org.hibernate.timeout" value="200"/ -->
+ </named-query>
+
+
<named-query name="TasksAssignedAsRecipient">
<query>
select
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/persistence.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/persistence.xml 2009-01-28 17:26:05 UTC (rev 24979)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/persistence.xml 2009-01-28 17:41:27 UTC (rev 24980)
@@ -1,47 +1,51 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<persistence version="1.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd
-http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd" xmlns:orm="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/persistence">
- <persistence-unit name="org.drools.task">
- <provider>org.hibernate.ejb.HibernatePersistence</provider>
- <class>org.drools.task.Attachment</class>
- <class>org.drools.task.Content</class>
- <class>org.drools.task.BooleanExpression</class>
- <class>org.drools.task.Comment</class>
- <class>org.drools.task.Deadline</class>
- <class>org.drools.task.Comment</class>
- <class>org.drools.task.Deadline</class>
- <class>org.drools.task.Delegation</class>
- <class>org.drools.task.Escalation</class>
- <class>org.drools.task.Group</class>
- <class>org.drools.task.I18NText</class>
- <class>org.drools.task.Notification</class>
- <class>org.drools.task.EmailNotification</class>
- <class>org.drools.task.EmailNotificationHeader</class>
- <class>org.drools.task.PeopleAssignments</class>
- <class>org.drools.task.Reassignment</class>
- <class>org.drools.task.Status</class>
- <class>org.drools.task.Task</class>
- <class>org.drools.task.TaskData</class>
- <class>org.drools.task.User</class>
-
- <properties>
- <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
- <property name="hibernate.connection.driver_class" value="org.h2.Driver"/>
- <property name="hibernate.connection.url" value="jdbc:h2:mem:mydb" />
- <!-- property name="hibernate.connection.url" value="jdbc:h2:file:\dev\drools\trunk7\drools-process\drools-process-task\mydb"/ -->
-
-<!-- <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>-->
-<!-- <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/> -->
-<!-- <property name="hibernate.connection.url" value="jdbc:postgresql://localhost/postgres"/>-->
-
-
- <property name="hibernate.connection.username" value="sa"/>
- <property name="hibernate.connection.password" value="sasa"/>
- <property name="hibernate.connection.autocommit" value="false" />
- <property name="hibernate.max_fetch_depth" value="3"/>
- <property name="hibernate.hbm2ddl.auto" value="create" />
- <property name="hibernate.show_sql" value="true" />
- </properties>
- </persistence-unit>
-
-</persistence>
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<persistence version="1.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd
+http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd" xmlns:orm="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/persistence">
+ <persistence-unit name="org.drools.task">
+ <provider>org.hibernate.ejb.HibernatePersistence</provider>
+ <class>org.drools.task.Attachment</class>
+ <class>org.drools.task.Content</class>
+ <class>org.drools.task.BooleanExpression</class>
+ <class>org.drools.task.Comment</class>
+ <class>org.drools.task.Deadline</class>
+ <class>org.drools.task.Comment</class>
+ <class>org.drools.task.Deadline</class>
+ <class>org.drools.task.Delegation</class>
+ <class>org.drools.task.Escalation</class>
+ <class>org.drools.task.Group</class>
+ <class>org.drools.task.I18NText</class>
+ <class>org.drools.task.Notification</class>
+ <class>org.drools.task.EmailNotification</class>
+ <class>org.drools.task.EmailNotificationHeader</class>
+ <class>org.drools.task.PeopleAssignments</class>
+ <class>org.drools.task.Reassignment</class>
+ <class>org.drools.task.Status</class>
+ <class>org.drools.task.Task</class>
+ <class>org.drools.task.TaskData</class>
+ <class>org.drools.task.SubTasksStrategy</class>
+ <class>org.drools.task.OnParentAbortAllSubTasksEndStrategy</class>
+ <class>org.drools.task.OnAllSubTasksEndParentEndStrategy</class>
+
+ <class>org.drools.task.User</class>
+
+ <properties>
+ <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
+ <property name="hibernate.connection.driver_class" value="org.h2.Driver"/>
+ <property name="hibernate.connection.url" value="jdbc:h2:mem:mydb" />
+ <!-- property name="hibernate.connection.url" value="jdbc:h2:file:\dev\drools\trunk7\drools-process\drools-process-task\mydb"/ -->
+
+<!-- <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>-->
+<!-- <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/> -->
+<!-- <property name="hibernate.connection.url" value="jdbc:postgresql://localhost/postgres"/>-->
+
+
+ <property name="hibernate.connection.username" value="sa"/>
+ <property name="hibernate.connection.password" value="sasa"/>
+ <property name="hibernate.connection.autocommit" value="false" />
+ <property name="hibernate.max_fetch_depth" value="3"/>
+ <property name="hibernate.hbm2ddl.auto" value="create" />
+ <property name="hibernate.show_sql" value="true" />
+ </properties>
+ </persistence-unit>
+
+</persistence>
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/process/workitem/wsht/WSHumanTaskHandlerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/process/workitem/wsht/WSHumanTaskHandlerTest.java 2009-01-28 17:26:05 UTC (rev 24979)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/process/workitem/wsht/WSHumanTaskHandlerTest.java 2009-01-28 17:41:27 UTC (rev 24980)
@@ -2,7 +2,6 @@
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
-import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetSocketAddress;
@@ -18,7 +17,6 @@
import org.drools.runtime.process.WorkItemManager;
import org.drools.task.AccessType;
import org.drools.task.BaseTest;
-import org.drools.task.Content;
import org.drools.task.Status;
import org.drools.task.Task;
import org.drools.task.query.TaskSummary;
@@ -90,7 +88,7 @@
System.out.println("Completing task " + task.getId());
operationResponseHandler = new BlockingTaskOperationResponseHandler();
client.complete(task.getId(), "Darth Vader", null, operationResponseHandler);
- operationResponseHandler.waitTillDone(5000);
+ operationResponseHandler.waitTillDone(15000);
System.out.println("Completed task " + task.getId());
assertTrue(manager.isCompleted());
@@ -323,7 +321,305 @@
assertEquals("Darth Vader", results.get("ActorId"));
assertEquals("This is the result", results.get("Result"));
}
-
+
+ public void testOnAllSubTasksEndParentEndStrategy() throws Exception {
+
+ TestWorkItemManager manager = new TestWorkItemManager();
+ //Create the parent task
+ WorkItemImpl workItem = new WorkItemImpl();
+ workItem.setName("Human Task");
+ workItem.setParameter("TaskName", "TaskNameParent");
+ workItem.setParameter("Comment", "CommentParent");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader");
+ //Set the subtask policy
+ workItem.setParameter("SubTaskStrategies", "OnAllSubTasksEndParentEnd");
+ handler.executeWorkItem(workItem, manager);
+
+
+ Thread.sleep(500);
+
+ //Test if the task is succesfully created
+ BlockingTaskSummaryResponseHandler responseHandler = new BlockingTaskSummaryResponseHandler();
+ client.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+ List<TaskSummary> tasks = responseHandler.getResults();
+ assertEquals(1, tasks.size());
+ TaskSummary task = tasks.get(0);
+ assertEquals("TaskNameParent", task.getName());
+ assertEquals(10, task.getPriority());
+ assertEquals("CommentParent", task.getDescription());
+ assertEquals(Status.Reserved, task.getStatus());
+ assertEquals("Darth Vader", task.getActualOwner().getId());
+
+
+ //Create the child task
+ workItem = new WorkItemImpl();
+ workItem.setName("Human Task");
+ workItem.setParameter("TaskName", "TaskNameChild1");
+ workItem.setParameter("Comment", "CommentChild1");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader");
+ workItem.setParameter("ParentId", task.getId());
+ handler.executeWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ //Create the child task2
+ workItem = new WorkItemImpl();
+ workItem.setName("Human Task2");
+ workItem.setParameter("TaskName", "TaskNameChild2");
+ workItem.setParameter("Comment", "CommentChild2");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader");
+ workItem.setParameter("ParentId", task.getId());
+ handler.executeWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ //Start the parent task
+ System.out.println("Starting task " + task.getId());
+ BlockingTaskOperationResponseHandler operationResponseHandler = new BlockingTaskOperationResponseHandler();
+ client.start(task.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(5000);
+ System.out.println("Started task " + task.getId());
+
+ //Check if the parent task is InProgress
+ BlockingGetTaskResponseHandler getTaskResponseHandler = new BlockingGetTaskResponseHandler();
+ client.getTask( task.getId(), getTaskResponseHandler );
+ Task parentTask = getTaskResponseHandler.getTask();
+ assertEquals( Status.InProgress, parentTask.getTaskData().getStatus() );
+ assertEquals( users.get( "darth" ), parentTask.getTaskData().getActualOwner() );
+
+ //Get all the subtask created for the parent task based on the potential owner
+ responseHandler = new BlockingTaskSummaryResponseHandler();
+ client.getSubTasksAssignedAsPotentialOwner(parentTask.getId(),"Darth Vader", "en-UK", responseHandler);
+ List<TaskSummary> subTasks = responseHandler.getResults();
+ assertEquals(2, subTasks.size());
+ TaskSummary subTaskSummary1 = subTasks.get(0);
+ TaskSummary subTaskSummary2 = subTasks.get(1);
+ assertNotNull(subTaskSummary1);
+ assertNotNull(subTaskSummary2);
+
+ //Starting the sub task 1
+ System.out.println("Starting sub task " + subTaskSummary1.getId());
+ operationResponseHandler = new BlockingTaskOperationResponseHandler();
+ client.start(subTaskSummary1.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(5000);
+ System.out.println("Started sub task " + subTaskSummary1.getId());
+
+ //Starting the sub task 2
+ System.out.println("Starting sub task " + subTaskSummary2.getId());
+ operationResponseHandler = new BlockingTaskOperationResponseHandler();
+ client.start(subTaskSummary2.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(5000);
+ System.out.println("Started sub task " + subTaskSummary2.getId());
+
+
+
+ //Check if the child task 1 is InProgress
+ getTaskResponseHandler = new BlockingGetTaskResponseHandler();
+ client.getTask( subTaskSummary1.getId(), getTaskResponseHandler );
+ Task subTask1 = getTaskResponseHandler.getTask();
+ assertEquals( Status.InProgress, subTask1.getTaskData().getStatus() );
+ assertEquals( users.get( "darth" ), subTask1.getTaskData().getActualOwner() );
+
+
+ //Check if the child task 2 is InProgress
+ getTaskResponseHandler = new BlockingGetTaskResponseHandler();
+ client.getTask( subTaskSummary2.getId(), getTaskResponseHandler );
+ Task subTask2 = getTaskResponseHandler.getTask();
+ assertEquals( Status.InProgress, subTask2.getTaskData().getStatus() );
+ assertEquals( users.get( "darth" ), subTask2.getTaskData().getActualOwner() );
+
+ // Complete the child task 1
+ System.out.println("Completing sub task " + subTask1.getId());
+ operationResponseHandler = new BlockingTaskOperationResponseHandler();
+ client.complete( subTask1.getId(),"Darth Vader" , null, operationResponseHandler );
+ operationResponseHandler.waitTillDone( 5000 );
+ System.out.println("Completed sub task " + subTask1.getId());
+
+ // Complete the child task 2
+ System.out.println("Completing sub task " + subTask2.getId());
+ operationResponseHandler = new BlockingTaskOperationResponseHandler();
+ client.complete( subTask2.getId(),"Darth Vader" , null, operationResponseHandler );
+ operationResponseHandler.waitTillDone( 5000 );
+ System.out.println("Completed sub task " + subTask2.getId());
+
+
+
+ //Check if the child task 1 is Completed
+
+ getTaskResponseHandler = new BlockingGetTaskResponseHandler();
+ client.getTask( subTask1.getId(), getTaskResponseHandler );
+ subTask1 = getTaskResponseHandler.getTask();
+ assertEquals( Status.Completed, subTask1.getTaskData().getStatus() );
+ assertEquals( users.get( "darth" ), subTask1.getTaskData().getActualOwner() );
+
+ //Check if the child task 2 is Completed
+
+ getTaskResponseHandler = new BlockingGetTaskResponseHandler();
+ client.getTask( subTask2.getId(), getTaskResponseHandler );
+ subTask2 = getTaskResponseHandler.getTask();
+ assertEquals( Status.Completed, subTask2.getTaskData().getStatus() );
+ assertEquals( users.get( "darth" ), subTask2.getTaskData().getActualOwner() );
+
+
+
+ // Check is the parent task is Complete
+ getTaskResponseHandler = new BlockingGetTaskResponseHandler();
+ client.getTask( parentTask.getId(), getTaskResponseHandler );
+ parentTask = getTaskResponseHandler.getTask();
+ assertEquals( Status.Completed, parentTask.getTaskData().getStatus() );
+ assertEquals( users.get( "darth" ), parentTask.getTaskData().getActualOwner() );
+
+
+
+
+
+ assertTrue(manager.isCompleted());
+ }
+
+ public void testOnParentAbortAllSubTasksEndStrategy() throws Exception {
+
+ TestWorkItemManager manager = new TestWorkItemManager();
+ //Create the parent task
+ WorkItemImpl workItem = new WorkItemImpl();
+ workItem.setName("Human Task");
+ workItem.setParameter("TaskName", "TaskNameParent");
+ workItem.setParameter("Comment", "CommentParent");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader");
+ //Set the subtask policy
+ workItem.setParameter("SubTaskStrategies", "OnParentAbortAllSubTasksEnd");
+ handler.executeWorkItem(workItem, manager);
+
+
+ Thread.sleep(500);
+
+ //Test if the task is succesfully created
+ BlockingTaskSummaryResponseHandler responseHandler = new BlockingTaskSummaryResponseHandler();
+ client.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+ List<TaskSummary> tasks = responseHandler.getResults();
+ assertEquals(1, tasks.size());
+ TaskSummary task = tasks.get(0);
+ assertEquals("TaskNameParent", task.getName());
+ assertEquals(10, task.getPriority());
+ assertEquals("CommentParent", task.getDescription());
+ assertEquals(Status.Reserved, task.getStatus());
+ assertEquals("Darth Vader", task.getActualOwner().getId());
+
+
+ //Create the child task
+ workItem = new WorkItemImpl();
+ workItem.setName("Human Task");
+ workItem.setParameter("TaskName", "TaskNameChild1");
+ workItem.setParameter("Comment", "CommentChild1");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader");
+ workItem.setParameter("ParentId", task.getId());
+ handler.executeWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ //Create the child task2
+ workItem = new WorkItemImpl();
+ workItem.setName("Human Task2");
+ workItem.setParameter("TaskName", "TaskNameChild2");
+ workItem.setParameter("Comment", "CommentChild2");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader");
+ workItem.setParameter("ParentId", task.getId());
+ handler.executeWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ //Start the parent task
+ System.out.println("Starting task " + task.getId());
+ BlockingTaskOperationResponseHandler operationResponseHandler = new BlockingTaskOperationResponseHandler();
+ client.start(task.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(5000);
+ System.out.println("Started task " + task.getId());
+
+ //Check if the parent task is InProgress
+ BlockingGetTaskResponseHandler getTaskResponseHandler = new BlockingGetTaskResponseHandler();
+ client.getTask( task.getId(), getTaskResponseHandler );
+ Task parentTask = getTaskResponseHandler.getTask();
+ assertEquals( Status.InProgress, parentTask.getTaskData().getStatus() );
+ assertEquals( users.get( "darth" ), parentTask.getTaskData().getActualOwner() );
+
+ //Get all the subtask created for the parent task based on the potential owner
+ responseHandler = new BlockingTaskSummaryResponseHandler();
+ client.getSubTasksAssignedAsPotentialOwner(parentTask.getId(),"Darth Vader", "en-UK", responseHandler);
+ List<TaskSummary> subTasks = responseHandler.getResults();
+ assertEquals(2, subTasks.size());
+ TaskSummary subTaskSummary1 = subTasks.get(0);
+ TaskSummary subTaskSummary2 = subTasks.get(1);
+ assertNotNull(subTaskSummary1);
+ assertNotNull(subTaskSummary2);
+
+ //Starting the sub task 1
+ System.out.println("Starting sub task " + subTaskSummary1.getId());
+ operationResponseHandler = new BlockingTaskOperationResponseHandler();
+ client.start(subTaskSummary1.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(5000);
+ System.out.println("Started sub task " + subTaskSummary1.getId());
+
+ //Starting the sub task 2
+ System.out.println("Starting sub task " + subTaskSummary2.getId());
+ operationResponseHandler = new BlockingTaskOperationResponseHandler();
+ client.start(subTaskSummary2.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(5000);
+ System.out.println("Started sub task " + subTaskSummary2.getId());
+
+
+
+ //Check if the child task 1 is InProgress
+ getTaskResponseHandler = new BlockingGetTaskResponseHandler();
+ client.getTask( subTaskSummary1.getId(), getTaskResponseHandler );
+ Task subTask1 = getTaskResponseHandler.getTask();
+ assertEquals( Status.InProgress, subTask1.getTaskData().getStatus() );
+ assertEquals( users.get( "darth" ), subTask1.getTaskData().getActualOwner() );
+
+
+ //Check if the child task 2 is InProgress
+ getTaskResponseHandler = new BlockingGetTaskResponseHandler();
+ client.getTask( subTaskSummary2.getId(), getTaskResponseHandler );
+ Task subTask2 = getTaskResponseHandler.getTask();
+ assertEquals( Status.InProgress, subTask2.getTaskData().getStatus() );
+ assertEquals( users.get( "darth" ), subTask2.getTaskData().getActualOwner() );
+
+ // Complete the parent task
+ System.out.println("Completing parent task " + parentTask.getId());
+ operationResponseHandler = new BlockingTaskOperationResponseHandler();
+ client.skip( parentTask.getId(), "Darth Vader", operationResponseHandler );
+ operationResponseHandler.waitTillDone( 5000 );
+ System.out.println("Completed parent task " + parentTask.getId());
+
+
+
+
+ //Check if the child task 1 is Completed
+ getTaskResponseHandler = new BlockingGetTaskResponseHandler();
+ client.getTask( subTaskSummary1.getId(), getTaskResponseHandler );
+ subTask1 = getTaskResponseHandler.getTask();
+ assertEquals( Status.Completed, subTask1.getTaskData().getStatus() );
+ assertEquals( users.get( "darth" ), subTask1.getTaskData().getActualOwner() );
+
+
+ //Check if the child task 2 is Completed
+ getTaskResponseHandler = new BlockingGetTaskResponseHandler();
+ client.getTask( subTaskSummary2.getId(), getTaskResponseHandler );
+ subTask2 = getTaskResponseHandler.getTask();
+ assertEquals( Status.Completed, subTask2.getTaskData().getStatus() );
+ assertEquals( users.get( "darth" ), subTask2.getTaskData().getActualOwner() );
+
+
+
+ assertTrue(manager.isCompleted());
+ }
+
+
+
private class TestWorkItemManager implements WorkItemManager {
private boolean completed;
More information about the jboss-svn-commits
mailing list