TSK-889: Standardise paginated List behaviour and sub classes
This commit is contained in:
parent
f06f87f41e
commit
6a6dcb9c1e
|
@ -167,7 +167,10 @@ public class TaskHistoryEventControllerRestDocumentation {
|
|||
fieldWithPath("taskHistoryEvents[].newData")
|
||||
.description(taskHistoryEventFieldDescriptionsMap.get("newData")),
|
||||
fieldWithPath("_links.self.href").ignored(),
|
||||
fieldWithPath("page").ignored()
|
||||
fieldWithPath("page.size").ignored(),
|
||||
fieldWithPath("page.totalElements").ignored(),
|
||||
fieldWithPath("page.totalPages").ignored(),
|
||||
fieldWithPath("page.number").ignored()
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ import pro.taskana.exceptions.InvalidArgumentException;
|
|||
import pro.taskana.exceptions.NotAuthorizedException;
|
||||
import pro.taskana.ldap.LdapClient;
|
||||
import pro.taskana.rest.resource.PagedResources.PageMetadata;
|
||||
import pro.taskana.rest.resource.WorkbasketAccessItemPaginatedListResource;
|
||||
import pro.taskana.rest.resource.WorkbasketAccessItemListResource;
|
||||
import pro.taskana.rest.resource.WorkbasketAccessItemResourceAssembler;
|
||||
|
||||
/** Controller for Workbasket access. */
|
||||
|
@ -58,7 +58,7 @@ public class WorkbasketAccessItemController extends AbstractPagingController {
|
|||
* @throws InvalidArgumentException if some argument is invalid.
|
||||
*/
|
||||
@GetMapping(path = Mapping.URL_WORKBASKETACCESSITEMS)
|
||||
public ResponseEntity<WorkbasketAccessItemPaginatedListResource> getWorkbasketAccessItems(
|
||||
public ResponseEntity<WorkbasketAccessItemListResource> getWorkbasketAccessItems(
|
||||
@RequestParam MultiValueMap<String, String> params)
|
||||
throws NotAuthorizedException, InvalidArgumentException {
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
|
@ -73,11 +73,10 @@ public class WorkbasketAccessItemController extends AbstractPagingController {
|
|||
PageMetadata pageMetadata = getPageMetadata(params, query);
|
||||
List<WorkbasketAccessItem> workbasketAccessItems = getQueryList(query, pageMetadata);
|
||||
|
||||
WorkbasketAccessItemPaginatedListResource pagedResources =
|
||||
WorkbasketAccessItemListResource pagedResources =
|
||||
workbasketAccessItemResourceAssembler.toResources(workbasketAccessItems, pageMetadata);
|
||||
|
||||
ResponseEntity<WorkbasketAccessItemPaginatedListResource> response =
|
||||
ResponseEntity.ok(pagedResources);
|
||||
ResponseEntity<WorkbasketAccessItemListResource> response = ResponseEntity.ok(pagedResources);
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
LOGGER.debug("Exit from getWorkbasketAccessItems(), returning {}", response);
|
||||
}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package pro.taskana.rest;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
@ -41,7 +40,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.WorkbasketAccessItemPaginatedListResource;
|
||||
import pro.taskana.rest.resource.WorkbasketAccessItemListResource;
|
||||
import pro.taskana.rest.resource.WorkbasketAccessItemResource;
|
||||
import pro.taskana.rest.resource.WorkbasketAccessItemResourceAssembler;
|
||||
import pro.taskana.rest.resource.WorkbasketResource;
|
||||
|
@ -201,11 +200,11 @@ public class WorkbasketController extends AbstractPagingController {
|
|||
|
||||
@GetMapping(path = Mapping.URL_WORKBASKET_ID_ACCESSITEMS)
|
||||
@Transactional(readOnly = true, rollbackFor = Exception.class)
|
||||
public ResponseEntity<WorkbasketAccessItemPaginatedListResource> getWorkbasketAccessItems(
|
||||
public ResponseEntity<WorkbasketAccessItemListResource> getWorkbasketAccessItems(
|
||||
@PathVariable(value = "workbasketId") String workbasketId)
|
||||
throws NotAuthorizedException, WorkbasketNotFoundException {
|
||||
LOGGER.debug("Entry to getWorkbasketAccessItems(workbasketId= {})", workbasketId);
|
||||
ResponseEntity<WorkbasketAccessItemPaginatedListResource> result;
|
||||
ResponseEntity<WorkbasketAccessItemListResource> result;
|
||||
|
||||
List<WorkbasketAccessItem> accessItems =
|
||||
workbasketService.getWorkbasketAccessItems(workbasketId);
|
||||
|
@ -221,7 +220,7 @@ public class WorkbasketController extends AbstractPagingController {
|
|||
|
||||
@PutMapping(path = Mapping.URL_WORKBASKET_ID_ACCESSITEMS)
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseEntity<WorkbasketAccessItemPaginatedListResource> setWorkbasketAccessItems(
|
||||
public ResponseEntity<WorkbasketAccessItemListResource> setWorkbasketAccessItems(
|
||||
@PathVariable(value = "workbasketId") String workbasketId,
|
||||
@RequestBody List<WorkbasketAccessItemResource> workbasketAccessResourceItems)
|
||||
throws NotAuthorizedException, InvalidArgumentException, WorkbasketNotFoundException {
|
||||
|
@ -237,7 +236,7 @@ public class WorkbasketController extends AbstractPagingController {
|
|||
List<WorkbasketAccessItem> updatedWbAccessItems =
|
||||
workbasketService.getWorkbasketAccessItems(workbasketId);
|
||||
|
||||
ResponseEntity<WorkbasketAccessItemPaginatedListResource> response =
|
||||
ResponseEntity<WorkbasketAccessItemListResource> response =
|
||||
ResponseEntity.ok(
|
||||
workbasketAccessItemResourceAssembler.toResources(workbasketId, updatedWbAccessItems));
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
|
@ -423,7 +422,7 @@ public class WorkbasketController extends AbstractPagingController {
|
|||
params.remove(TYPE);
|
||||
}
|
||||
if (params.containsKey(REQUIRED_PERMISSION)) {
|
||||
for (String authorization : Arrays.asList(params.getFirst(REQUIRED_PERMISSION).split(","))) {
|
||||
for (String authorization : params.getFirst(REQUIRED_PERMISSION).split(",")) {
|
||||
switch (authorization.trim()) {
|
||||
case "READ":
|
||||
query.callerHasPermission(WorkbasketPermission.READ);
|
||||
|
|
|
@ -5,6 +5,7 @@ import java.util.ArrayList;
|
|||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Objects;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import org.springframework.hateoas.Link;
|
||||
import org.springframework.hateoas.ResourceSupport;
|
||||
|
@ -60,6 +61,10 @@ public class PagedResources<T> extends ResourceSupport {
|
|||
*/
|
||||
@JsonProperty("page")
|
||||
public PageMetadata getMetadata() {
|
||||
if (Objects.isNull(metadata)) {
|
||||
Collection<T> content = getContent();
|
||||
return new PageMetadata(content.size(), 0, content.size());
|
||||
}
|
||||
return metadata;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
package pro.taskana.rest.resource;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import java.util.Collection;
|
||||
import org.springframework.hateoas.Link;
|
||||
|
||||
/** Resource class for {@link WorkbasketAccessItemResource} with Pagination. */
|
||||
public class WorkbasketAccessItemListResource extends PagedResources<WorkbasketAccessItemResource> {
|
||||
|
||||
public WorkbasketAccessItemListResource() {
|
||||
super();
|
||||
}
|
||||
|
||||
public WorkbasketAccessItemListResource(
|
||||
Collection<WorkbasketAccessItemResource> content, PageMetadata metadata, Link... links) {
|
||||
super(content, metadata, links);
|
||||
}
|
||||
|
||||
@Override
|
||||
@JsonProperty("accessItems")
|
||||
public Collection<WorkbasketAccessItemResource> getContent() {
|
||||
return super.getContent();
|
||||
}
|
||||
}
|
|
@ -1,43 +0,0 @@
|
|||
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. */
|
||||
public class WorkbasketAccessItemPaginatedListResource
|
||||
extends PagedResources<WorkbasketAccessItemResource> {
|
||||
|
||||
public WorkbasketAccessItemPaginatedListResource() {
|
||||
super();
|
||||
}
|
||||
|
||||
public WorkbasketAccessItemPaginatedListResource(
|
||||
Collection<WorkbasketAccessItemResource> content, PageMetadata metadata, Link... links) {
|
||||
super(content, metadata, links);
|
||||
}
|
||||
|
||||
public WorkbasketAccessItemPaginatedListResource(
|
||||
Collection<WorkbasketAccessItemResource> content,
|
||||
PageMetadata metadata,
|
||||
Iterable<Link> links) {
|
||||
super(content, metadata, links);
|
||||
}
|
||||
|
||||
@Override
|
||||
@JsonProperty("accessItems")
|
||||
public Collection<WorkbasketAccessItemResource> getContent() {
|
||||
return super.getContent();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageMetadata getMetadata() {
|
||||
PageMetadata pageMetadata = super.getMetadata();
|
||||
if (Objects.isNull(pageMetadata)) {
|
||||
Collection<WorkbasketAccessItemResource> content = getContent();
|
||||
return new PageMetadata(content.size(), 0, content.size());
|
||||
}
|
||||
return pageMetadata;
|
||||
}
|
||||
}
|
|
@ -49,16 +49,16 @@ public class WorkbasketAccessItemResourceAssembler
|
|||
}
|
||||
|
||||
@PageLinks(Mapping.URL_WORKBASKETACCESSITEMS)
|
||||
public WorkbasketAccessItemPaginatedListResource toResources(
|
||||
public WorkbasketAccessItemListResource toResources(
|
||||
List<WorkbasketAccessItem> entities, PageMetadata pageMetadata) {
|
||||
return new WorkbasketAccessItemPaginatedListResource(toResources(entities), pageMetadata);
|
||||
return new WorkbasketAccessItemListResource(toResources(entities), pageMetadata);
|
||||
}
|
||||
|
||||
public WorkbasketAccessItemPaginatedListResource toResources(
|
||||
public WorkbasketAccessItemListResource toResources(
|
||||
String workbasketId, List<WorkbasketAccessItem> entities)
|
||||
throws NotAuthorizedException, WorkbasketNotFoundException {
|
||||
WorkbasketAccessItemPaginatedListResource accessItemListResource =
|
||||
new WorkbasketAccessItemPaginatedListResource(super.toResources(entities), null);
|
||||
WorkbasketAccessItemListResource accessItemListResource =
|
||||
new WorkbasketAccessItemListResource(super.toResources(entities), null);
|
||||
accessItemListResource.add(
|
||||
linkTo(methodOn(WorkbasketController.class).getWorkbasketAccessItems(workbasketId))
|
||||
.withSelfRel());
|
||||
|
|
|
@ -86,7 +86,11 @@ class ClassificationControllerRestDocumentation extends BaseRestDocumentation {
|
|||
subsectionWithPath("classifications")
|
||||
.description("An Array of <<classification-subset, Classification-Subsets>>"),
|
||||
fieldWithPath("_links.self.href").ignored(),
|
||||
fieldWithPath("page").ignored()
|
||||
fieldWithPath("page").ignored(),
|
||||
fieldWithPath("page.size").ignored(),
|
||||
fieldWithPath("page.totalElements").ignored(),
|
||||
fieldWithPath("page.totalPages").ignored(),
|
||||
fieldWithPath("page.number").ignored()
|
||||
};
|
||||
|
||||
classificationFieldDescriptors =
|
||||
|
@ -339,7 +343,7 @@ class ClassificationControllerRestDocumentation extends BaseRestDocumentation {
|
|||
in.close();
|
||||
con.disconnect();
|
||||
String originalTask = content.toString();
|
||||
String modifiedTask = new String(originalTask.toString());
|
||||
String modifiedTask = originalTask;
|
||||
|
||||
this.mockMvc
|
||||
.perform(
|
||||
|
|
|
@ -111,7 +111,11 @@ class TaskControllerRestDocumentation extends BaseRestDocumentation {
|
|||
fieldWithPath("_links").ignored(),
|
||||
fieldWithPath("_links.self").ignored(),
|
||||
fieldWithPath("_links.self.href").ignored(),
|
||||
fieldWithPath("page").ignored()
|
||||
fieldWithPath("page").ignored(),
|
||||
fieldWithPath("page.size").ignored(),
|
||||
fieldWithPath("page.totalElements").ignored(),
|
||||
fieldWithPath("page.totalPages").ignored(),
|
||||
fieldWithPath("page.number").ignored()
|
||||
};
|
||||
|
||||
taskFieldDescriptors =
|
||||
|
|
|
@ -56,10 +56,6 @@ class WorkbasketAccessItemControllerRestDocumentation extends BaseRestDocumentat
|
|||
accessItemFieldDescriptionsMap.put("accessItems.permCustom11", "");
|
||||
accessItemFieldDescriptionsMap.put("accessItems.permCustom12", "");
|
||||
accessItemFieldDescriptionsMap.put("_links.self.href", "Link to self");
|
||||
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[] {
|
||||
|
@ -109,13 +105,10 @@ class WorkbasketAccessItemControllerRestDocumentation extends BaseRestDocumentat
|
|||
.description(accessItemFieldDescriptionsMap.get("accessItems.permCustom12")),
|
||||
fieldWithPath("_links.self.href")
|
||||
.description(accessItemFieldDescriptionsMap.get("_links.self.href")),
|
||||
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("page.size").ignored(),
|
||||
fieldWithPath("page.totalElements").ignored(),
|
||||
fieldWithPath("page.totalPages").ignored(),
|
||||
fieldWithPath("page.number").ignored()
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -109,17 +109,17 @@ 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[] {
|
||||
subsectionWithPath("workbaskets")
|
||||
.description("An Array of <<workbasket-subset, Workbasket-Subsets>>"),
|
||||
fieldWithPath("_links.self.href").ignored(),
|
||||
fieldWithPath("page").ignored()
|
||||
fieldWithPath("page").ignored(),
|
||||
fieldWithPath("page.size").ignored(),
|
||||
fieldWithPath("page.totalElements").ignored(),
|
||||
fieldWithPath("page.totalPages").ignored(),
|
||||
fieldWithPath("page.number").ignored()
|
||||
};
|
||||
|
||||
workbasketFieldDescriptors =
|
||||
|
@ -229,13 +229,10 @@ 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("page.size").ignored(),
|
||||
fieldWithPath("page.totalElements").ignored(),
|
||||
fieldWithPath("page.totalPages").ignored(),
|
||||
fieldWithPath("page.number").ignored(),
|
||||
fieldWithPath("_links.self.href").ignored(),
|
||||
fieldWithPath("_links.workbasket.href").ignored()
|
||||
};
|
||||
|
@ -244,7 +241,11 @@ class WorkbasketControllerRestDocumentation extends BaseRestDocumentation {
|
|||
new FieldDescriptor[] {
|
||||
subsectionWithPath("accessItems")
|
||||
.description("An array of <<access-item, Access Items>>"),
|
||||
subsectionWithPath("page").description("Number of page"),
|
||||
fieldWithPath("page").ignored(),
|
||||
fieldWithPath("page.size").ignored(),
|
||||
fieldWithPath("page.totalElements").ignored(),
|
||||
fieldWithPath("page.totalPages").ignored(),
|
||||
fieldWithPath("page.number").ignored(),
|
||||
fieldWithPath("_links.self.href").ignored(),
|
||||
fieldWithPath("_links.workbasket.href").ignored()
|
||||
};
|
||||
|
@ -462,7 +463,7 @@ class WorkbasketControllerRestDocumentation extends BaseRestDocumentation {
|
|||
in.close();
|
||||
con.disconnect();
|
||||
String originalWorkbasket = content.toString();
|
||||
String modifiedWorkbasket = new String(originalWorkbasket.toString());
|
||||
String modifiedWorkbasket = originalWorkbasket;
|
||||
|
||||
this.mockMvc
|
||||
.perform(
|
||||
|
|
|
@ -21,7 +21,7 @@ import org.springframework.web.client.RestTemplate;
|
|||
|
||||
import pro.taskana.RestHelper;
|
||||
import pro.taskana.TaskanaSpringBootTest;
|
||||
import pro.taskana.rest.resource.WorkbasketAccessItemPaginatedListResource;
|
||||
import pro.taskana.rest.resource.WorkbasketAccessItemListResource;
|
||||
|
||||
/** Test WorkbasketAccessItemController. */
|
||||
@TestMethodOrder(MethodOrderer.Alphanumeric.class)
|
||||
|
@ -38,24 +38,24 @@ class WorkbasketAccessItemControllerIntTest {
|
|||
|
||||
@Test
|
||||
void testGetAllWorkbasketAccessItems() {
|
||||
ResponseEntity<WorkbasketAccessItemPaginatedListResource> response =
|
||||
ResponseEntity<WorkbasketAccessItemListResource> response =
|
||||
template.exchange(
|
||||
restHelper.toUrl(Mapping.URL_WORKBASKETACCESSITEMS),
|
||||
HttpMethod.GET,
|
||||
restHelper.defaultRequest(),
|
||||
ParameterizedTypeReference.forType(WorkbasketAccessItemPaginatedListResource.class));
|
||||
ParameterizedTypeReference.forType(WorkbasketAccessItemListResource.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<WorkbasketAccessItemPaginatedListResource> response =
|
||||
ResponseEntity<WorkbasketAccessItemListResource> response =
|
||||
template.exchange(
|
||||
restHelper.toUrl(Mapping.URL_WORKBASKETACCESSITEMS) + parameters,
|
||||
HttpMethod.GET,
|
||||
restHelper.defaultRequest(),
|
||||
ParameterizedTypeReference.forType(WorkbasketAccessItemPaginatedListResource.class));
|
||||
ParameterizedTypeReference.forType(WorkbasketAccessItemListResource.class));
|
||||
assertNotNull(response.getBody().getLink(Link.REL_SELF));
|
||||
assertTrue(response.getBody().getLink(Link.REL_SELF).getHref().endsWith(parameters));
|
||||
}
|
||||
|
@ -68,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(WorkbasketAccessItemPaginatedListResource.class));
|
||||
ParameterizedTypeReference.forType(WorkbasketAccessItemListResource.class));
|
||||
fail();
|
||||
} catch (HttpClientErrorException e) {
|
||||
assertEquals(HttpStatus.BAD_REQUEST, e.getStatusCode());
|
||||
|
@ -79,12 +79,12 @@ class WorkbasketAccessItemControllerIntTest {
|
|||
@Test
|
||||
void testGetSecondPageSortedByWorkbasketKey() {
|
||||
String parameters = "?sort-by=workbasket-key&order=asc&page=2&page-size=9&access-ids=user_1_1";
|
||||
ResponseEntity<WorkbasketAccessItemPaginatedListResource> response =
|
||||
ResponseEntity<WorkbasketAccessItemListResource> response =
|
||||
template.exchange(
|
||||
restHelper.toUrl(Mapping.URL_WORKBASKETACCESSITEMS) + parameters,
|
||||
HttpMethod.GET,
|
||||
restHelper.defaultRequest(),
|
||||
ParameterizedTypeReference.forType(WorkbasketAccessItemPaginatedListResource.class));
|
||||
ParameterizedTypeReference.forType(WorkbasketAccessItemListResource.class));
|
||||
assertEquals(1, response.getBody().getContent().size());
|
||||
assertEquals("user_1_1", response.getBody().getContent().iterator().next().accessId);
|
||||
assertNotNull(response.getBody().getLink(Link.REL_SELF));
|
||||
|
|
Loading…
Reference in New Issue