提交 17dc74bb 编写于 作者: F frederikheremans

ACT-209 createTime exposed on Task interface + querying possible for tasks...

ACT-209 createTime exposed on Task interface + querying possible for tasks created on/before/after given date
上级 8e0dd5da
......@@ -14,6 +14,7 @@ package org.activiti.engine.impl;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import org.activiti.engine.ActivitiException;
......@@ -44,6 +45,9 @@ public class TaskQueryImpl extends AbstractQuery<TaskQuery, Task> implements Tas
protected String processInstanceId;
protected String executionId;
protected TaskQueryProperty orderProperty;
protected Date createTime;
protected Date createTimeBefore;
protected Date createTimeAfter;
public TaskQueryImpl() {
}
......@@ -142,6 +146,21 @@ public class TaskQueryImpl extends AbstractQuery<TaskQuery, Task> implements Tas
return this;
}
public TaskQueryImpl createdOn(Date createTime) {
this.createTime = createTime;
return this;
}
public TaskQuery createdBefore(Date before) {
this.createTimeBefore = before;
return this;
}
public TaskQuery createdAfter(Date after) {
this.createTimeAfter = after;
return this;
}
public List<String> getCandidateGroups() {
if (candidateGroup!=null) {
return Collections.singletonList(candidateGroup);
......@@ -281,5 +300,14 @@ public class TaskQueryImpl extends AbstractQuery<TaskQuery, Task> implements Tas
public TaskQueryProperty getOrderProperty() {
return orderProperty;
}
public Date getCreateTime() {
return createTime;
}
public Date getCreateTimeBefore() {
return createTimeBefore;
}
public Date getCreateTimeAfter() {
return createTimeAfter;
}
}
......@@ -40,11 +40,13 @@ import org.activiti.engine.task.TaskQuery;
public class TaskServiceImpl extends ServiceImpl implements TaskService {
public Task newTask() {
return new TaskEntity(null);
return newTask(null);
}
public Task newTask(String taskId) {
return new TaskEntity(taskId);
TaskEntity task = TaskEntity.create();
task.setId(taskId);
return task;
}
public void saveTask(Task task) {
......
......@@ -12,6 +12,8 @@
*/
package org.activiti.engine.task;
import java.util.Date;
/** Represents one task for a human user.
......@@ -53,4 +55,7 @@ public interface Task {
String getProcessDefinitionId();
String getFormResourceKey();
Date getCreateTime();
}
......@@ -12,6 +12,8 @@
*/
package org.activiti.engine.task;
import java.util.Date;
import org.activiti.engine.query.Query;
/**
......@@ -61,7 +63,16 @@ public interface TaskQuery extends Query<TaskQuery, Task>{
/** Only select tasks for the given execution. */
TaskQuery executionId(String executionId);
/** Only select tasks that are created on the given date. **/
TaskQuery createdOn(Date createTime);
/** Only select tasks that are created before the given date. **/
TaskQuery createdBefore(Date before);
/** Only select tasks that are created after the given date. **/
TaskQuery createdAfter(Date after);
// ordering ////////////////////////////////////////////////////////////
/** Order by task id (needs to be followed by {@link #asc()} or {@link #desc()}). */
......
......@@ -139,6 +139,15 @@
<if test="executionId != null">
and T.EXECUTION_ID_ = #{executionId}
</if>
<if test="createTime != null">
and T.CREATE_TIME_ = #{createTime}
</if>
<if test="createTimeBefore != null">
and T.CREATE_TIME_ &lt; #{createTimeBefore}
</if>
<if test="createTimeAfter != null">
and T.CREATE_TIME_ &gt; #{createTimeAfter}
</if>
<if test="candidateUser != null || candidateGroups != null">
and T.ASSIGNEE_ is null
and I.TYPE_ = 'candidate'
......
......@@ -12,16 +12,20 @@
*/
package org.activiti.engine.test.api.task;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.impl.test.ActivitiInternalTestCase;
import org.activiti.engine.impl.util.ClockUtil;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
/**
* @author Joram Barrez
* @author Frederik Heremans
*/
public class TaskQueryTest extends ActivitiInternalTestCase {
......@@ -283,6 +287,49 @@ public class TaskQueryTest extends ActivitiInternalTestCase {
}
}
public void testQueryCreatedOn() throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS");
// Exact matching of createTime, should result in 6 tasks
Date createTime = sdf.parse("01/01/2001 01:01:01.000");
TaskQuery query = taskService.createTaskQuery().createdOn(createTime);
assertEquals(6, query.count());
assertEquals(6, query.list().size());
}
public void testQueryCreatedBefore() throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS");
// Should result in 7 tasks
Date before = sdf.parse("03/02/2002 02:02:02.000");
TaskQuery query = taskService.createTaskQuery().createdBefore(before);
assertEquals(7, query.count());
assertEquals(7, query.list().size());
before = sdf.parse("01/01/2001 01:01:01.000");
query = taskService.createTaskQuery().createdBefore(before);
assertEquals(0, query.count());
assertEquals(0, query.list().size());
}
public void testQueryCreatedAfter() throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS");
// Should result in 3 tasks
Date after = sdf.parse("03/03/2003 03:03:03.000");
TaskQuery query = taskService.createTaskQuery().createdAfter(after);
assertEquals(3, query.count());
assertEquals(3, query.list().size());
after = sdf.parse("05/05/2005 05:05:05.000");
query = taskService.createTaskQuery().createdAfter(after);
assertEquals(0, query.count());
assertEquals(0, query.list().size());
}
public void testQueryPaging() {
TaskQuery query = taskService.createTaskQuery().candidateUser("kermit");
......@@ -330,10 +377,12 @@ public class TaskQueryTest extends ActivitiInternalTestCase {
* assigned to accountancy group - 1 task assigned to both the management and
* accountancy group
*/
private List<String> generateTestTasks() {
private List<String> generateTestTasks() throws Exception {
List<String> ids = new ArrayList<String>();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS");
// 6 tasks for kermit
ClockUtil.setCurrentTime(sdf.parse("01/01/2001 01:01:01.000"));
for (int i = 0; i < 6; i++) {
Task task = taskService.newTask();
task.setName("testTask");
......@@ -344,6 +393,7 @@ public class TaskQueryTest extends ActivitiInternalTestCase {
taskService.addCandidateUser(task.getId(), "kermit");
}
ClockUtil.setCurrentTime(sdf.parse("02/02/2002 02:02:02.000"));
// 1 task for gonzo
Task task = taskService.newTask();
task.setName("gonzoTask");
......@@ -353,6 +403,7 @@ public class TaskQueryTest extends ActivitiInternalTestCase {
taskService.setAssignee(task.getId(), "gonzo");
ids.add(task.getId());
ClockUtil.setCurrentTime(sdf.parse("03/03/2003 03:03:03.000"));
// 2 tasks for management group
for (int i = 0; i < 2; i++) {
task = taskService.newTask();
......@@ -363,6 +414,7 @@ public class TaskQueryTest extends ActivitiInternalTestCase {
ids.add(task.getId());
}
ClockUtil.setCurrentTime(sdf.parse("04/04/2004 04:04:04.000"));
// 2 tasks for accountancy group
for (int i = 0; i < 2; i++) {
task = taskService.newTask();
......@@ -373,6 +425,7 @@ public class TaskQueryTest extends ActivitiInternalTestCase {
ids.add(task.getId());
}
ClockUtil.setCurrentTime(sdf.parse("05/05/2005 05:05:05.000"));
// 1 task assigned to management and accountancy group
task = taskService.newTask();
task.setName("managementAndAccountancyTask");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册