Create collections conform to HAL

This commit is contained in:
René Pfeuffer
2018-06-05 10:56:59 +02:00
parent b25dae00d4
commit 67b27fee0d
2 changed files with 42 additions and 5 deletions

View File

@@ -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<UserDto> 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()
);
}
}

View File

@@ -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<User, UserEx
@ResponseCode(code = 500, condition = "internal server error")
})
public Response getAll(@Context Request request, @Context UriInfo uriInfo, @DefaultValue("0")
@QueryParam("start") int start, @DefaultValue("-1")
@QueryParam("limit") int limit, @QueryParam("sortby") String sortby,
@QueryParam("page") int page, @DefaultValue("10")
@QueryParam("pageSize") int pageSize, @QueryParam("sortby") String sortby,
@DefaultValue("false")
@QueryParam("desc") boolean desc) {
Collection<User> items = fetchItems(sortby, desc, start, limit);
List<UserDto> collect = items.stream().map(user -> userToDtoMapper.userToUserDto(user, uriInfo)).collect(Collectors.toList());
return Response.ok(new GenericEntity<Collection<UserDto>>(collect) {}).build();
Collection<User> 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<UserDto> 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