This commit is contained in:
Jörg Heffner 2020-04-06 10:40:30 +02:00
parent f68c9e2307
commit b79c4891e3
3 changed files with 36 additions and 15 deletions

View File

@ -74,8 +74,9 @@ public class TaskController extends AbstractPagingController {
private static final String DUE_TO = "due-until"; private static final String DUE_TO = "due-until";
private static final String DUE_FROM = "due-from"; private static final String DUE_FROM = "due-from";
private static final String PLANNED = "planned"; private static final String PLANNED = "planned";
private static final String PLANNED_TO = "planned-until"; private static final String PLANNED_UNTIL = "planned-until";
private static final String PLANNED_FROM = "planned-from"; private static final String PLANNED_FROM = "planned-from";
private static final String EXTERNAL_ID = "external-id";
private static final String SORT_BY = "sort-by"; private static final String SORT_BY = "sort-by";
private static final String SORT_DIRECTION = "order"; private static final String SORT_DIRECTION = "order";
@ -157,10 +158,9 @@ public class TaskController extends AbstractPagingController {
@DeleteMapping(path = Mapping.URL_TASKS_ID_CLAIM) @DeleteMapping(path = Mapping.URL_TASKS_ID_CLAIM)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public ResponseEntity<TaskResource> cancelClaimTask( public ResponseEntity<TaskResource> cancelClaimTask(@PathVariable String taskId)
@PathVariable String taskId)
throws TaskNotFoundException, InvalidStateException, InvalidOwnerException, throws TaskNotFoundException, InvalidStateException, InvalidOwnerException,
NotAuthorizedException { NotAuthorizedException {
LOGGER.debug("Entry to cancelClaimTask(taskId= {}", taskId); LOGGER.debug("Entry to cancelClaimTask(taskId= {}", taskId);
@ -353,18 +353,18 @@ public class TaskController extends AbstractPagingController {
updateTaskQueryWithPlannedOrDueTimeIntervals(taskQuery, params, DUE); updateTaskQueryWithPlannedOrDueTimeIntervals(taskQuery, params, DUE);
} }
if (params.containsKey(PLANNED_FROM) && params.containsKey(PLANNED_TO)) { if (params.containsKey(PLANNED_FROM) && params.containsKey(PLANNED_UNTIL)) {
updateTaskQueryWithPlannedOrDueTimeInterval(taskQuery, params, PLANNED_FROM, PLANNED_TO); updateTaskQueryWithPlannedOrDueTimeInterval(taskQuery, params, PLANNED_FROM, PLANNED_UNTIL);
} else if (params.containsKey(PLANNED_FROM) && !params.containsKey(PLANNED_TO)) { } else if (params.containsKey(PLANNED_FROM) && !params.containsKey(PLANNED_UNTIL)) {
TimeInterval timeInterval = createIndefiniteTimeIntervalFromParam(params, PLANNED_FROM); TimeInterval timeInterval = createIndefiniteTimeIntervalFromParam(params, PLANNED_FROM);
updateTaskQueryWithIndefiniteTimeInterval(taskQuery, params, PLANNED_FROM, timeInterval); updateTaskQueryWithIndefiniteTimeInterval(taskQuery, params, PLANNED_FROM, timeInterval);
} else if (!params.containsKey(PLANNED_FROM) && params.containsKey(PLANNED_TO)) { } else if (!params.containsKey(PLANNED_FROM) && params.containsKey(PLANNED_UNTIL)) {
TimeInterval timeInterval = createIndefiniteTimeIntervalFromParam(params, PLANNED_TO); TimeInterval timeInterval = createIndefiniteTimeIntervalFromParam(params, PLANNED_UNTIL);
updateTaskQueryWithIndefiniteTimeInterval(taskQuery, params, PLANNED_TO, timeInterval); updateTaskQueryWithIndefiniteTimeInterval(taskQuery, params, PLANNED_UNTIL, timeInterval);
} }
if (params.containsKey(DUE_FROM) && params.containsKey(DUE_TO)) { if (params.containsKey(DUE_FROM) && params.containsKey(DUE_TO)) {
@ -382,6 +382,12 @@ public class TaskController extends AbstractPagingController {
updateTaskQueryWithIndefiniteTimeInterval(taskQuery, params, DUE_TO, timeInterval); updateTaskQueryWithIndefiniteTimeInterval(taskQuery, params, DUE_TO, timeInterval);
} }
if (params.containsKey(EXTERNAL_ID)) {
String[] externalIds = extractCommaSeparatedFields(params.get(EXTERNAL_ID));
taskQuery.externalIdIn(externalIds);
params.remove(EXTERNAL_ID);
}
if (LOGGER.isDebugEnabled()) { if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Exit from applyFilterParams(), returning {}", taskQuery); LOGGER.debug("Exit from applyFilterParams(), returning {}", taskQuery);
} }
@ -413,7 +419,7 @@ public class TaskController extends AbstractPagingController {
private void checkForIllegalParamCombinations(MultiValueMap<String, String> params) { private void checkForIllegalParamCombinations(MultiValueMap<String, String> params) {
if (params.containsKey(PLANNED) if (params.containsKey(PLANNED)
&& (params.containsKey(PLANNED_FROM) || params.containsKey(PLANNED_TO))) { && (params.containsKey(PLANNED_FROM) || params.containsKey(PLANNED_UNTIL))) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
"It is prohibited to use the param \"" "It is prohibited to use the param \""
@ -421,7 +427,7 @@ public class TaskController extends AbstractPagingController {
+ "\" in combination with the params \"" + "\" in combination with the params \""
+ PLANNED_FROM + PLANNED_FROM
+ "\" and / or \"" + "\" and / or \""
+ PLANNED_TO + PLANNED_UNTIL
+ "\""); + "\"");
} }
@ -433,7 +439,7 @@ public class TaskController extends AbstractPagingController {
+ "\" in combination with the params \"" + "\" in combination with the params \""
+ PLANNED_FROM + PLANNED_FROM
+ "\" and / or \"" + "\" and / or \""
+ PLANNED_TO + PLANNED_UNTIL
+ "\""); + "\"");
} }
} }
@ -444,7 +450,7 @@ public class TaskController extends AbstractPagingController {
String param, String param,
TimeInterval timeInterval) { TimeInterval timeInterval) {
if (param.equals(PLANNED_FROM) || param.equals(PLANNED_TO)) { if (param.equals(PLANNED_FROM) || param.equals(PLANNED_UNTIL)) {
taskQuery.plannedWithin(timeInterval); taskQuery.plannedWithin(timeInterval);
} else { } else {

View File

@ -289,6 +289,20 @@ class TaskControllerIntTest {
assertThat(response.getBody().getContent()).hasSize(20); assertThat(response.getBody().getContent()).hasSize(20);
} }
@Test
void testGetAllTasksByExternalId() {
ResponseEntity<TaskSummaryListResource> response =
template.exchange(
restHelper.toUrl(Mapping.URL_TASKS)
+ "?external-id=ETI:000000000000000000000000000000000003,"
+ "ETI:000000000000000000000000000000000004",
HttpMethod.GET,
restHelper.defaultRequest(),
ParameterizedTypeReference.forType(TaskSummaryListResource.class));
assertThat(response.getBody().getLink(Link.REL_SELF)).isNotNull();
assertThat(response.getBody().getContent()).hasSize(2);
}
@Test @Test
void testExceptionIfKeyIsSetButDomainIsMissing() { void testExceptionIfKeyIsSetButDomainIsMissing() {

View File

@ -121,7 +121,8 @@ include::{snippets}/GetAllTasksDocTest/response-fields.adoc[]
The list generated in the response can be filtered using following parameters in the uri: + The list generated in the response can be filtered using following parameters in the uri: +
name | priority | state | classification.key | workbasket-id | {workbasket-key , domain} | + name | priority | state | classification.key | workbasket-id | {workbasket-key , domain} | +
owner | por.company | por.system | por.instance | por.type | por.value + owner | por.company | por.system | por.instance | por.type | por.value +
planned | planned-from | planned-until | due | due-from | due-until + planned | planned-from | planned-until | due | due-from | due-until | +
external-id
If it is sufficient to filter the list with a single time interval, use the parameters + If it is sufficient to filter the list with a single time interval, use the parameters +
planned-from/due-from and planned-until/due-until. + planned-from/due-from and planned-until/due-until. +