@Override public PagedResources<Resource<Taco>> process(PagedResources<Resource<Taco>> resources) { resources .add(entityLinks .linkFor(Taco.class) .slash("recent") .withRel("recents")); return resources; }
@Override public PagedResources<Resource<Address>> process(PagedResources<Resource<Address>> resources) { String[] linkParts = resources.getLink("self").getHref().split("/"); String customerId = linkParts[linkParts.length - 2]; try { UUID.fromString(customerId); resources.add(linkTo(methodOn(AddressesCommandsController.class).getCommands(customerId)).withRel("commands")); } catch (Exception e) {} return resources; } }
@Override public PagedResources<Resource<Customer>> process(PagedResources<Resource<Customer>> resources) { resources.add(linkTo(methodOn(CustomersCommandsController.class).getCommands()).withRel("commands")); return resources; } }
@Override public PagedResources<Resource<Item>> process(PagedResources<Resource<Item>> resources) { resources.add(linkTo(methodOn(MenuItemsCommandsController.class).getCommands()).withRel("commands")); return resources; } }
@Override public PagedResources<Resource<Order>> process(PagedResources<Resource<Order>> resources) { resources.add(linkTo(methodOn(OrdersCommandsController.class).getCommands()).withRel("commands")); return resources; } }
private <R> PagedResources<R> addPaginationLinks(PagedResources<R> resources, Page<?> page, Optional<Link> link) { UriTemplate base = getUriTemplate(link); boolean isNavigable = page.hasPrevious() || page.hasNext(); if (isNavigable || forceFirstAndLastRels) { resources.add(createLink(base, PageRequest.of(0, page.getSize(), page.getSort()), Link.REL_FIRST)); } if (page.hasPrevious()) { resources.add(createLink(base, page.previousPageable(), Link.REL_PREVIOUS)); } Link selfLink = link.map(it -> it.withSelfRel())// .orElseGet(() -> createLink(base, page.getPageable(), Link.REL_SELF)); resources.add(selfLink); if (page.hasNext()) { resources.add(createLink(base, page.nextPageable(), Link.REL_NEXT)); } if (isNavigable || forceFirstAndLastRels) { int lastIndex = page.getTotalPages() == 0 ? 0 : page.getTotalPages() - 1; resources.add(createLink(base, PageRequest.of(lastIndex, page.getSize(), page.getSort()), Link.REL_LAST)); } return resources; }
@Override public PagedResources<Resource<OrderItem>> process(PagedResources<Resource<OrderItem>> resources) { String orderId = new ResourceURI(resources.getId().getHref()).getParentId(); try { UUID.fromString(orderId); resources.add(linkTo(methodOn(OrderItemsCommandsController.class).getCommands(orderId)) .withRel("commands").expand(orderId)); } catch (Exception e) {} return resources; } }
.getTotalElements(), pageUser.getTotalPages())); resources.add(linkTo(methodOn(getClass()).findAll(search, page, size, sort)).withSelfRel()); if (pageUser.getTotalPages() > 1) { resources.add(linkTo(methodOn(getClass()).findAll(search, 1, size, sort)).withRel("first")); resources.add(linkTo(methodOn(getClass()).findAll(search, pageUser.getTotalPages(), size, sort)) .withRel("last")); resources.add(linkTo(methodOn(getClass()).findAll(search, (tempPage + 1) - 1, size, sort)) .withRel("prev")); resources.add(linkTo(methodOn(getClass()).findAll(search, (tempPage + 1) + 1, size, sort)) .withRel("next"));
pageCategory.getTotalElements(), pageCategory.getTotalPages())); resources.add(linkTo(methodOn(getClass()).findAll(search, page, size, sort)).withSelfRel()); if (pageCategory.getTotalPages() > 1) { resources.add(linkTo(methodOn(getClass()).findAll(search, 1, size, sort)) .withRel("first")); resources.add(linkTo(methodOn(getClass()).findAll(search, pageCategory.getTotalPages(), size, sort)).withRel("last")); resources.add(linkTo(methodOn(getClass()).findAll(search, (tempPage + 1) - 1, size, sort)) .withRel("prev")); resources.add(linkTo(methodOn(getClass()).findAll(search, (tempPage + 1) + 1, size, sort)) .withRel("next"));
.getTotalElements(), pageItem.getTotalPages())); resources.add(linkTo(methodOn(getClass()).findByCategoryId(categoryIds, page, size, sort)).withSelfRel()); if (pageItem.getTotalPages() > 1) { resources.add(linkTo(methodOn(getClass()).findByCategoryId(categoryIds, 1, size, sort)) .withRel("first")); resources.add(linkTo(methodOn(getClass()).findByCategoryId(categoryIds, pageItem .getTotalPages(), size, sort)).withRel("last")); resources.add(linkTo(methodOn(getClass()).findByCategoryId(categoryIds, (tempPage + 1) - 1, size, sort)) .withRel("prev")); resources.add(linkTo(methodOn(getClass()).findByCategoryId(categoryIds, (tempPage + 1) + 1, size, sort)) .withRel("next"));
pageCategory.getTotalElements(), pageCategory.getTotalPages())); resources.add(linkTo(methodOn(getClass()).findByParentId(categoryId, page, size, sort)).withSelfRel()); if (pageCategory.getTotalPages() > 1) { resources.add(linkTo(methodOn(getClass()).findByParentId(categoryId, 1, size, sort)) .withRel("first")); resources.add(linkTo(methodOn(getClass()).findByParentId(categoryId, pageCategory.getTotalPages(), size, sort)).withRel("last")); resources.add(linkTo(methodOn(getClass()).findByParentId(categoryId, (tempPage + 1) - 1, size, sort)) .withRel("prev")); resources.add(linkTo(methodOn(getClass()).findByParentId(categoryId, (tempPage + 1) + 1, size, sort)) .withRel("next"));
pageCategory.getTotalElements(), pageCategory.getTotalPages())); resources.add(linkTo(methodOn(getClass()).findByParentIsNull(page, size, sort)).withSelfRel()); if (pageCategory.getTotalPages() > 1) { resources.add(linkTo(methodOn(getClass()).findByParentIsNull(1, size, sort)) .withRel("first")); resources.add(linkTo(methodOn(getClass()).findByParentIsNull(pageCategory.getTotalPages(), size, sort)).withRel("last")); resources.add(linkTo(methodOn(getClass()).findByParentIsNull((tempPage + 1) - 1, size, sort)) .withRel("prev")); resources.add(linkTo(methodOn(getClass()).findByParentIsNull((tempPage + 1) + 1, size, sort)) .withRel("next"));
.getTotalElements(), pageItem.getTotalPages())); resources.add(linkTo(methodOn(getClass()).findAll(search, page, size, sort)).withSelfRel()); if (pageItem.getTotalPages() > 1) { resources.add(linkTo(methodOn(getClass()).findAll(search, 1, size, sort)).withRel("first")); resources.add(linkTo(methodOn(getClass()).findAll(search, pageItem.getTotalPages(), size, sort)) .withRel("last")); resources.add(linkTo(methodOn(getClass()).findAll(search, (tempPage + 1) - 1, size, sort)) .withRel("prev")); resources.add(linkTo(methodOn(getClass()).findAll(search, (tempPage + 1) + 1, size, sort)) .withRel("next"));
pageCategory.getTotalElements(), pageCategory.getTotalPages())); resources.add(linkTo(methodOn(getClass()).findCategoriesById(itemId, page, size, sort)).withSelfRel()); if (pageCategory.getTotalPages() > 1) { resources.add(linkTo(methodOn(getClass()).findCategoriesById(itemId, 1, size, sort)) .withRel("first")); resources.add(linkTo(methodOn(getClass()).findCategoriesById(itemId, pageCategory .getTotalPages(), size, sort)).withRel("last")); resources.add(linkTo(methodOn(getClass()).findCategoriesById(itemId, (tempPage + 1) - 1, size, sort)) .withRel("prev")); resources.add(linkTo(methodOn(getClass()).findCategoriesById(itemId, (tempPage + 1) + 1, size, sort)) .withRel("next"));
@Test public void testPagedResources() { List<Address> addresses = new ArrayList<Address>(); for (int i = 0; i < 4; i++) { addresses.add(new Address()); } PagedResources<Address> addressResources = new PagedResources<Address>(addresses, new PageMetadata(2, 0, addresses.size())); addressResources.add(new Link("http://example.com/addresses", "self")); SirenEntity entity = new SirenEntity(); sirenUtils.toSirenEntity(entity, addressResources); String json = objectMapper.valueToTree(entity) .toString(); with(json).assertThat("$.entities", hasSize(4)); with(json).assertThat("$.entities[0].properties.city.postalCode", equalTo("74199")); with(json).assertThat("$.entities[3].properties.city.name", equalTo("Donnbronn")); with(json).assertThat("$.links", hasSize(1)); }