diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/TaskController.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/TaskController.java index fee6def06..4bdeb0644 100644 --- a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/TaskController.java +++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/TaskController.java @@ -50,8 +50,7 @@ public class TaskController { @GetMapping @Transactional(readOnly = true, rollbackFor = Exception.class) - public ResponseEntity> getTasks(@RequestParam MultiValueMap params) - throws InvalidArgumentException { + public ResponseEntity> getTasks(@RequestParam MultiValueMap params) { try { if (params.keySet().size() == 0) { // get all @@ -62,6 +61,9 @@ public class TaskController { LOGGER.error("Something went wrong with the Authorisation, while getting all Tasks.", e); TransactionInterceptor.currentTransactionStatus().setRollbackOnly(); return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); + } catch (InvalidArgumentException e) { + TransactionInterceptor.currentTransactionStatus().setRollbackOnly(); + return ResponseEntity.status(HttpStatus.PRECONDITION_FAILED).build(); } } diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/WorkbasketController.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/WorkbasketController.java index 3a4425e0d..d31c828e4 100644 --- a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/WorkbasketController.java +++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/WorkbasketController.java @@ -82,17 +82,19 @@ public class WorkbasketController { @RequestParam(value = "ownerLike", required = false) String ownerLike, @RequestParam(value = "type", required = false) String type, @RequestParam(value = "requiredPermission", required = false) String requiredPermission) { - ResponseEntity> result; - List workbasketsSummary; - WorkbasketQuery query = workbasketService.createWorkbasketQuery(); - addSortingToQuery(query, sortBy, order); - addAttributeFilter(query, name, nameLike, key, keyLike, descLike, owner, ownerLike, type); - addAuthorizationFilter(query, requiredPermission); - workbasketsSummary = query.list(); - result = new ResponseEntity<>(workbasketsSummary.stream() - .map(workbasket -> workbasketSummaryMapper.toResource(workbasket)) - .collect(Collectors.toList()), HttpStatus.OK); - return result; + try { + List workbasketsSummary; + WorkbasketQuery query = workbasketService.createWorkbasketQuery(); + addSortingToQuery(query, sortBy, order); + addAttributeFilter(query, name, nameLike, key, keyLike, descLike, owner, ownerLike, type); + addAuthorizationFilter(query, requiredPermission); + workbasketsSummary = query.list(); + return new ResponseEntity<>(workbasketsSummary.stream() + .map(workbasket -> workbasketSummaryMapper.toResource(workbasket)) + .collect(Collectors.toList()), HttpStatus.OK); + } catch (InvalidArgumentException ex) { + return new ResponseEntity<>(HttpStatus.PRECONDITION_FAILED); + } } @GetMapping(path = "/{workbasketId}") @@ -185,7 +187,7 @@ public class WorkbasketController { @PathVariable(value = "workbasketId") String workbasketId) { List wbAuthorizations = workbasketService.getWorkbasketAccessItems(workbasketId); List result = new ArrayList<>(); - wbAuthorizations.stream() + wbAuthorizations .forEach(accItem -> { try { result.add(workbasketAccessItemMapper.toResource(accItem)); @@ -233,8 +235,7 @@ public class WorkbasketController { throw new InvalidArgumentException("Can“t create something with NULL body-value."); } List wbAccessItems = new ArrayList<>(); - workbasketAccessResourceItems.stream() - .forEach(item -> wbAccessItems.add(workbasketAccessItemMapper.toModel(item))); + workbasketAccessResourceItems.forEach(item -> wbAccessItems.add(workbasketAccessItemMapper.toModel(item))); workbasketService.setWorkbasketAccessItems(workbasketId, wbAccessItems); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } catch (InvalidArgumentException | NullPointerException e) { @@ -287,75 +288,72 @@ public class WorkbasketController { return result; } - private void addAuthorizationFilter(WorkbasketQuery query, String requiredPermission) { + private void addAuthorizationFilter(WorkbasketQuery query, String requiredPermission) + throws InvalidArgumentException { if (requiredPermission == null) { return; } for (String authorization : Arrays.asList(requiredPermission.split(","))) { - try { - switch (authorization.trim()) { - case "READ": - query.callerHasPermission(WorkbasketPermission.READ); - break; - case "OPEN": - query.callerHasPermission(WorkbasketPermission.OPEN); - break; - case "APPEND": - query.callerHasPermission(WorkbasketPermission.APPEND); - break; - case "TRANSFER": - query.callerHasPermission(WorkbasketPermission.TRANSFER); - break; - case "DISTRIBUTE": - query.callerHasPermission(WorkbasketPermission.DISTRIBUTE); - break; - case "CUSTOM_1": - query.callerHasPermission(WorkbasketPermission.CUSTOM_1); - break; - case "CUSTOM_2": - query.callerHasPermission(WorkbasketPermission.CUSTOM_2); - break; - case "CUSTOM_3": - query.callerHasPermission(WorkbasketPermission.CUSTOM_3); - break; - case "CUSTOM_4": - query.callerHasPermission(WorkbasketPermission.CUSTOM_4); - break; - case "CUSTOM_5": - query.callerHasPermission(WorkbasketPermission.CUSTOM_5); - break; - case "CUSTOM_6": - query.callerHasPermission(WorkbasketPermission.CUSTOM_6); - break; - case "CUSTOM_7": - query.callerHasPermission(WorkbasketPermission.CUSTOM_7); - break; - case "CUSTOM_8": - query.callerHasPermission(WorkbasketPermission.CUSTOM_8); - break; - case "CUSTOM_9": - query.callerHasPermission(WorkbasketPermission.CUSTOM_9); - break; - case "CUSTOM_10": - query.callerHasPermission(WorkbasketPermission.CUSTOM_10); - break; - case "CUSTOM_11": - query.callerHasPermission(WorkbasketPermission.CUSTOM_11); - break; - case "CUSTOM_12": - query.callerHasPermission(WorkbasketPermission.CUSTOM_12); - break; - default: - throw new RuntimeException("should never occur"); - } - } catch (InvalidArgumentException e) { - e.printStackTrace(); + switch (authorization.trim()) { + case "READ": + query.callerHasPermission(WorkbasketPermission.READ); + break; + case "OPEN": + query.callerHasPermission(WorkbasketPermission.OPEN); + break; + case "APPEND": + query.callerHasPermission(WorkbasketPermission.APPEND); + break; + case "TRANSFER": + query.callerHasPermission(WorkbasketPermission.TRANSFER); + break; + case "DISTRIBUTE": + query.callerHasPermission(WorkbasketPermission.DISTRIBUTE); + break; + case "CUSTOM_1": + query.callerHasPermission(WorkbasketPermission.CUSTOM_1); + break; + case "CUSTOM_2": + query.callerHasPermission(WorkbasketPermission.CUSTOM_2); + break; + case "CUSTOM_3": + query.callerHasPermission(WorkbasketPermission.CUSTOM_3); + break; + case "CUSTOM_4": + query.callerHasPermission(WorkbasketPermission.CUSTOM_4); + break; + case "CUSTOM_5": + query.callerHasPermission(WorkbasketPermission.CUSTOM_5); + break; + case "CUSTOM_6": + query.callerHasPermission(WorkbasketPermission.CUSTOM_6); + break; + case "CUSTOM_7": + query.callerHasPermission(WorkbasketPermission.CUSTOM_7); + break; + case "CUSTOM_8": + query.callerHasPermission(WorkbasketPermission.CUSTOM_8); + break; + case "CUSTOM_9": + query.callerHasPermission(WorkbasketPermission.CUSTOM_9); + break; + case "CUSTOM_10": + query.callerHasPermission(WorkbasketPermission.CUSTOM_10); + break; + case "CUSTOM_11": + query.callerHasPermission(WorkbasketPermission.CUSTOM_11); + break; + case "CUSTOM_12": + query.callerHasPermission(WorkbasketPermission.CUSTOM_12); + break; + default: + throw new InvalidArgumentException("Unknown authorization '" + authorization + "'"); } } } - private void addSortingToQuery(WorkbasketQuery query, String sortBy, String order) { + private void addSortingToQuery(WorkbasketQuery query, String sortBy, String order) throws IllegalArgumentException { BaseQuery.SortDirection sortDirection = getSortDirection(order); switch (sortBy) { @@ -375,7 +373,7 @@ public class WorkbasketController { query.orderByType(sortDirection); break; default: - throw new RuntimeException("should never occur"); + throw new IllegalArgumentException("Unknown order '" + sortBy + "'"); } } @@ -390,7 +388,7 @@ public class WorkbasketController { String name, String nameLike, String key, String keyLike, String descLike, String owner, - String ownerLike, String type) { + String ownerLike, String type) throws InvalidArgumentException { if (name != null) { query.nameIn(name); } @@ -426,8 +424,8 @@ public class WorkbasketController { case "TOPIC": query.typeIn(WorkbasketType.TOPIC); break; - default: - throw new RuntimeException("should never occur"); + default: + throw new InvalidArgumentException("Unknown Workbaskettype '" + type + "'"); } } } diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/query/TaskFilter.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/query/TaskFilter.java index 44869799c..96389db61 100644 --- a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/query/TaskFilter.java +++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/query/TaskFilter.java @@ -138,10 +138,10 @@ public class TaskFilter { return values.toArray(new String[0]); } - private TaskState[] extractStates(MultiValueMap params) { + private TaskState[] extractStates(MultiValueMap params) throws InvalidArgumentException { List states = new ArrayList<>(); - params.get(STATE).forEach(item -> { - Arrays.asList(item.split(COMMA)).forEach(state -> { + for (String item : params.get(STATE)) { + for (String state : item.split(COMMA)) { switch (state) { case READY: states.add(TaskState.READY); @@ -153,10 +153,10 @@ public class TaskFilter { states.add(TaskState.CLAIMED); break; default: - throw new RuntimeException("should never occur"); + throw new InvalidArgumentException("Unknown status '" + state + "'"); } - }); - }); + } + } return states.toArray(new TaskState[0]); } }