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 86d6b11e9..1194b1133 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 @@ -41,7 +41,7 @@ import pro.taskana.rest.resource.DistributionTargetListResource; import pro.taskana.rest.resource.DistributionTargetResource; import pro.taskana.rest.resource.DistributionTargetResourceAssembler; import pro.taskana.rest.resource.PagedResources.PageMetadata; -import pro.taskana.rest.resource.WorkbasketAccessItemListResource; +import pro.taskana.rest.resource.WorkbasketAccessItemPaginatedListResource; import pro.taskana.rest.resource.WorkbasketAccessItemResource; import pro.taskana.rest.resource.WorkbasketAccessItemResourceAssembler; import pro.taskana.rest.resource.WorkbasketResource; @@ -201,11 +201,11 @@ public class WorkbasketController extends AbstractPagingController { @GetMapping(path = Mapping.URL_WORKBASKET_ID_ACCESSITEMS) @Transactional(readOnly = true, rollbackFor = Exception.class) - public ResponseEntity getWorkbasketAccessItems( + public ResponseEntity getWorkbasketAccessItems( @PathVariable(value = "workbasketId") String workbasketId) throws NotAuthorizedException, WorkbasketNotFoundException { LOGGER.debug("Entry to getWorkbasketAccessItems(workbasketId= {})", workbasketId); - ResponseEntity result; + ResponseEntity result; List accessItems = workbasketService.getWorkbasketAccessItems(workbasketId); @@ -221,7 +221,7 @@ public class WorkbasketController extends AbstractPagingController { @PutMapping(path = Mapping.URL_WORKBASKET_ID_ACCESSITEMS) @Transactional(rollbackFor = Exception.class) - public ResponseEntity setWorkbasketAccessItems( + public ResponseEntity setWorkbasketAccessItems( @PathVariable(value = "workbasketId") String workbasketId, @RequestBody List workbasketAccessResourceItems) throws NotAuthorizedException, InvalidArgumentException, WorkbasketNotFoundException { @@ -237,7 +237,7 @@ public class WorkbasketController extends AbstractPagingController { List updatedWbAccessItems = workbasketService.getWorkbasketAccessItems(workbasketId); - ResponseEntity response = + ResponseEntity response = ResponseEntity.ok( workbasketAccessItemResourceAssembler.toResources(workbasketId, updatedWbAccessItems)); if (LOGGER.isDebugEnabled()) { diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/WorkbasketAccessItemListResource.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/WorkbasketAccessItemListResource.java deleted file mode 100644 index 8ca840f33..000000000 --- a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/WorkbasketAccessItemListResource.java +++ /dev/null @@ -1,29 +0,0 @@ -package pro.taskana.rest.resource; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import java.util.Collection; -import org.springframework.hateoas.Link; - -/** Resource class for {@link WorkbasketAccessItemResource} without Pagination. */ -public class WorkbasketAccessItemListResource extends WorkbasketAccessItemPaginatedListResource { - - public WorkbasketAccessItemListResource() { - super(); - } - - public WorkbasketAccessItemListResource( - Collection content, Link... links) { - super(content, null, links); - } - - public WorkbasketAccessItemListResource( - Collection content, Iterable links) { - super(content, null, links); - } - - @Override - @JsonIgnore - public PageMetadata getMetadata() { - return super.getMetadata(); - } -} diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/WorkbasketAccessItemPaginatedListResource.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/WorkbasketAccessItemPaginatedListResource.java index 9acfd8a32..604d50081 100644 --- a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/WorkbasketAccessItemPaginatedListResource.java +++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/WorkbasketAccessItemPaginatedListResource.java @@ -2,6 +2,7 @@ package pro.taskana.rest.resource; import com.fasterxml.jackson.annotation.JsonProperty; import java.util.Collection; +import java.util.Objects; import org.springframework.hateoas.Link; /** Resource class for {@link WorkbasketAccessItemResource} with Pagination. */ @@ -29,4 +30,14 @@ public class WorkbasketAccessItemPaginatedListResource public Collection getContent() { return super.getContent(); } + + @Override + public PageMetadata getMetadata() { + PageMetadata pageMetadata = super.getMetadata(); + if (Objects.isNull(pageMetadata)) { + Collection content = getContent(); + return new PageMetadata(content.size(), 0, content.size()); + } + return pageMetadata; + } } diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/WorkbasketAccessItemResourceAssembler.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/WorkbasketAccessItemResourceAssembler.java index abc5ac653..0341a97c8 100644 --- a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/WorkbasketAccessItemResourceAssembler.java +++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/WorkbasketAccessItemResourceAssembler.java @@ -54,11 +54,11 @@ public class WorkbasketAccessItemResourceAssembler return new WorkbasketAccessItemPaginatedListResource(toResources(entities), pageMetadata); } - public WorkbasketAccessItemListResource toResources( + public WorkbasketAccessItemPaginatedListResource toResources( String workbasketId, List entities) throws NotAuthorizedException, WorkbasketNotFoundException { - WorkbasketAccessItemListResource accessItemListResource = - new WorkbasketAccessItemListResource(super.toResources(entities)); + WorkbasketAccessItemPaginatedListResource accessItemListResource = + new WorkbasketAccessItemPaginatedListResource(super.toResources(entities), null); accessItemListResource.add( linkTo(methodOn(WorkbasketController.class).getWorkbasketAccessItems(workbasketId)) .withSelfRel()); diff --git a/rest/taskana-rest-spring/src/test/java/pro/taskana/doc/api/WorkbasketAccessItemControllerRestDocumentation.java b/rest/taskana-rest-spring/src/test/java/pro/taskana/doc/api/WorkbasketAccessItemControllerRestDocumentation.java index 2a7e12ae3..4c5a75c1f 100644 --- a/rest/taskana-rest-spring/src/test/java/pro/taskana/doc/api/WorkbasketAccessItemControllerRestDocumentation.java +++ b/rest/taskana-rest-spring/src/test/java/pro/taskana/doc/api/WorkbasketAccessItemControllerRestDocumentation.java @@ -56,7 +56,10 @@ class WorkbasketAccessItemControllerRestDocumentation extends BaseRestDocumentat accessItemFieldDescriptionsMap.put("accessItems.permCustom11", ""); accessItemFieldDescriptionsMap.put("accessItems.permCustom12", ""); accessItemFieldDescriptionsMap.put("_links.self.href", "Link to self"); - accessItemFieldDescriptionsMap.put("page", "Number of page"); + accessItemFieldDescriptionsMap.put("page.size", "The page size"); + accessItemFieldDescriptionsMap.put("page.number", "Zero-indexed current page"); + accessItemFieldDescriptionsMap.put("page.totalElements", "The total number of elements"); + accessItemFieldDescriptionsMap.put("page.totalPages", "Total amount of pages"); accessItemFieldDescriptors = new FieldDescriptor[] { @@ -106,7 +109,13 @@ class WorkbasketAccessItemControllerRestDocumentation extends BaseRestDocumentat .description(accessItemFieldDescriptionsMap.get("accessItems.permCustom12")), fieldWithPath("_links.self.href") .description(accessItemFieldDescriptionsMap.get("_links.self.href")), - fieldWithPath("page").description(accessItemFieldDescriptionsMap.get("page")) + fieldWithPath("page.size").description(accessItemFieldDescriptionsMap.get("page.size")), + fieldWithPath("page.number") + .description(accessItemFieldDescriptionsMap.get("page.number")), + fieldWithPath("page.totalElements") + .description(accessItemFieldDescriptionsMap.get("page.totalElements")), + fieldWithPath("page.totalPages") + .description(accessItemFieldDescriptionsMap.get("page.totalPages")), }; } diff --git a/rest/taskana-rest-spring/src/test/java/pro/taskana/doc/api/WorkbasketControllerRestDocumentation.java b/rest/taskana-rest-spring/src/test/java/pro/taskana/doc/api/WorkbasketControllerRestDocumentation.java index b9c8a2fc3..ba637856c 100644 --- a/rest/taskana-rest-spring/src/test/java/pro/taskana/doc/api/WorkbasketControllerRestDocumentation.java +++ b/rest/taskana-rest-spring/src/test/java/pro/taskana/doc/api/WorkbasketControllerRestDocumentation.java @@ -109,6 +109,10 @@ class WorkbasketControllerRestDocumentation extends BaseRestDocumentation { accessItemFieldDescriptionsMap.put("accessItems.permCustom12", ""); accessItemFieldDescriptionsMap.put( "accessItems._links.workbasket.href", "Link to the workbasket"); + accessItemFieldDescriptionsMap.put("page.size", "The page size"); + accessItemFieldDescriptionsMap.put("page.number", "Zero-indexed current page"); + accessItemFieldDescriptionsMap.put("page.totalElements", "The total number of elements"); + accessItemFieldDescriptionsMap.put("page.totalPages", "Total amount of pages"); allWorkbasketsFieldDescriptors = new FieldDescriptor[] { @@ -225,6 +229,13 @@ class WorkbasketControllerRestDocumentation extends BaseRestDocumentation { .description(accessItemFieldDescriptionsMap.get("accessItems.permCustom11")), fieldWithPath("accessItems[].permCustom12") .description(accessItemFieldDescriptionsMap.get("accessItems.permCustom12")), + fieldWithPath("page.size").description(accessItemFieldDescriptionsMap.get("page.size")), + fieldWithPath("page.number") + .description(accessItemFieldDescriptionsMap.get("page.number")), + fieldWithPath("page.totalElements") + .description(accessItemFieldDescriptionsMap.get("page.totalElements")), + fieldWithPath("page.totalPages") + .description(accessItemFieldDescriptionsMap.get("page.totalPages")), fieldWithPath("_links.self.href").ignored(), fieldWithPath("_links.workbasket.href").ignored() }; @@ -233,6 +244,7 @@ class WorkbasketControllerRestDocumentation extends BaseRestDocumentation { new FieldDescriptor[] { subsectionWithPath("accessItems") .description("An array of <>"), + subsectionWithPath("page").description("Number of page"), fieldWithPath("_links.self.href").ignored(), fieldWithPath("_links.workbasket.href").ignored() }; diff --git a/rest/taskana-rest-spring/src/test/java/pro/taskana/rest/WorkbasketAccessItemControllerIntTest.java b/rest/taskana-rest-spring/src/test/java/pro/taskana/rest/WorkbasketAccessItemControllerIntTest.java index 697fb44a9..070cfb2d1 100644 --- a/rest/taskana-rest-spring/src/test/java/pro/taskana/rest/WorkbasketAccessItemControllerIntTest.java +++ b/rest/taskana-rest-spring/src/test/java/pro/taskana/rest/WorkbasketAccessItemControllerIntTest.java @@ -21,7 +21,6 @@ import org.springframework.web.client.RestTemplate; import pro.taskana.RestHelper; import pro.taskana.TaskanaSpringBootTest; -import pro.taskana.rest.resource.WorkbasketAccessItemListResource; import pro.taskana.rest.resource.WorkbasketAccessItemPaginatedListResource; /** Test WorkbasketAccessItemController. */ @@ -39,24 +38,24 @@ class WorkbasketAccessItemControllerIntTest { @Test void testGetAllWorkbasketAccessItems() { - ResponseEntity response = + ResponseEntity response = template.exchange( restHelper.toUrl(Mapping.URL_WORKBASKETACCESSITEMS), HttpMethod.GET, restHelper.defaultRequest(), - ParameterizedTypeReference.forType(WorkbasketAccessItemListResource.class)); + ParameterizedTypeReference.forType(WorkbasketAccessItemPaginatedListResource.class)); assertNotNull(response.getBody().getLink(Link.REL_SELF)); } @Test void testGetWorkbasketAccessItemsKeepingFilters() { String parameters = "?sort-by=workbasket-key&order=asc&page=1&page-size=9&access-ids=user_1_1"; - ResponseEntity response = + ResponseEntity response = template.exchange( restHelper.toUrl(Mapping.URL_WORKBASKETACCESSITEMS) + parameters, HttpMethod.GET, restHelper.defaultRequest(), - ParameterizedTypeReference.forType(WorkbasketAccessItemListResource.class)); + ParameterizedTypeReference.forType(WorkbasketAccessItemPaginatedListResource.class)); assertNotNull(response.getBody().getLink(Link.REL_SELF)); assertTrue(response.getBody().getLink(Link.REL_SELF).getHref().endsWith(parameters)); } @@ -69,7 +68,7 @@ class WorkbasketAccessItemControllerIntTest { + "?sort-by=workbasket-key&order=asc&page=1&page-size=9&invalid=user_1_1", HttpMethod.GET, restHelper.defaultRequest(), - ParameterizedTypeReference.forType(WorkbasketAccessItemListResource.class)); + ParameterizedTypeReference.forType(WorkbasketAccessItemPaginatedListResource.class)); fail(); } catch (HttpClientErrorException e) { assertEquals(HttpStatus.BAD_REQUEST, e.getStatusCode());