DATAREST-1055 - Move to Optional for base link handling in repository controllers.
This commit is contained in:
@@ -20,12 +20,14 @@ import static org.springframework.data.rest.webmvc.ControllerUtils.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.springframework.data.auditing.AuditableBeanWrapperFactory;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.rest.core.mapping.ResourceMetadata;
|
||||
import org.springframework.data.web.PagedResourcesAssembler;
|
||||
import org.springframework.hateoas.Link;
|
||||
import org.springframework.hateoas.PagedResources;
|
||||
import org.springframework.hateoas.Resource;
|
||||
import org.springframework.hateoas.Resources;
|
||||
import org.springframework.hateoas.core.EmbeddedWrappers;
|
||||
@@ -69,7 +71,7 @@ class AbstractRepositoryRestController {
|
||||
|
||||
@SuppressWarnings({ "unchecked" })
|
||||
protected Resources<?> toResources(Iterable<?> source, PersistentEntityResourceAssembler assembler,
|
||||
Class<?> domainType, Link baseLink) {
|
||||
Class<?> domainType, Optional<Link> baseLink) {
|
||||
|
||||
if (source instanceof Page) {
|
||||
Page<Object> page = (Page<Object>) source;
|
||||
@@ -82,14 +84,15 @@ class AbstractRepositoryRestController {
|
||||
}
|
||||
|
||||
protected Resources<?> entitiesToResources(Page<Object> page, PersistentEntityResourceAssembler assembler,
|
||||
Class<?> domainType, Link baseLink) {
|
||||
Class<?> domainType, Optional<Link> baseLink) {
|
||||
|
||||
if (page.getContent().isEmpty()) {
|
||||
return pagedResourcesAssembler.toEmptyResource(page, domainType, baseLink);
|
||||
return baseLink.<PagedResources<?>> map(it -> pagedResourcesAssembler.toEmptyResource(page, domainType, it))//
|
||||
.orElseGet(() -> pagedResourcesAssembler.toEmptyResource(page, domainType));
|
||||
}
|
||||
|
||||
return baseLink == null ? pagedResourcesAssembler.toResource(page, assembler)
|
||||
: pagedResourcesAssembler.toResource(page, assembler, baseLink);
|
||||
return baseLink.map(it -> pagedResourcesAssembler.toResource(page, assembler, it))//
|
||||
.orElseGet(() -> pagedResourcesAssembler.toResource(page, assembler));
|
||||
}
|
||||
|
||||
protected Resources<?> entitiesToResources(Iterable<Object> entities, PersistentEntityResourceAssembler assembler,
|
||||
|
||||
@@ -203,8 +203,8 @@ class RepositoryEntityController extends AbstractRepositoryRestController implem
|
||||
: invoker.invokeFindAll(sort);
|
||||
|
||||
ResourceMetadata metadata = resourceInformation.getResourceMetadata();
|
||||
Link baseLink = entityLinks.linkToPagedResource(resourceInformation.getDomainType(),
|
||||
pageable.isDefault() ? null : pageable.getPageable());
|
||||
Optional<Link> baseLink = Optional.of(entityLinks.linkToPagedResource(resourceInformation.getDomainType(),
|
||||
pageable.isDefault() ? null : pageable.getPageable()));
|
||||
|
||||
Resources<?> result = toResources(results, assembler, metadata.getDomainType(), baseLink);
|
||||
result.add(getCollectionResourceLinks(resourceInformation, pageable));
|
||||
|
||||
@@ -119,7 +119,7 @@ class RepositoryPropertyReferenceController extends AbstractRepositoryRestContro
|
||||
|
||||
if (prop.property.isCollectionLike()) {
|
||||
|
||||
return toResources((Iterable<?>) it, assembler, prop.propertyType, null);
|
||||
return toResources((Iterable<?>) it, assembler, prop.propertyType, Optional.empty());
|
||||
|
||||
} else if (prop.property.isMap()) {
|
||||
|
||||
|
||||
@@ -187,7 +187,7 @@ class RepositorySearchController extends AbstractRepositoryRestController {
|
||||
MethodResourceMapping methodMapping = searchMappings.getExportedMethodMappingForPath(search);
|
||||
Class<?> domainType = methodMapping.getReturnedDomainType();
|
||||
|
||||
return toResource(result, assembler, domainType, null, headers, resourceInformation);
|
||||
return toResource(result, assembler, domainType, Optional.empty(), headers, resourceInformation);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -201,7 +201,7 @@ class RepositorySearchController extends AbstractRepositoryRestController {
|
||||
* @return
|
||||
*/
|
||||
protected ResponseEntity<?> toResource(Optional<Object> source, final PersistentEntityResourceAssembler assembler,
|
||||
Class<?> domainType, Link baseLink, HttpHeaders headers, RootResourceInformation information) {
|
||||
Class<?> domainType, Optional<Link> baseLink, HttpHeaders headers, RootResourceInformation information) {
|
||||
|
||||
return source.map(it -> {
|
||||
|
||||
@@ -243,7 +243,7 @@ class RepositorySearchController extends AbstractRepositoryRestController {
|
||||
Optional<Object> result = executeQueryMethod(resourceInformation.getInvoker(), parameters, method, pageable, sort,
|
||||
assembler);
|
||||
ResourceMetadata metadata = resourceInformation.getResourceMetadata();
|
||||
ResponseEntity<?> entity = toResource(result, assembler, metadata.getDomainType(), null, headers,
|
||||
ResponseEntity<?> entity = toResource(result, assembler, metadata.getDomainType(), Optional.empty(), headers,
|
||||
resourceInformation);
|
||||
Object resource = entity.getBody();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user