mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-12 08:25:44 +01:00
Correct pagination
This commit is contained in:
@@ -42,6 +42,7 @@ import org.slf4j.LoggerFactory;
|
||||
import sonia.scm.LastModifiedAware;
|
||||
import sonia.scm.Manager;
|
||||
import sonia.scm.ModelObject;
|
||||
import sonia.scm.PageResult;
|
||||
import sonia.scm.api.rest.RestExceptionResult;
|
||||
import sonia.scm.util.AssertUtil;
|
||||
import sonia.scm.util.HttpUtil;
|
||||
@@ -588,6 +589,19 @@ public abstract class AbstractManagerResource<T extends ModelObject,
|
||||
return items;
|
||||
}
|
||||
|
||||
protected PageResult<T> fetchPage(String sortby, boolean desc, int pageNumber,
|
||||
int pageSize) {
|
||||
AssertUtil.assertPositive(pageNumber);
|
||||
AssertUtil.assertPositive(pageSize);
|
||||
|
||||
if (Util.isEmpty(sortby)) {
|
||||
// replace with something useful
|
||||
sortby = "id";
|
||||
}
|
||||
|
||||
return manager.getPage(createComparator(sortby, desc), pageNumber, pageSize);
|
||||
}
|
||||
|
||||
//~--- get methods ----------------------------------------------------------
|
||||
|
||||
/**
|
||||
|
||||
@@ -13,11 +13,12 @@ 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)))
|
||||
.build(),
|
||||
super(
|
||||
linkingTo()
|
||||
.with(page.links(
|
||||
fromTemplate(baseUrl + "{?page,pageSize}"),
|
||||
EnumSet.allOf(PagingRel.class)))
|
||||
.build(),
|
||||
embeddedBuilder()
|
||||
.with("users", users)
|
||||
.build()
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.webcohesion.enunciate.metadata.rs.ResponseCode;
|
||||
import com.webcohesion.enunciate.metadata.rs.ResponseHeader;
|
||||
import com.webcohesion.enunciate.metadata.rs.StatusCodes;
|
||||
import com.webcohesion.enunciate.metadata.rs.TypeHint;
|
||||
import sonia.scm.PageResult;
|
||||
import sonia.scm.api.rest.resources.AbstractManagerResource;
|
||||
import sonia.scm.user.User;
|
||||
import sonia.scm.user.UserException;
|
||||
@@ -24,6 +25,7 @@ import static sonia.scm.api.v2.resources.ScmMediaType.USER;
|
||||
@Singleton
|
||||
@Produces(USER)
|
||||
public class UserCollectionResource extends AbstractManagerResource<User, UserException> {
|
||||
public static final int DEFAULT_PAGE_SIZE = 10;
|
||||
private final UserDto2UserMapper dtoToUserMapper;
|
||||
private final User2UserDtoMapper userToDtoMapper;
|
||||
|
||||
@@ -53,18 +55,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("page") int page, @DefaultValue("10")
|
||||
@QueryParam("page") int page, @DefaultValue("" + DEFAULT_PAGE_SIZE)
|
||||
@QueryParam("pageSize") int pageSize, @QueryParam("sortby") String sortby,
|
||||
@DefaultValue("false")
|
||||
@QueryParam("desc") boolean desc) {
|
||||
Collection<User> items = fetchItems(sortby, desc, page * pageSize, pageSize);
|
||||
PageResult<User> pageResult = fetchPage(sortby, desc, page, 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());
|
||||
List<UserDto> dtos = pageResult.getEntities().stream().map(user -> userToDtoMapper.userToUserDto(user, uriInfo)).collect(Collectors.toList());
|
||||
|
||||
return Response.ok(new UserCollectionDto(baseUrl, zeroBasedNumberedPaging(page, pageSize, true), dtos)).build();
|
||||
return Response.ok(new UserCollectionDto(baseUrl, zeroBasedNumberedPaging(page, pageSize, pageResult.hasMore()), dtos)).build();
|
||||
}
|
||||
|
||||
@POST
|
||||
|
||||
Reference in New Issue
Block a user