use of org.candlepin.common.paging.Page in project candlepin by candlepin.
the class LinkHeaderResponseFilter method filter.
@SuppressWarnings("rawtypes")
public void filter(ContainerRequestContext reqContext, ContainerResponseContext respContext) {
Page page = ResteasyProviderFactory.getContextData(Page.class);
// Make sure we have page information in the context
if (page == null) {
return;
}
// If we aren't paging, then no need for Link headers.
if (page.getPageRequest() == null || !page.getPageRequest().isPaging()) {
return;
}
UriBuilder builder = buildBaseUrl(reqContext);
// If builder is null, we couldn't read the request URI, so stop.
if (builder == null) {
return;
}
MultivaluedMap<String, String> params = null;
params = reqContext.getUriInfo().getQueryParameters();
builder = addUnchangingQueryParams(builder, params);
// TODO add missing parameters like the default limit if no limit is given.
LinkHeader header = new LinkHeader();
Integer next = getNextPage(page);
if (next != null) {
header.addLink(null, "next", buildPageLink(builder, next), null);
}
Integer prev = getPrevPage(page);
if (prev != null) {
header.addLink(null, "prev", buildPageLink(builder, prev), null);
}
header.addLink(null, "first", buildPageLink(builder, 1), null);
header.addLink(null, "last", buildPageLink(builder, getLastPage(page)), null);
respContext.getHeaders().add(LINK_HEADER, header.toString());
respContext.getHeaders().add(TOTAL_RECORDS_COUNT, page.getMaxRecords());
}
use of org.candlepin.common.paging.Page in project candlepin by candlepin.
the class EntitlementResourceTest method getAllEntitlements.
@Test
public void getAllEntitlements() {
PageRequest req = new PageRequest();
req.setPage(1);
req.setPerPage(10);
Entitlement e = TestUtil.createEntitlement();
e.setId("getEntitlementList");
List<Entitlement> entitlements = new ArrayList<>();
entitlements.add(e);
Page<List<Entitlement>> page = new Page<>();
page.setPageData(entitlements);
EntitlementDTO entitlementDTO = new EntitlementDTO();
entitlementDTO.setId("getEntitlementList");
when(entitlementCurator.listAll(isA(EntitlementFilterBuilder.class), isA(PageRequest.class))).thenReturn(page);
when(modelTranslator.translate(isA(Entitlement.class), eq(EntitlementDTO.class))).thenReturn(entitlementDTO);
List<EntitlementDTO> result = entResource.listAllForConsumer(null, null, null, req);
assertEquals(1, result.size());
assertEquals("getEntitlementList", result.get(0).getId());
}
use of org.candlepin.common.paging.Page in project candlepin by candlepin.
the class OwnerResource method listPools.
/**
* Retrieves a list of Pools for an Owner
*
* @param ownerKey id of the owner whose entitlement pools are sought.
* @param matches Find pools matching the given pattern in a variety of fields.
* * and ? wildcards are supported.
* @return a list of Pool objects
* @httpcode 400
* @httpcode 404
* @httpcode 200
*/
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("{owner_key}/pools")
@SuppressWarnings("checkstyle:indentation")
@ApiOperation(notes = "Retrieves a list of Pools for an Owner", value = "List Pools")
@ApiResponses({ @ApiResponse(code = 404, message = "Owner not found"), @ApiResponse(code = 400, message = "Invalid request") })
public List<PoolDTO> listPools(@PathParam("owner_key") @Verify(value = Owner.class, subResource = SubResource.POOLS) String ownerKey, @QueryParam("consumer") String consumerUuid, @QueryParam("activation_key") String activationKeyName, @QueryParam("product") String productId, @QueryParam("subscription") String subscriptionId, @ApiParam("Include pools that are not suited to the unit's facts.") @QueryParam("listall") @DefaultValue("false") boolean listAll, @ApiParam("Date to use as current time for lookup criteria. Defaults" + " to current date if not specified.") @QueryParam("activeon") @DefaultValue(DateFormat.NOW) @DateFormat Date activeOn, @ApiParam("Find pools matching the given pattern in a variety of fields;" + " * and ? wildcards are supported; may be specified multiple times") @QueryParam("matches") List<String> matches, @ApiParam("The attributes to return based on the specified types.") @QueryParam("attribute") @CandlepinParam(type = KeyValueParameter.class) List<KeyValueParameter> attrFilters, @ApiParam("When set to true, it will add future dated pools to the result, " + "based on the activeon date.") @QueryParam("add_future") @DefaultValue("false") boolean addFuture, @ApiParam("When set to true, it will return only future dated pools to the result, " + "based on the activeon date.") @QueryParam("only_future") @DefaultValue("false") boolean onlyFuture, @ApiParam("Will only return pools with a start date after the supplied date. " + "Overrides the activeOn date.") @QueryParam("after") @DateFormat Date after, @ApiParam("One or more pool IDs to use to filter the output; only pools with IDs matching " + "those provided will be returned; may be specified multiple times") @QueryParam("poolid") List<String> poolIds, @Context Principal principal, @Context PageRequest pageRequest) {
Owner owner = findOwnerByKey(ownerKey);
Consumer c = null;
if (consumerUuid != null) {
c = consumerCurator.findByUuid(consumerUuid);
if (c == null) {
throw new NotFoundException(i18n.tr("Unit: {0} not found", consumerUuid));
}
if (!c.getOwnerId().equals(owner.getId())) {
throw new BadRequestException("Consumer specified does not belong to owner on path");
}
if (!principal.canAccess(c, SubResource.NONE, Access.READ_ONLY)) {
throw new ForbiddenException(i18n.tr("User {0} cannot access consumer {1}", principal.getPrincipalName(), c.getUuid()));
}
}
ActivationKey key = null;
if (activationKeyName != null) {
key = activationKeyCurator.lookupForOwner(activationKeyName, owner);
if (key == null) {
throw new BadRequestException(i18n.tr("ActivationKey with id {0} could not be found.", activationKeyName));
}
}
if (addFuture && onlyFuture) {
throw new BadRequestException(i18n.tr("The flags add_future and only_future cannot be used at the same time."));
}
if (after != null && (addFuture || onlyFuture)) {
throw new BadRequestException(i18n.tr("The flags add_future and only_future cannot be used with the parameter after."));
}
if (after != null) {
activeOn = null;
}
// Process the filters passed for the attributes
PoolFilterBuilder poolFilters = new PoolFilterBuilder();
for (KeyValueParameter filterParam : attrFilters) {
poolFilters.addAttributeFilter(filterParam.key(), filterParam.value());
}
if (matches != null) {
matches.stream().filter(elem -> elem != null && !elem.isEmpty()).forEach(elem -> poolFilters.addMatchesFilter(elem));
}
if (poolIds != null && !poolIds.isEmpty()) {
poolFilters.addIdFilters(poolIds);
}
Page<List<Pool>> page = poolManager.listAvailableEntitlementPools(c, key, owner.getId(), productId, subscriptionId, activeOn, listAll, poolFilters, pageRequest, addFuture, onlyFuture, after);
List<Pool> poolList = page.getPageData();
calculatedAttributesUtil.setCalculatedAttributes(poolList, activeOn);
calculatedAttributesUtil.setQuantityAttributes(poolList, c, activeOn);
// Store the page for the LinkHeaderResponseFilter
ResteasyProviderFactory.pushContext(Page.class, page);
List<PoolDTO> poolDTOs = new ArrayList<>();
for (Pool pool : poolList) {
poolDTOs.add(translator.translate(pool, PoolDTO.class));
}
return poolDTOs;
}
use of org.candlepin.common.paging.Page in project candlepin by candlepin.
the class LinkHeaderResponseFilterTest method testGetNextPage.
@Test
public void testGetNextPage() {
Page<Object> p = new Page<>();
p.setMaxRecords(55);
PageRequest pr = new PageRequest();
p.setPageRequest(pr);
pr.setPerPage(10);
pr.setPage(3);
assertEquals(Integer.valueOf(4), interceptor.getNextPage(p));
}
use of org.candlepin.common.paging.Page in project candlepin by candlepin.
the class LinkHeaderResponseFilterTest method testGetLastPageWhenEvenlyDivisible.
@Test
public void testGetLastPageWhenEvenlyDivisible() {
Page<Object> p = new Page<>();
p.setMaxRecords(10);
PageRequest pr = new PageRequest();
p.setPageRequest(pr);
pr.setPerPage(10);
pr.setPage(1);
assertEquals(Integer.valueOf(1), interceptor.getLastPage(p));
}
Aggregations