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] 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);