From 17dc74bb5151681d768df6774019157ffcd537b5 Mon Sep 17 00:00:00 2001 From: frederikheremans Date: Fri, 15 Oct 2010 11:30:25 +0000 Subject: [PATCH] ACT-209 createTime exposed on Task interface + querying possible for tasks created on/before/after given date --- .../activiti/engine/impl/TaskQueryImpl.java | 28 ++++++++++ .../activiti/engine/impl/TaskServiceImpl.java | 6 +- .../java/org/activiti/engine/task/Task.java | 5 ++ .../org/activiti/engine/task/TaskQuery.java | 11 ++++ .../org/activiti/db/ibatis/task.mapping.xml | 9 +++ .../engine/test/api/task/TaskQueryTest.java | 55 ++++++++++++++++++- 6 files changed, 111 insertions(+), 3 deletions(-) diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/TaskQueryImpl.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/TaskQueryImpl.java index 6d1a05301d..a23aea64b6 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/TaskQueryImpl.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/TaskQueryImpl.java @@ -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 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 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 getCandidateGroups() { if (candidateGroup!=null) { return Collections.singletonList(candidateGroup); @@ -281,5 +300,14 @@ public class TaskQueryImpl extends AbstractQuery implements Tas public TaskQueryProperty getOrderProperty() { return orderProperty; } + public Date getCreateTime() { + return createTime; + } + public Date getCreateTimeBefore() { + return createTimeBefore; + } + public Date getCreateTimeAfter() { + return createTimeAfter; + } } diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/TaskServiceImpl.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/TaskServiceImpl.java index b4e8f61a53..65d1fe54be 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/TaskServiceImpl.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/TaskServiceImpl.java @@ -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) { diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/task/Task.java b/modules/activiti-engine/src/main/java/org/activiti/engine/task/Task.java index eda7f2acdc..c75405981f 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/task/Task.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/task/Task.java @@ -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(); + } diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/task/TaskQuery.java b/modules/activiti-engine/src/main/java/org/activiti/engine/task/TaskQuery.java index dc8387de0a..827a8d0cdf 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/task/TaskQuery.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/task/TaskQuery.java @@ -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{ /** 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()}). */ diff --git a/modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/task.mapping.xml b/modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/task.mapping.xml index ee5b2debb7..46ce972061 100644 --- a/modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/task.mapping.xml +++ b/modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/task.mapping.xml @@ -139,6 +139,15 @@ and T.EXECUTION_ID_ = #{executionId} + + and T.CREATE_TIME_ = #{createTime} + + + and T.CREATE_TIME_ < #{createTimeBefore} + + + and T.CREATE_TIME_ > #{createTimeAfter} + and T.ASSIGNEE_ is null and I.TYPE_ = 'candidate' diff --git a/modules/activiti-engine/src/test/java/org/activiti/engine/test/api/task/TaskQueryTest.java b/modules/activiti-engine/src/test/java/org/activiti/engine/test/api/task/TaskQueryTest.java index b8ae9f23f3..a0c564f260 100644 --- a/modules/activiti-engine/src/test/java/org/activiti/engine/test/api/task/TaskQueryTest.java +++ b/modules/activiti-engine/src/test/java/org/activiti/engine/test/api/task/TaskQueryTest.java @@ -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 generateTestTasks() { + private List generateTestTasks() throws Exception { List ids = new ArrayList(); + 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"); -- GitLab