From 41a9557921b16b1500fb6bfd2debdc5a02bd7a8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Kl=C3=A4ger?= Date: Wed, 29 Nov 2017 08:55:05 +0100 Subject: [PATCH 1/3] TSK-43 Add businessProcessId and parentBusinessProcessId to Task and TaskMapper --- .../src/main/java/pro/taskana/model/Task.java | 18 ++++++++++++++++++ .../pro/taskana/model/mappings/TaskMapper.java | 8 +++++--- .../src/main/resources/sql/taskana-schema.sql | 2 ++ .../pro/taskana/impl/TaskServiceImplTest.java | 4 ++++ 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/lib/taskana-core/src/main/java/pro/taskana/model/Task.java b/lib/taskana-core/src/main/java/pro/taskana/model/Task.java index 3db15b472..fd08e21bc 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/model/Task.java +++ b/lib/taskana-core/src/main/java/pro/taskana/model/Task.java @@ -22,6 +22,8 @@ public class Task { private TaskState state; private Classification classification; private String workbasketId; + private String businessProcessId; + private String parentBusinessProcessId; private String owner; private ObjectReference primaryObjRef; private boolean isRead; @@ -143,6 +145,22 @@ public class Task { this.workbasketId = workbasketId; } + public String getBusinessProcessId() { + return businessProcessId; + } + + public void setBusinessProcessId(String businessProcessId) { + this.businessProcessId = businessProcessId; + } + + public String getParentBusinessProcessId() { + return parentBusinessProcessId; + } + + public void setParentBusinessProcessId(String parentBusinessProcessId) { + this.parentBusinessProcessId = parentBusinessProcessId; + } + public String getOwner() { return owner; } diff --git a/lib/taskana-core/src/main/java/pro/taskana/model/mappings/TaskMapper.java b/lib/taskana-core/src/main/java/pro/taskana/model/mappings/TaskMapper.java index e14acab81..e4ddf80c2 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/model/mappings/TaskMapper.java +++ b/lib/taskana-core/src/main/java/pro/taskana/model/mappings/TaskMapper.java @@ -34,6 +34,8 @@ public interface TaskMapper { @Result(property = "state", column = "STATE"), @Result(property = "classification", column = "CLASSIFICATION_ID", javaType = Classification.class, one = @One(select = CLASSIFICATION_FINDBYID)), @Result(property = "workbasketId", column = "WORKBASKETID"), + @Result(property = "businessProcessId", column = "BUSINESS_PROCESS_ID"), + @Result(property = "parentBusinessProcessId", column = "PARENT_BUSINESS_PROCESS_ID"), @Result(property = "owner", column = "OWNER"), @Result(property = "primaryObjRef", column = "PRIMARY_OBJ_REF_ID", javaType = ObjectReference.class, one = @One(select = OBJECTREFERENCEMAPPER_FINDBYID)), @Result(property = "isRead", column = "IS_READ"), @@ -82,12 +84,12 @@ public interface TaskMapper { @Result(column = "counter", property = "taskCounter") }) List getTaskCountByWorkbasketIdAndDaysInPastAndState(@Param("fromDate") Date fromDate, @Param("status") List states); - @Insert("INSERT INTO TASK(ID, CREATED, CLAIMED, COMPLETED, MODIFIED, PLANNED, DUE, NAME, DESCRIPTION, PRIORITY, STATE, CLASSIFICATION_ID, WORKBASKETID, OWNER, PRIMARY_OBJ_REF_ID, IS_READ, IS_TRANSFERRED, CUSTOM_ATTRIBUTES, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, CUSTOM_9, CUSTOM_10) " - + "VALUES(#{id}, #{created}, #{claimed}, #{completed}, #{modified}, #{planned}, #{due}, #{name}, #{description}, #{priority}, #{state}, #{classification.id}, #{workbasketId}, #{owner}, #{primaryObjRef.id}, #{isRead}, #{isTransferred}, #{customAttributes,jdbcType=BLOB,javaType=java.util.Map,typeHandler=pro.taskana.impl.persistence.MapTypeHandler}, #{custom1}, #{custom2}, #{custom3}, #{custom4}, #{custom5}, #{custom6}, #{custom7}, #{custom8}, #{custom9}, #{custom10})") + @Insert("INSERT INTO TASK(ID, CREATED, CLAIMED, COMPLETED, MODIFIED, PLANNED, DUE, NAME, DESCRIPTION, PRIORITY, STATE, CLASSIFICATION_ID, WORKBASKETID, BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, OWNER, PRIMARY_OBJ_REF_ID, IS_READ, IS_TRANSFERRED, CUSTOM_ATTRIBUTES, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, CUSTOM_9, CUSTOM_10) " + + "VALUES(#{id}, #{created}, #{claimed}, #{completed}, #{modified}, #{planned}, #{due}, #{name}, #{description}, #{priority}, #{state}, #{classification.id}, #{workbasketId}, #{businessProcessId}, #{parentBusinessProcessId}, #{owner}, #{primaryObjRef.id}, #{isRead}, #{isTransferred}, #{customAttributes,jdbcType=BLOB,javaType=java.util.Map,typeHandler=pro.taskana.impl.persistence.MapTypeHandler}, #{custom1}, #{custom2}, #{custom3}, #{custom4}, #{custom5}, #{custom6}, #{custom7}, #{custom8}, #{custom9}, #{custom10})") @Options(keyProperty = "id", keyColumn = "ID") void insert(Task task); - @Update("UPDATE TASK SET CLAIMED = #{claimed}, COMPLETED = #{completed}, MODIFIED = #{modified}, PLANNED = #{planned}, DUE = #{due}, NAME = #{name}, DESCRIPTION = #{description}, PRIORITY = #{priority}, STATE = #{state}, CLASSIFICATION_ID = #{classification.id}, WORKBASKETID = #{workbasketId}, OWNER = #{owner}, PRIMARY_OBJ_REF_ID = #{primaryObjRef.id}, IS_READ = #{isRead}, IS_TRANSFERRED = #{isTransferred}, CUSTOM_ATTRIBUTES = #{customAttributes,jdbcType=BLOB,javaType=java.util.Map,typeHandler=pro.taskana.impl.persistence.MapTypeHandler}, CUSTOM_1 = #{custom1}, CUSTOM_2 = #{custom2}, CUSTOM_3 = #{custom3}, CUSTOM_4 = #{custom4}, CUSTOM_5 = #{custom5}, CUSTOM_6 = #{custom6}, CUSTOM_7 = #{custom7}, CUSTOM_8 = #{custom8}, CUSTOM_9 = #{custom9}, CUSTOM_10 = #{custom10} " + @Update("UPDATE TASK SET CLAIMED = #{claimed}, COMPLETED = #{completed}, MODIFIED = #{modified}, PLANNED = #{planned}, DUE = #{due}, NAME = #{name}, DESCRIPTION = #{description}, PRIORITY = #{priority}, STATE = #{state}, CLASSIFICATION_ID = #{classification.id}, WORKBASKETID = #{workbasketId}, BUSINESS_PROCESS_ID = #{businessProcessId}, PARENT_BUSINESS_PROCESS_ID = #{parentBusinessProcessId}, OWNER = #{owner}, PRIMARY_OBJ_REF_ID = #{primaryObjRef.id}, IS_READ = #{isRead}, IS_TRANSFERRED = #{isTransferred}, CUSTOM_ATTRIBUTES = #{customAttributes,jdbcType=BLOB,javaType=java.util.Map,typeHandler=pro.taskana.impl.persistence.MapTypeHandler}, CUSTOM_1 = #{custom1}, CUSTOM_2 = #{custom2}, CUSTOM_3 = #{custom3}, CUSTOM_4 = #{custom4}, CUSTOM_5 = #{custom5}, CUSTOM_6 = #{custom6}, CUSTOM_7 = #{custom7}, CUSTOM_8 = #{custom8}, CUSTOM_9 = #{custom9}, CUSTOM_10 = #{custom10} " + "WHERE ID = #{id}") void update(Task task); diff --git a/lib/taskana-core/src/main/resources/sql/taskana-schema.sql b/lib/taskana-core/src/main/resources/sql/taskana-schema.sql index b8d5acdd0..5fe69ac83 100644 --- a/lib/taskana-core/src/main/resources/sql/taskana-schema.sql +++ b/lib/taskana-core/src/main/resources/sql/taskana-schema.sql @@ -19,6 +19,8 @@ CREATE TABLE TASK ( STATE VARCHAR(20) NULL, CLASSIFICATION_ID CHAR(40) NULL, WORKBASKETID CHAR(40) NULL, + BUSINESS_PROCESS_ID VARCHAR(128) NULL, + PARENT_BUSINESS_PROCESS_ID VARCHAR(128) NULL, OWNER VARCHAR(255) NULL, PRIMARY_OBJ_REF_ID CHAR(40) NULL, IS_READ BOOLEAN NOT NULL, diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/TaskServiceImplTest.java b/lib/taskana-core/src/test/java/pro/taskana/impl/TaskServiceImplTest.java index 80072dabe..c042f7374 100644 --- a/lib/taskana-core/src/test/java/pro/taskana/impl/TaskServiceImplTest.java +++ b/lib/taskana-core/src/test/java/pro/taskana/impl/TaskServiceImplTest.java @@ -71,12 +71,16 @@ public class TaskServiceImplTest { Task task = new Task(); task.setName("Unit Test Task"); task.setWorkbasketId("1"); + task.setBusinessProcessId("BPI1"); + task.setParentBusinessProcessId("PBPI1"); task = taskServiceImpl.create(task); Assert.assertNull(task.getOwner()); Assert.assertNotNull(task.getCreated()); Assert.assertNotNull(task.getModified()); Assert.assertNull(task.getCompleted()); Assert.assertEquals(task.getWorkbasketId(), "1"); + Assert.assertEquals(task.getBusinessProcessId(), "BPI1"); + Assert.assertEquals(task.getParentBusinessProcessId(), "PBPI1"); Assert.assertEquals(task.getState(), TaskState.READY); } From c483228651aaa035fa316d2b712f7d53bf3e4c5b Mon Sep 17 00:00:00 2001 From: Marcel Lengl <52546181+LenglBoy@users.noreply.github.com> Date: Wed, 29 Nov 2017 16:19:17 +0100 Subject: [PATCH 2/3] Added select statement to taskMapper, added new service-method, added it to rest-project and tested with authentification. --- .../main/java/pro/taskana/TaskService.java | 12 +++++++ .../pro/taskana/impl/TaskServiceImpl.java | 14 ++++++++ .../taskana/model/mappings/TaskMapper.java | 35 +++++++++++++++++++ .../java/pro/taskana/rest/TaskController.java | 18 ++++++++++ .../taskana/rest/WorkbasketController.java | 2 +- 5 files changed, 80 insertions(+), 1 deletion(-) diff --git a/lib/taskana-core/src/main/java/pro/taskana/TaskService.java b/lib/taskana-core/src/main/java/pro/taskana/TaskService.java index 469b583d4..6b5b9e0e7 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/TaskService.java +++ b/lib/taskana-core/src/main/java/pro/taskana/TaskService.java @@ -95,4 +95,16 @@ public interface TaskService { */ TaskQuery createTaskQuery(); + /** + * Getting a list of all Tasks which got matching workbasketIds and states. + * + * @param workbasketId where the tasks need to be in. + * @param taskState which is required for the request, + * @return a filled/empty list of tasks with attributes which are matching given params. + * + * @throws WorkbasketNotFoundException if the workbasketId can“t be resolved to a existing workbasket. + * @throws NotAuthorizedException if the current user got no rights for reading on this workbasket. + * @throws Exception if no result can be found by @{link TaskMapper}. + */ + List getTasksByWorkbasketIdAndState(String workbasketId, TaskState taskState) throws WorkbasketNotFoundException, NotAuthorizedException, Exception; } diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java index 91f53451d..0fb828bb7 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java @@ -4,6 +4,7 @@ import java.sql.Date; import java.sql.Timestamp; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; import org.slf4j.Logger; @@ -225,4 +226,17 @@ public class TaskServiceImpl implements TaskService { public TaskQuery createTaskQuery() { return new TaskQueryImpl(taskanaEngine); } + + @Override + public List getTasksByWorkbasketIdAndState(String workbasketId, TaskState taskState) throws WorkbasketNotFoundException, NotAuthorizedException, Exception { + List resultList = null; + try { + taskanaEngineImpl.openConnection(); + taskanaEngine.getWorkbasketService().checkAuthorization(workbasketId, WorkbasketAuthorization.READ); + resultList = taskMapper.findTasksByWorkbasketIdAndState(workbasketId, taskState); + } finally { + taskanaEngineImpl.returnConnection(); + } + return (resultList == null) ? new ArrayList<>() : resultList; + } } diff --git a/lib/taskana-core/src/main/java/pro/taskana/model/mappings/TaskMapper.java b/lib/taskana-core/src/main/java/pro/taskana/model/mappings/TaskMapper.java index e14acab81..300a29ae1 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/model/mappings/TaskMapper.java +++ b/lib/taskana-core/src/main/java/pro/taskana/model/mappings/TaskMapper.java @@ -94,4 +94,39 @@ public interface TaskMapper { @Delete("DELETE FROM TASK WHERE ID = #{id}") void delete(String id); + @Select("SELECT ID, CREATED, CLAIMED, COMPLETED, MODIFIED, PLANNED, DUE, NAME, DESCRIPTION, PRIORITY, STATE, CLASSIFICATION_ID, WORKBASKETID, OWNER, PRIMARY_OBJ_REF_ID, IS_READ, IS_TRANSFERRED, CUSTOM_ATTRIBUTES, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, CUSTOM_9, CUSTOM_10 " + + "FROM TASK " + + "WHERE WORKBASKETID = #{workbasketId} " + + "AND STATE = #{taskState}") + @Results(value = { + @Result(property = "id", column = "ID"), + @Result(property = "created", column = "CREATED"), + @Result(property = "claimed", column = "CLAIMED"), + @Result(property = "completed", column = "COMPLETED"), + @Result(property = "modified", column = "MODIFIED"), + @Result(property = "planned", column = "PLANNED"), + @Result(property = "due", column = "DUE"), + @Result(property = "name", column = "NAME"), + @Result(property = "description", column = "DESCRIPTION"), + @Result(property = "priority", column = "PRIORITY"), + @Result(property = "state", column = "STATE"), + @Result(property = "classification", column = "CLASSIFICATION_ID", javaType = Classification.class, one = @One(select = CLASSIFICATION_FINDBYID)), + @Result(property = "workbasketId", column = "WORKBASKETID"), + @Result(property = "owner", column = "OWNER"), + @Result(property = "primaryObjRef", column = "PRIMARY_OBJ_REF_ID", javaType = ObjectReference.class, one = @One(select = OBJECTREFERENCEMAPPER_FINDBYID)), + @Result(property = "isRead", column = "IS_READ"), + @Result(property = "isTransferred", column = "IS_TRANSFERRED"), + @Result(property = "customAttributes", column = "CUSTOM_ATTRIBUTES", jdbcType = JdbcType.BLOB, javaType = Map.class, typeHandler = MapTypeHandler.class), + @Result(property = "custom1", column = "CUSTOM_1"), + @Result(property = "custom2", column = "CUSTOM_2"), + @Result(property = "custom3", column = "CUSTOM_3"), + @Result(property = "custom4", column = "CUSTOM_4"), + @Result(property = "custom5", column = "CUSTOM_5"), + @Result(property = "custom6", column = "CUSTOM_6"), + @Result(property = "custom7", column = "CUSTOM_7"), + @Result(property = "custom8", column = "CUSTOM_8"), + @Result(property = "custom9", column = "CUSTOM_9"), + @Result(property = "custom10", column = "CUSTOM_10") + }) + List findTasksByWorkbasketIdAndState(@Param("workbasketId") String workbasketId, @Param("taskState") TaskState taskState); } diff --git a/rest/src/main/java/pro/taskana/rest/TaskController.java b/rest/src/main/java/pro/taskana/rest/TaskController.java index 8a4cb4300..f2fc03634 100644 --- a/rest/src/main/java/pro/taskana/rest/TaskController.java +++ b/rest/src/main/java/pro/taskana/rest/TaskController.java @@ -21,7 +21,9 @@ import org.springframework.web.bind.annotation.RestController; import pro.taskana.TaskService; import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.TaskNotFoundException; +import pro.taskana.exceptions.WorkbasketNotFoundException; import pro.taskana.model.Task; +import pro.taskana.model.TaskState; import pro.taskana.rest.query.TaskFilter; @RestController @@ -32,6 +34,7 @@ public class TaskController { @Autowired private TaskService taskService; + @Autowired private TaskFilter taskLogic; @@ -59,6 +62,21 @@ public class TaskController { } } + @RequestMapping(value = "/workbasket/{workbasketId}/state/{taskState}") + public ResponseEntity> getTasksByWorkbasketIdAndState( + @PathVariable(value = "workbasketId") String workbasketId, @PathVariable(value = "taskState") TaskState taskState) { + try { + List taskList = taskService.getTasksByWorkbasketIdAndState(workbasketId, taskState); + return ResponseEntity.status(HttpStatus.OK).body(taskList); + } catch (WorkbasketNotFoundException e) { + return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); + } catch (NotAuthorizedException e) { + return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); + } catch (Exception e) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); + } + } + @RequestMapping(method = RequestMethod.POST, value = "/{taskId}/claim") public ResponseEntity claimTask(@PathVariable String taskId, @RequestBody String userName) { // TODO verify user diff --git a/rest/src/main/java/pro/taskana/rest/WorkbasketController.java b/rest/src/main/java/pro/taskana/rest/WorkbasketController.java index fe5500d6e..aec1af8c3 100644 --- a/rest/src/main/java/pro/taskana/rest/WorkbasketController.java +++ b/rest/src/main/java/pro/taskana/rest/WorkbasketController.java @@ -71,7 +71,7 @@ public class WorkbasketController { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } } - + @RequestMapping(method = RequestMethod.POST) public ResponseEntity createWorkbasket(@RequestBody Workbasket workbasket) { Workbasket createdWorkbasket = workbasketService.createWorkbasket(workbasket); From 8deb653305c8499d3da2c04e7dcbc6188f813f72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Kl=C3=A4ger?= Date: Wed, 29 Nov 2017 08:55:05 +0100 Subject: [PATCH 3/3] TSK-43 Add businessProcessId and parentBusinessProcessId to Task and update TaskMapper as well as task.sql --- .../pro/taskana/impl/TaskServiceImpl.java | 6 ++++ .../src/main/java/pro/taskana/model/Task.java | 20 +++++++++++++ .../taskana/model/mappings/TaskMapper.java | 10 ++++--- .../src/main/resources/sql/taskana-schema.sql | 2 ++ .../pro/taskana/impl/TaskServiceImplTest.java | 4 +++ .../main/resources/sql/sample-data/task.sql | 28 +++++++++---------- 6 files changed, 52 insertions(+), 18 deletions(-) diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java index 91f53451d..ce31aaf49 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java @@ -34,6 +34,7 @@ public class TaskServiceImpl implements TaskService { private static final String ID_PREFIX_OBJECTR_EFERENCE = "ORI"; private static final String ID_PREFIX_TASK = "TKI"; + private static final String ID_PREFIX_BUSINESS_PROCESS = "BPI"; private TaskanaEngine taskanaEngine; private TaskanaEngineImpl taskanaEngineImpl; @@ -104,6 +105,11 @@ public class TaskServiceImpl implements TaskService { task.setRead(false); task.setTransferred(false); + // if no business process id is provided, a unique id is created. + if (task.getBusinessProcessId() == null) { + task.setBusinessProcessId(IdGenerator.generateWithPrefix(ID_PREFIX_BUSINESS_PROCESS)); + } + // insert ObjectReference if needed. if (task.getPrimaryObjRef() != null) { ObjectReference objectReference = this.objectReferenceMapper.findByObjectReference(task.getPrimaryObjRef()); diff --git a/lib/taskana-core/src/main/java/pro/taskana/model/Task.java b/lib/taskana-core/src/main/java/pro/taskana/model/Task.java index 3db15b472..400364842 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/model/Task.java +++ b/lib/taskana-core/src/main/java/pro/taskana/model/Task.java @@ -22,6 +22,8 @@ public class Task { private TaskState state; private Classification classification; private String workbasketId; + private String businessProcessId; + private String parentBusinessProcessId; private String owner; private ObjectReference primaryObjRef; private boolean isRead; @@ -143,6 +145,22 @@ public class Task { this.workbasketId = workbasketId; } + public String getBusinessProcessId() { + return businessProcessId; + } + + public void setBusinessProcessId(String businessProcessId) { + this.businessProcessId = businessProcessId; + } + + public String getParentBusinessProcessId() { + return parentBusinessProcessId; + } + + public void setParentBusinessProcessId(String parentBusinessProcessId) { + this.parentBusinessProcessId = parentBusinessProcessId; + } + public String getOwner() { return owner; } @@ -279,6 +297,8 @@ public class Task { sb.append(", state=" + state); sb.append(", classification=" + classification); sb.append(", workbasketId=" + workbasketId); + sb.append(", businessProcessId=" + businessProcessId); + sb.append(", parentBusinessProcessId=" + parentBusinessProcessId); sb.append(", owner=" + owner); sb.append(", primaryObjRef=" + primaryObjRef); sb.append(", isRead=" + isRead); diff --git a/lib/taskana-core/src/main/java/pro/taskana/model/mappings/TaskMapper.java b/lib/taskana-core/src/main/java/pro/taskana/model/mappings/TaskMapper.java index e14acab81..4c0d262aa 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/model/mappings/TaskMapper.java +++ b/lib/taskana-core/src/main/java/pro/taskana/model/mappings/TaskMapper.java @@ -17,7 +17,7 @@ public interface TaskMapper { String OBJECTREFERENCEMAPPER_FINDBYID = "pro.taskana.model.mappings.ObjectReferenceMapper.findById"; String CLASSIFICATION_FINDBYID = "pro.taskana.model.mappings.ClassificationMapper.findById"; - @Select("SELECT ID, CREATED, CLAIMED, COMPLETED, MODIFIED, PLANNED, DUE, NAME, DESCRIPTION, PRIORITY, STATE, CLASSIFICATION_ID, WORKBASKETID, OWNER, PRIMARY_OBJ_REF_ID, IS_READ, IS_TRANSFERRED, CUSTOM_ATTRIBUTES, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, CUSTOM_9, CUSTOM_10 " + @Select("SELECT ID, CREATED, CLAIMED, COMPLETED, MODIFIED, PLANNED, DUE, NAME, DESCRIPTION, PRIORITY, STATE, CLASSIFICATION_ID, WORKBASKETID, BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, OWNER, PRIMARY_OBJ_REF_ID, IS_READ, IS_TRANSFERRED, CUSTOM_ATTRIBUTES, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, CUSTOM_9, CUSTOM_10 " + "FROM TASK " + "WHERE ID = #{id}") @Results(value = { @@ -34,6 +34,8 @@ public interface TaskMapper { @Result(property = "state", column = "STATE"), @Result(property = "classification", column = "CLASSIFICATION_ID", javaType = Classification.class, one = @One(select = CLASSIFICATION_FINDBYID)), @Result(property = "workbasketId", column = "WORKBASKETID"), + @Result(property = "businessProcessId", column = "BUSINESS_PROCESS_ID"), + @Result(property = "parentBusinessProcessId", column = "PARENT_BUSINESS_PROCESS_ID"), @Result(property = "owner", column = "OWNER"), @Result(property = "primaryObjRef", column = "PRIMARY_OBJ_REF_ID", javaType = ObjectReference.class, one = @One(select = OBJECTREFERENCEMAPPER_FINDBYID)), @Result(property = "isRead", column = "IS_READ"), @@ -82,12 +84,12 @@ public interface TaskMapper { @Result(column = "counter", property = "taskCounter") }) List getTaskCountByWorkbasketIdAndDaysInPastAndState(@Param("fromDate") Date fromDate, @Param("status") List states); - @Insert("INSERT INTO TASK(ID, CREATED, CLAIMED, COMPLETED, MODIFIED, PLANNED, DUE, NAME, DESCRIPTION, PRIORITY, STATE, CLASSIFICATION_ID, WORKBASKETID, OWNER, PRIMARY_OBJ_REF_ID, IS_READ, IS_TRANSFERRED, CUSTOM_ATTRIBUTES, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, CUSTOM_9, CUSTOM_10) " - + "VALUES(#{id}, #{created}, #{claimed}, #{completed}, #{modified}, #{planned}, #{due}, #{name}, #{description}, #{priority}, #{state}, #{classification.id}, #{workbasketId}, #{owner}, #{primaryObjRef.id}, #{isRead}, #{isTransferred}, #{customAttributes,jdbcType=BLOB,javaType=java.util.Map,typeHandler=pro.taskana.impl.persistence.MapTypeHandler}, #{custom1}, #{custom2}, #{custom3}, #{custom4}, #{custom5}, #{custom6}, #{custom7}, #{custom8}, #{custom9}, #{custom10})") + @Insert("INSERT INTO TASK(ID, CREATED, CLAIMED, COMPLETED, MODIFIED, PLANNED, DUE, NAME, DESCRIPTION, PRIORITY, STATE, CLASSIFICATION_ID, WORKBASKETID, BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, OWNER, PRIMARY_OBJ_REF_ID, IS_READ, IS_TRANSFERRED, CUSTOM_ATTRIBUTES, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, CUSTOM_9, CUSTOM_10) " + + "VALUES(#{id}, #{created}, #{claimed}, #{completed}, #{modified}, #{planned}, #{due}, #{name}, #{description}, #{priority}, #{state}, #{classification.id}, #{workbasketId}, #{businessProcessId}, #{parentBusinessProcessId}, #{owner}, #{primaryObjRef.id}, #{isRead}, #{isTransferred}, #{customAttributes,jdbcType=BLOB,javaType=java.util.Map,typeHandler=pro.taskana.impl.persistence.MapTypeHandler}, #{custom1}, #{custom2}, #{custom3}, #{custom4}, #{custom5}, #{custom6}, #{custom7}, #{custom8}, #{custom9}, #{custom10})") @Options(keyProperty = "id", keyColumn = "ID") void insert(Task task); - @Update("UPDATE TASK SET CLAIMED = #{claimed}, COMPLETED = #{completed}, MODIFIED = #{modified}, PLANNED = #{planned}, DUE = #{due}, NAME = #{name}, DESCRIPTION = #{description}, PRIORITY = #{priority}, STATE = #{state}, CLASSIFICATION_ID = #{classification.id}, WORKBASKETID = #{workbasketId}, OWNER = #{owner}, PRIMARY_OBJ_REF_ID = #{primaryObjRef.id}, IS_READ = #{isRead}, IS_TRANSFERRED = #{isTransferred}, CUSTOM_ATTRIBUTES = #{customAttributes,jdbcType=BLOB,javaType=java.util.Map,typeHandler=pro.taskana.impl.persistence.MapTypeHandler}, CUSTOM_1 = #{custom1}, CUSTOM_2 = #{custom2}, CUSTOM_3 = #{custom3}, CUSTOM_4 = #{custom4}, CUSTOM_5 = #{custom5}, CUSTOM_6 = #{custom6}, CUSTOM_7 = #{custom7}, CUSTOM_8 = #{custom8}, CUSTOM_9 = #{custom9}, CUSTOM_10 = #{custom10} " + @Update("UPDATE TASK SET CLAIMED = #{claimed}, COMPLETED = #{completed}, MODIFIED = #{modified}, PLANNED = #{planned}, DUE = #{due}, NAME = #{name}, DESCRIPTION = #{description}, PRIORITY = #{priority}, STATE = #{state}, CLASSIFICATION_ID = #{classification.id}, WORKBASKETID = #{workbasketId}, BUSINESS_PROCESS_ID = #{businessProcessId}, PARENT_BUSINESS_PROCESS_ID = #{parentBusinessProcessId}, OWNER = #{owner}, PRIMARY_OBJ_REF_ID = #{primaryObjRef.id}, IS_READ = #{isRead}, IS_TRANSFERRED = #{isTransferred}, CUSTOM_ATTRIBUTES = #{customAttributes,jdbcType=BLOB,javaType=java.util.Map,typeHandler=pro.taskana.impl.persistence.MapTypeHandler}, CUSTOM_1 = #{custom1}, CUSTOM_2 = #{custom2}, CUSTOM_3 = #{custom3}, CUSTOM_4 = #{custom4}, CUSTOM_5 = #{custom5}, CUSTOM_6 = #{custom6}, CUSTOM_7 = #{custom7}, CUSTOM_8 = #{custom8}, CUSTOM_9 = #{custom9}, CUSTOM_10 = #{custom10} " + "WHERE ID = #{id}") void update(Task task); diff --git a/lib/taskana-core/src/main/resources/sql/taskana-schema.sql b/lib/taskana-core/src/main/resources/sql/taskana-schema.sql index b8d5acdd0..5fe69ac83 100644 --- a/lib/taskana-core/src/main/resources/sql/taskana-schema.sql +++ b/lib/taskana-core/src/main/resources/sql/taskana-schema.sql @@ -19,6 +19,8 @@ CREATE TABLE TASK ( STATE VARCHAR(20) NULL, CLASSIFICATION_ID CHAR(40) NULL, WORKBASKETID CHAR(40) NULL, + BUSINESS_PROCESS_ID VARCHAR(128) NULL, + PARENT_BUSINESS_PROCESS_ID VARCHAR(128) NULL, OWNER VARCHAR(255) NULL, PRIMARY_OBJ_REF_ID CHAR(40) NULL, IS_READ BOOLEAN NOT NULL, diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/TaskServiceImplTest.java b/lib/taskana-core/src/test/java/pro/taskana/impl/TaskServiceImplTest.java index 80072dabe..c042f7374 100644 --- a/lib/taskana-core/src/test/java/pro/taskana/impl/TaskServiceImplTest.java +++ b/lib/taskana-core/src/test/java/pro/taskana/impl/TaskServiceImplTest.java @@ -71,12 +71,16 @@ public class TaskServiceImplTest { Task task = new Task(); task.setName("Unit Test Task"); task.setWorkbasketId("1"); + task.setBusinessProcessId("BPI1"); + task.setParentBusinessProcessId("PBPI1"); task = taskServiceImpl.create(task); Assert.assertNull(task.getOwner()); Assert.assertNotNull(task.getCreated()); Assert.assertNotNull(task.getModified()); Assert.assertNull(task.getCompleted()); Assert.assertEquals(task.getWorkbasketId(), "1"); + Assert.assertEquals(task.getBusinessProcessId(), "BPI1"); + Assert.assertEquals(task.getParentBusinessProcessId(), "PBPI1"); Assert.assertEquals(task.getState(), TaskState.READY); } diff --git a/rest/src/main/resources/sql/sample-data/task.sql b/rest/src/main/resources/sql/sample-data/task.sql index 62fe1d90c..58ad52a03 100644 --- a/rest/src/main/resources/sql/sample-data/task.sql +++ b/rest/src/main/resources/sql/sample-data/task.sql @@ -1,16 +1,16 @@ -INSERT INTO TASK VALUES('1', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, null, CURRENT_TIMESTAMP, null, 'Task1', 'Lorem ipsum dolor sit amet.', 1, 'READY', '1', '1', 'Stefan', '1', true, false, null, null, null, null, null, null, null, null, null, null, null); -INSERT INTO TASK VALUES('2', CURRENT_TIMESTAMP, null, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task2', 'Lorem ipsum dolor sit amet. ', 1, 'READY', '2', '1', 'Frank', '2', false, false, null, null, null, null, null, null, null, null, null, null, null); -INSERT INTO TASK VALUES('3', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task3', 'Lorem ipsum dolor sit amet. ', 1, 'CLAIMED', '3', '1', 'Stefan', '3', true, false, null, null, null, null, null, null, null, null, null, null, null); -INSERT INTO TASK VALUES('4', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task4', 'Lorem ipsum dolor sit amet.', 1, 'CLAIMED', '4', '1', 'Frank', '1', false, true, null, null, null, null, null, null, null, null, null, null, null); -INSERT INTO TASK VALUES('5', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task5', 'Lorem ipsum dolor sit amet. ', 1, 'COMPLETED', '11', '1', 'Stefan', '2', false, false, null, null, null, null, null, null, null, null, null, null, null); -INSERT INTO TASK VALUES('6', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task6', 'Lorem ipsum dolor sit amet.', 1, 'COMPLETED', '12', '1', 'Frank', '3', false, false, null, null, null, null, null, null, null, null, null, null, null); +INSERT INTO TASK VALUES('1', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, null, CURRENT_TIMESTAMP, null, 'Task1', 'Lorem ipsum dolor sit amet.', 1, 'READY', '1', '1', 'BPI1', 'PBPI1', 'Stefan', '1', true, false, null, null, null, null, null, null, null, null, null, null, null); +INSERT INTO TASK VALUES('2', CURRENT_TIMESTAMP, null, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task2', 'Lorem ipsum dolor sit amet. ', 1, 'READY', '2', '1', 'BPI2', 'PBPI2', 'Frank', '2', false, false, null, null, null, null, null, null, null, null, null, null, null); +INSERT INTO TASK VALUES('3', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task3', 'Lorem ipsum dolor sit amet. ', 1, 'CLAIMED', '3', '1', 'BPI3', 'PBPI3', 'Stefan', '3', true, false, null, null, null, null, null, null, null, null, null, null, null); +INSERT INTO TASK VALUES('4', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task4', 'Lorem ipsum dolor sit amet.', 1, 'CLAIMED', '4', '1', 'BPI4', 'PBPI4', 'Frank', '1', false, true, null, null, null, null, null, null, null, null, null, null, null); +INSERT INTO TASK VALUES('5', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task5', 'Lorem ipsum dolor sit amet. ', 1, 'COMPLETED', '11', '1', 'BPI5', 'PBPI5', 'Stefan', '2', false, false, null, null, null, null, null, null, null, null, null, null, null); +INSERT INTO TASK VALUES('6', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task6', 'Lorem ipsum dolor sit amet.', 1, 'COMPLETED', '12', '1', 'BPI6', 'PBPI6', 'Frank', '3', false, false, null, null, null, null, null, null, null, null, null, null, null); -INSERT INTO TASK VALUES('7', CURRENT_TIMESTAMP, null, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task7', 'Lorem ipsum dolor sit amet.', 1, 'READY', '13', '2', 'Stefan', '1', false, false, null, null, null, null, null, null, null, null, null, null, null); -INSERT INTO TASK VALUES('8', CURRENT_TIMESTAMP, null, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task8', 'Lorem ipsum dolor sit amet. ', 1, 'READY', '14', '2', 'Frank', '2', false, false, null, null, null, null, null, null, null, null, null, null, null); -INSERT INTO TASK VALUES('9', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task9', 'Lorem ipsum dolor sit amet. ', 1, 'CLAIMED', '1', '2', 'Stefan', '3', true, false, null, null, null, null, null, null, null, null, null, null, null); -INSERT INTO TASK VALUES('10', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task10', 'Lorem ipsum dolor sit amet.', 1, 'CLAIMED', '2', '2', 'Frank', '1', false, false, null, null, null, null, null, null, null, null, null, null, null); -INSERT INTO TASK VALUES('11', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task11', 'Lorem ipsum dolor sit amet. ', 1, 'COMPLETED', '3', '2', 'Stefan', '2', false, false, null, null, null, null, null, null, null, null, null, null, null); -INSERT INTO TASK VALUES('12', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task12', 'Lorem ipsum dolor sit amet.', 1, 'COMPLETED', '4', '2', 'Frank', '3', false, false, null, null, null, null, null, null, null, null, null, null, null); +INSERT INTO TASK VALUES('7', CURRENT_TIMESTAMP, null, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task7', 'Lorem ipsum dolor sit amet.', 1, 'READY', '13', '2', 'BPI7', 'PBPI7', 'Stefan', '1', false, false, null, null, null, null, null, null, null, null, null, null, null); +INSERT INTO TASK VALUES('8', CURRENT_TIMESTAMP, null, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task8', 'Lorem ipsum dolor sit amet. ', 1, 'READY', '14', '2', 'BPI8', 'PBPI8', 'Frank', '2', false, false, null, null, null, null, null, null, null, null, null, null, null); +INSERT INTO TASK VALUES('9', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task9', 'Lorem ipsum dolor sit amet. ', 1, 'CLAIMED', '1', '2', 'BPI9', 'PBPI9', 'Stefan', '3', true, false, null, null, null, null, null, null, null, null, null, null, null); +INSERT INTO TASK VALUES('10', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task10', 'Lorem ipsum dolor sit amet.', 1, 'CLAIMED', '2', '2', 'BPI10', 'PBPI10', 'Frank', '1', false, false, null, null, null, null, null, null, null, null, null, null, null); +INSERT INTO TASK VALUES('11', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task11', 'Lorem ipsum dolor sit amet. ', 1, 'COMPLETED', '3', '2', 'BPI11', 'PBPI11', 'Stefan', '2', false, false, null, null, null, null, null, null, null, null, null, null, null); +INSERT INTO TASK VALUES('12', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task12', 'Lorem ipsum dolor sit amet.', 1, 'COMPLETED', '4', '2', 'BPI12', 'PBPI12', 'Frank', '3', false, false, null, null, null, null, null, null, null, null, null, null, null); -INSERT INTO TASK VALUES('13', CURRENT_TIMESTAMP, null, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task12', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus massa turpis, pellentesque ut libero sit aet, malesuada suscipit dolor. Sed volutpat euismod felis sit amet molestie. Fusce ornare purus dui. ', 1, 'READY', '11', '2', 'Frank', '1', false, false, null, null, null, null, null, null, null, null, null, null, null); -INSERT INTO TASK VALUES('14', CURRENT_TIMESTAMP, null, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task6', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce sagittis vulputate nibh ut malesuada. Etiam ac dictum tellus, nec cursus nunc. Curabitur velit eros, feugiat volutpat laoreet vitae, cursus eu dui. Nulla ut purus sem. Vivamus aliquet odio vitae erat cursus, vitae mattis urna mollis. Nam quam tellus, auctor id volutpat congue, viverra vitae ante. Duis nisi dolor, elementum et mattis at, maximus id velit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis eu condimentum risus. Praesent libero velit, facilisis sit amet maximus non, scelerisque ullamcorper leo. Ut sit amet iaculis eros. Mauris sagittis nibh lacus, at facilisis magna suscipit at. Aliquam finibus tempor odio id commodo. Vivamus aliquam, justo id porta imperdiet, mi.', 1, 'READY', '12', '1', 'Frank', '2', false, false, null, null, null, null, null, null, null, null, null, null, null); +INSERT INTO TASK VALUES('13', CURRENT_TIMESTAMP, null, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task12', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus massa turpis, pellentesque ut libero sit aet, malesuada suscipit dolor. Sed volutpat euismod felis sit amet molestie. Fusce ornare purus dui. ', 1, 'READY', '11', '2', 'BPI13', 'PBPI13', 'Frank', '1', false, false, null, null, null, null, null, null, null, null, null, null, null); +INSERT INTO TASK VALUES('14', CURRENT_TIMESTAMP, null, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task6', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce sagittis vulputate nibh ut malesuada. Etiam ac dictum tellus, nec cursus nunc. Curabitur velit eros, feugiat volutpat laoreet vitae, cursus eu dui. Nulla ut purus sem. Vivamus aliquet odio vitae erat cursus, vitae mattis urna mollis. Nam quam tellus, auctor id volutpat congue, viverra vitae ante. Duis nisi dolor, elementum et mattis at, maximus id velit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis eu condimentum risus. Praesent libero velit, facilisis sit amet maximus non, scelerisque ullamcorper leo. Ut sit amet iaculis eros. Mauris sagittis nibh lacus, at facilisis magna suscipit at. Aliquam finibus tempor odio id commodo. Vivamus aliquam, justo id porta imperdiet, mi.', 1, 'READY', '12', '1', 'BPI14', 'PBPI14', 'Frank', '2', false, false, null, null, null, null, null, null, null, null, null, null, null);