/** * Factory method to easily create a {@link PagedResources} instance from a set of entities and pagination metadata. * * @param content must not be {@literal null}. * @param metadata * @return */ @SuppressWarnings("unchecked") public static <T extends Resource<S>, S> PagedResources<T> wrap(Iterable<S> content, PageMetadata metadata) { Assert.notNull(content, "Content must not be null!"); ArrayList<T> resources = new ArrayList<>(); for (S element : content) { resources.add((T) new Resource<>(element)); } return new PagedResources<>(resources, metadata); }
@Override public PagedResources<?> deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { JavaType rootType = JacksonHelper.findRootType(this.contentType); UberDocument doc = p.getCodec().readValue(p, UberDocument.class); Resources<?> resources = extractResources(doc, rootType, this.contentType); PageMetadata pageMetadata = extractPagingMetadata(doc); return new PagedResources<>(resources.getContent(), pageMetadata, resources.getLinks()); }
@ResponseBody @SuppressWarnings({ "unchecked" }) @RequestMapping(value = BASE_MAPPING, method = RequestMethod.GET, produces = { "application/x-spring-data-compact+json", "text/uri-list" }) public Resources<?> getCollectionResourceCompact(@QuerydslPredicate RootResourceInformation resourceinformation, DefaultedPageable pageable, Sort sort, PersistentEntityResourceAssembler assembler) throws ResourceNotFoundException, HttpRequestMethodNotSupportedException { Resources<?> resources = getCollectionResource(resourceinformation, pageable, sort, assembler); List<Link> links = new ArrayList<Link>(resources.getLinks()); for (Resource<?> resource : ((Resources<Resource<?>>) resources).getContent()) { PersistentEntityResource persistentEntityResource = (PersistentEntityResource) resource; links.add(resourceLink(resourceinformation, persistentEntityResource)); } if (resources instanceof PagedResources) { return new PagedResources<Object>(Collections.emptyList(), ((PagedResources<?>) resources).getMetadata(), links); } else { return new Resources<Object>(Collections.emptyList(), links); } }
@Override public PagedResources deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { JavaType rootType = JacksonHelper.findRootType(this.contentType); JavaType wrappedType = ctxt.getTypeFactory().constructParametricType(CollectionJsonDocument.class, rootType); CollectionJsonDocument<?> document = jp.getCodec().readValue(jp, wrappedType); List<Object> items = new ArrayList<>(); document.getCollection().getItems().forEach(item -> { Object data = item.toRawData(rootType); List<Link> links = item.getLinks() == null ? Collections.EMPTY_LIST : item.getLinks(); if (this.contentType.hasGenericTypes()) { if (this.contentType.containedType(0).hasRawClass(Resource.class)) { items.add(new Resource<>(data, potentiallyAddSelfLink(links, item.getHref()))); } else { items.add(data); } } }); PagedResources.PageMetadata pageMetadata = null; return new PagedResources(items, pageMetadata, potentiallyAddSelfLink(document.getCollection().getLinks(), document.getCollection().getHref())); }
/** * Creates the {@link PagedResources} to be equipped with pagination links downstream. * * @param resources the original page's elements mapped into {@link ResourceSupport} instances. * @param metadata the calculated {@link PageMetadata}, must not be {@literal null}. * @param page the original page handed to the assembler, must not be {@literal null}. * @return must not be {@literal null}. */ protected <R extends ResourceSupport, S> PagedResources<R> createPagedResource(List<R> resources, PageMetadata metadata, Page<S> page) { Assert.notNull(resources, "Content resources must not be null!"); Assert.notNull(metadata, "PageMetadata must not be null!"); Assert.notNull(page, "Page must not be null!"); return new PagedResources<>(resources, metadata); }
/** * Factory method to easily create a {@link PagedResources} instance from a set of entities and pagination metadata. * * @param content must not be {@literal null}. * @param metadata * @return */ @SuppressWarnings("unchecked") public static <T extends Resource<S>, S> PagedResources<T> wrap(Iterable<S> content, PageMetadata metadata) { Assert.notNull(content, "Content must not be null!"); ArrayList<T> resources = new ArrayList<T>(); for (S element : content) { resources.add((T) new Resource<S>(element)); } return new PagedResources<T>(resources, metadata); }
@RequestMapping(produces = {MediaTypes.HAL_JSON_VALUE, MediaType.APPLICATION_JSON_VALUE}) public ResponseEntity<PagedResources<StreamMetrics>> fetchMetrics( @RequestParam(value = "name", defaultValue = "") String name) { Collection<StreamMetrics> entries = service.toStreamMetrics(name); int totalPages = (entries.size() == 0) ? 0 : entries.size() / entries.size(); PagedResources.PageMetadata pageMetadata = new PagedResources.PageMetadata(entries.size(), 0, entries.size(), totalPages); PagedResources<StreamMetrics> pagedResources = new PagedResources<>(entries, pageMetadata, ControllerLinkBuilder.linkTo(MetricsCollectorEndpoint.class).withRel(Link.REL_SELF)); return new ResponseEntity<>(pagedResources, HttpStatus.OK); }
private PagedResources<?> toEmptyResource(Page<?> page, Class<?> type, Optional<Link> link) { Assert.notNull(page, "Page must must not be null!"); Assert.isTrue(!page.hasContent(), "Page must not have any content!"); Assert.notNull(type, "Type must not be null!"); Assert.notNull(link, "Link must not be null!"); PageMetadata metadata = asPageMetadata(page); EmbeddedWrapper wrapper = wrappers.emptyCollectionOf(type); List<EmbeddedWrapper> embedded = Collections.singletonList(wrapper); return addPaginationLinks(new PagedResources<>(embedded, metadata), page, link); }
@ResponseBody @SuppressWarnings({ "unchecked" }) @RequestMapping(value = BASE_MAPPING, method = RequestMethod.GET, produces = { "application/x-spring-data-compact+json", "text/uri-list" }) public Resources<?> getCollectionResourceCompact(@QuerydslPredicate RootResourceInformation resourceinformation, DefaultedPageable pageable, Sort sort, PersistentEntityResourceAssembler assembler) throws ResourceNotFoundException, HttpRequestMethodNotSupportedException { Resources<?> resources = getCollectionResource(resourceinformation, pageable, sort, assembler); List<Link> links = new ArrayList<Link>(resources.getLinks()); for (Resource<?> resource : ((Resources<Resource<?>>) resources).getContent()) { PersistentEntityResource persistentEntityResource = (PersistentEntityResource) resource; links.add(resourceLink(resourceinformation, persistentEntityResource)); } if (resources instanceof PagedResources) { return new PagedResources<Object>(Collections.emptyList(), ((PagedResources<?>) resources).getMetadata(), links); } else { return new Resources<Object>(Collections.emptyList(), links); } }
aggregateCounts.add(deepAssembler.toResource(aggregateCount)); return new PagedResources<>(aggregateCounts, resources.getMetadata());
/** * Return a paged collection of job executions for a given job. * * @param jobName name of the job * @param pageable If not provided will default to page 0 and a page size of 20 * @return Collection of JobExecutionInfo */ @RequestMapping(value = "", method = RequestMethod.GET, params = "jobname") @ResponseStatus(HttpStatus.OK) public PagedResources<JobExecutionInfoResource> executionsForJob(@RequestParam("jobname") String jobName, Pageable pageable) { Collection<JobExecutionInfoResource> result = new ArrayList<JobExecutionInfoResource>(); try { for (JobExecution jobExecution : jobService.listJobExecutionsForJob(jobName, pageable.getOffset(), pageable.getPageSize())) { result.add(jobExecutionInfoResourceAssembler.toResource(new JobExecutionInfo(jobExecution, timeZone))); } return new PagedResources<JobExecutionInfoResource>(result, new PageMetadata(pageable.getPageSize(), pageable.getPageNumber(), jobService.countJobExecutionsForJob(jobName))); } catch (NoSuchJobException e) { throw new NoSuchBatchJobException(jobName); } }
/** * List all job executions in a given range. If no pagination is provided, * the default {@code PageRequest(0, 20)} is passed in. See {@link org.springframework.data.web.PageableHandlerMethodArgumentResolver} * for details. * * @param pageable If not provided will default to page 0 and a page size of 20 * @return Collection of JobExecutionInfoResource */ @RequestMapping(value = { "" }, method = RequestMethod.GET) @ResponseStatus(HttpStatus.OK) public PagedResources<JobExecutionInfoResource> list(Pageable pageable) throws NoSuchJobException { Collection<JobExecutionInfoResource> resources = new ArrayList<JobExecutionInfoResource>(); for (JobExecution jobExecution : jobService.listJobExecutions(pageable.getOffset(), pageable.getPageSize())) { Job job = jobLocator.getJob(jobExecution.getJobInstance().getJobName()); final JobExecutionInfoResource jobExecutionInfoResource = getJobExecutionInfoResource(jobExecution, job.isRestartable()); resources.add(jobExecutionInfoResource); } return new PagedResources<JobExecutionInfoResource>(resources, new PageMetadata(pageable.getPageSize(), pageable.getPageNumber(), jobService.countJobExecutions())); }
public <R extends ResourceSupport> PagedResources<R> toResource(Pageable pageable, Page<T> page, ResourceAssembler<T, R> assembler) { PagedResources<R> pagedResources = toResource(page, assembler); ExtendedPageMetadata extendedPageMetadata = extendedPageMetadataConverter.toExtendedPageMetadata(pageable.getOffset(), pagedResources.getMetadata()); pagedResources = new PagedResources<>(pagedResources.getContent(), extendedPageMetadata, pagedResources.getLinks()); return pagedResources; } }
}); resources = new PagedResources<>(users, new PagedResources.PageMetadata(tempSize, (tempPage + 1), pageUser .getTotalElements(), pageUser.getTotalPages()));
items.add(dto); }); resources = new PagedResources<>(items, new PagedResources.PageMetadata(tempSize, (tempPage + 1), pageItem .getTotalElements(), pageItem.getTotalPages()));
items.add(dto); }); resources = new PagedResources<>(items, new PagedResources.PageMetadata(tempSize, (tempPage + 1), pageItem .getTotalElements(), pageItem.getTotalPages()));
categories.add(dto); }); resources = new PagedResources<>(categories, new PagedResources.PageMetadata(tempSize, (tempPage + 1), pageCategory.getTotalElements(), pageCategory.getTotalPages()));
categories.add(dto); }); resources = new PagedResources<>(categories, new PagedResources.PageMetadata(tempSize, (tempPage + 1), pageCategory.getTotalElements(), pageCategory.getTotalPages()));
categories.add(dto); }); resources = new PagedResources<>(categories, new PagedResources.PageMetadata(tempSize, (tempPage + 1), pageCategory.getTotalElements(), pageCategory.getTotalPages()));
@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)); }