From 67b27fee0db66b06ba3e9ec25812bbb27d578a21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 5 Jun 2018 10:56:59 +0200 Subject: [PATCH] Create collections conform to HAL --- .../api/v2/resources/UserCollectionDto.java | 31 +++++++++++++++++++ .../v2/resources/UserCollectionResource.java | 16 +++++++--- 2 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionDto.java diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionDto.java new file mode 100644 index 0000000000..b05ed3be27 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionDto.java @@ -0,0 +1,31 @@ +package sonia.scm.api.v2.resources; + +import de.otto.edison.hal.HalRepresentation; +import de.otto.edison.hal.paging.NumberedPaging; +import de.otto.edison.hal.paging.PagingRel; + +import java.util.EnumSet; +import java.util.List; + +import static com.damnhandy.uri.template.UriTemplate.fromTemplate; +import static de.otto.edison.hal.Embedded.embeddedBuilder; +import static de.otto.edison.hal.Links.linkingTo; + +public class UserCollectionDto extends HalRepresentation { + public UserCollectionDto(String baseUrl, NumberedPaging page, List users) { + super(linkingTo() + .with(page.links( + fromTemplate(baseUrl + "{?page,pageSize}"), + EnumSet.allOf(PagingRel.class))) +// .array(users +// .stream() +// .limit(page.getPageNumber()*page.getPageSize()) +// .map(stuff -> linkBuilder("item", stuff.getLinks().getLinkBy("self").get().getHref()).withTitle(stuff.getName()).build()) +// .collect(toList())) + .build(), + embeddedBuilder() + .with("users", users) + .build() + ); + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionResource.java index d3dab77041..bd27b17474 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionResource.java @@ -18,6 +18,7 @@ import java.util.Collection; import java.util.List; import java.util.stream.Collectors; +import static de.otto.edison.hal.paging.NumberedPaging.zeroBasedNumberedPaging; import static sonia.scm.api.v2.resources.ScmMediaType.USER; @Singleton @@ -52,13 +53,18 @@ public class UserCollectionResource extends AbstractManagerResource items = fetchItems(sortby, desc, start, limit); - List collect = items.stream().map(user -> userToDtoMapper.userToUserDto(user, uriInfo)).collect(Collectors.toList()); - return Response.ok(new GenericEntity>(collect) {}).build(); + Collection items = fetchItems(sortby, desc, page * pageSize, pageSize); + + LinkBuilder collectionLinkBuilder = new LinkBuilder(uriInfo, UserV2Resource.class, UserCollectionResource.class); + String baseUrl = collectionLinkBuilder.method("getUserCollectionResource").parameters().method("create").parameters().href(); + + List dtos = items.stream().map(user -> userToDtoMapper.userToUserDto(user, uriInfo)).collect(Collectors.toList()); + + return Response.ok(new UserCollectionDto(baseUrl, zeroBasedNumberedPaging(page, pageSize, true), dtos)).build(); } @POST