diff --git a/lib/taskana-core/src/main/java/org/taskana/TaskService.java b/lib/taskana-core/src/main/java/org/taskana/TaskService.java index a1fa3e11c..744414a8f 100644 --- a/lib/taskana-core/src/main/java/org/taskana/TaskService.java +++ b/lib/taskana-core/src/main/java/org/taskana/TaskService.java @@ -68,7 +68,8 @@ public interface TaskService { * @return the list of tasks, which reside in the workbasket * @throws NotAuthorizedException */ - public List getTasksForWorkbasket(List workbaskets, List states) throws NotAuthorizedException; + public List getTasksForWorkbasket(List workbaskets, List states) + throws NotAuthorizedException; /** * This method returns all Tasks @@ -86,6 +87,14 @@ public interface TaskService { */ public List getTaskCountForState(List states); + /** + * This method returns all tasks with the specified states + * + * @param states all List with the needed states + * @return a list of Tasks + */ + public List findTasks(List states); + /** * Count all Tasks in a given workbasket with daysInPast as Days from today * in the past and a specific state. @@ -95,7 +104,8 @@ public interface TaskService { * @param states * @return */ - public long getTaskCountForWorkbasketByDaysInPastAndState(String workbasketId, long daysInPast, List states); + public long getTaskCountForWorkbasketByDaysInPastAndState(String workbasketId, long daysInPast, + List states); /** * Put task into another basket @@ -107,5 +117,7 @@ public interface TaskService { public Task transfer(String taskId, String workbasketId) throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException; - public List getTaskCountByWorkbasketAndDaysInPastAndState(long daysInPast, List states); + public List getTaskCountByWorkbasketAndDaysInPastAndState(long daysInPast, + List states); + } diff --git a/lib/taskana-core/src/main/java/org/taskana/impl/TaskServiceImpl.java b/lib/taskana-core/src/main/java/org/taskana/impl/TaskServiceImpl.java index 63d44aeaf..77c5cc7a7 100644 --- a/lib/taskana-core/src/main/java/org/taskana/impl/TaskServiceImpl.java +++ b/lib/taskana-core/src/main/java/org/taskana/impl/TaskServiceImpl.java @@ -11,7 +11,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.taskana.TaskService; import org.taskana.TaskanaEngine; -import org.taskana.WorkbasketService; import org.taskana.exceptions.NotAuthorizedException; import org.taskana.exceptions.TaskNotFoundException; import org.taskana.exceptions.WorkbasketNotFoundException; @@ -19,7 +18,6 @@ import org.taskana.model.DueWorkbasketCounter; import org.taskana.model.Task; import org.taskana.model.TaskState; import org.taskana.model.TaskStateCounter; -import org.taskana.model.Workbasket; import org.taskana.model.WorkbasketAuthorization; import org.taskana.model.mappings.TaskMapper; @@ -46,7 +44,7 @@ public class TaskServiceImpl implements TaskService { task.setClaimed(now); task.setState(TaskState.CLAIMED); taskMapper.update(task); - logger.debug("User '{}' claimed task '{}'.",userName, id); + logger.debug("User '{}' claimed task '{}'.", userName, id); } else { throw new TaskNotFoundException(id); } @@ -61,7 +59,7 @@ public class TaskServiceImpl implements TaskService { task.setModified(now); task.setState(TaskState.COMPLETED); taskMapper.update(task); - logger.debug("Task '{}' completed.",id); + logger.debug("Task '{}' completed.", id); } else { throw new TaskNotFoundException(id); } @@ -99,7 +97,12 @@ public class TaskServiceImpl implements TaskService { } @Override - public List getTasksForWorkbasket(List workbasketIds, List states) + public List findTasks(List states) { + return taskMapper.findByStates(states); + } + + @Override + public List getTasksForWorkbasket(List workbasketIds, List states) throws NotAuthorizedException { for (String workbasket : workbasketIds) { @@ -133,20 +136,22 @@ public class TaskServiceImpl implements TaskService { throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException { Task task = getTaskById(taskId); - // transfer requires TRANSFER in source and APPEND on destination workbasket + // transfer requires TRANSFER in source and APPEND on destination + // workbasket taskanaEngine.getWorkbasketService().checkPermission(destinationWorkbasketId, WorkbasketAuthorization.APPEND); taskanaEngine.getWorkbasketService().checkPermission(task.getWorkbasketId(), WorkbasketAuthorization.TRANSFER); - // if security is disabled, the implicit existance check on the destination workbasket has been skipped and needs to be performed + // if security is disabled, the implicit existance check on the + // destination workbasket has been skipped and needs to be performed if (!taskanaEngine.getConfiguration().isSecurityEnabled()) { - taskanaEngine.getWorkbasketService().getWorkbasket(destinationWorkbasketId); + taskanaEngine.getWorkbasketService().getWorkbasket(destinationWorkbasketId); } - + // transfer task from source to destination workbasket task.setWorkbasketId(destinationWorkbasketId); task.setModified(Timestamp.valueOf(LocalDateTime.now())); taskMapper.update(task); - + return getTaskById(taskId); } diff --git a/lib/taskana-core/src/main/java/org/taskana/model/mappings/TaskMapper.java b/lib/taskana-core/src/main/java/org/taskana/model/mappings/TaskMapper.java index ac4e09781..4fcf99cec 100644 --- a/lib/taskana-core/src/main/java/org/taskana/model/mappings/TaskMapper.java +++ b/lib/taskana-core/src/main/java/org/taskana/model/mappings/TaskMapper.java @@ -84,15 +84,39 @@ public interface TaskMapper { @Result(property = "type", column = "TYPE"), @Result(property = "workbasketId", column = "WORKBASKETID"), @Result(property = "owner", column = "OWNER")}) - List findByWorkbasketIdsAndStates(@Param("workbasketIds") List workbasketIds, @Param("states") List states); + List findByWorkbasketIdsAndStates(@Param("workbasketIds") List workbasketIds, @Param("states") List states); + @Select("") + @Results(value = { + @Result(property = "id", column = "ID"), + @Result(property = "tenantId", column = "TENANT_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 = "type", column = "TYPE"), + @Result(property = "workbasketId", column = "WORKBASKETID"), + @Result(property = "owner", column = "OWNER")}) + List findByStates(@Param("states") List states); + @Select("SELECT * FROM TASK") List findAll(); @Select("") @Results({ diff --git a/rest/src/main/java/org/taskana/rest/TaskController.java b/rest/src/main/java/org/taskana/rest/TaskController.java index 48c7d8196..59f82fbbd 100644 --- a/rest/src/main/java/org/taskana/rest/TaskController.java +++ b/rest/src/main/java/org/taskana/rest/TaskController.java @@ -1,5 +1,7 @@ package org.taskana.rest; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import javax.security.auth.login.LoginException; @@ -16,17 +18,15 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.taskana.TaskService; -import org.taskana.TaskanaEngine; import org.taskana.exceptions.NotAuthorizedException; import org.taskana.exceptions.TaskNotFoundException; import org.taskana.model.Task; +import org.taskana.model.TaskState; @RestController @RequestMapping(path = "/v1/tasks", produces = { MediaType.APPLICATION_JSON_VALUE }) public class TaskController { - @Autowired - TaskanaEngine taskanaEngine; @Autowired private TaskService taskService; @@ -34,15 +34,17 @@ public class TaskController { public ResponseEntity> getTasks(@RequestParam MultiValueMap params) throws LoginException { try { - if (params.keySet().size() == 0) { return ResponseEntity.status(HttpStatus.OK).body(taskService.getTasks()); } - if (params.containsKey("workbasketid") && params.containsKey("state")) { - System.out.println("HOLGER1"); - + if (params.containsKey("workbasketid") && params.containsKey("states")) { + List states = extractStates(params); return ResponseEntity.status(HttpStatus.OK) - .body(taskService.getTasksForWorkbasket(params.get("workbasketid"), params.get("state"))); + .body(taskService.getTasksForWorkbasket(params.get("workbasketid"), states)); + } + if (params.containsKey("states")) { + List states = extractStates(params); + return ResponseEntity.status(HttpStatus.OK).body(taskService.findTasks(states)); } return ResponseEntity.status(HttpStatus.OK) .body(taskService.getTasksForWorkbasket(params.getFirst("workbasketid"))); @@ -51,6 +53,26 @@ public class TaskController { } } + private List extractStates(MultiValueMap params) { + List states = new ArrayList<>(); + params.get("states").stream().forEach(item -> { + for (String state : Arrays.asList(item.split(","))) { + switch (state) { + case "READY": + states.add(TaskState.READY); + break; + case "COMPLETED": + states.add(TaskState.COMPLETED); + break; + case "CLAIMED": + states.add(TaskState.CLAIMED); + break; + } + } + }); + return states; + } + @RequestMapping(value = "/{taskId}") public ResponseEntity getTask(@PathVariable(value = "taskId") String taskId) { try {