DATACMNS-418 - PagedResourcesAssembler now exposes method to append template parameters.
PagedResourcesAssembler.appendPaginationParameterTemplates adds the currently missing pagination template variables to the given link.
This commit is contained in:
@@ -113,6 +113,25 @@ public class PagedResourcesAssembler<T> implements ResourceAssembler<Page<T>, Pa
|
||||
return createResource(page, assembler, link);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the pagination parameters for all parameters not already present in the given {@link Link}.
|
||||
*
|
||||
* @param link must not be {@literal null}.
|
||||
* @return
|
||||
*/
|
||||
public Link appendPaginationParameterTemplates(Link link) {
|
||||
|
||||
Assert.notNull(link, "Link must not be null!");
|
||||
|
||||
String uri = link.getHref();
|
||||
UriTemplate uriTemplate = new UriTemplate(uri);
|
||||
UriComponents uriComponents = UriComponentsBuilder.fromUriString(uri).build();
|
||||
|
||||
TemplateVariables variables = pageableResolver.getPaginationTemplateVariables(getMethodParameter(), uriComponents);
|
||||
|
||||
return new Link(uriTemplate.with(variables), link.getRel());
|
||||
}
|
||||
|
||||
private <S, R extends ResourceSupport> PagedResources<R> createResource(Page<S> page,
|
||||
ResourceAssembler<S, R> assembler, Link link) {
|
||||
|
||||
@@ -144,9 +163,7 @@ public class PagedResourcesAssembler<T> implements ResourceAssembler<Page<T>, Pa
|
||||
foo(resources, page.previousPageable(), uri, Link.REL_PREVIOUS);
|
||||
}
|
||||
|
||||
UriComponents uriComponents = UriComponentsBuilder.fromUriString(uri).build();
|
||||
TemplateVariables variables = pageableResolver.getPaginationTemplateVariables(getMethodParameter(), uriComponents);
|
||||
resources.add(new Link(new UriTemplate(uri, variables), Link.REL_SELF));
|
||||
resources.add(appendPaginationParameterTemplates(new Link(uri)));
|
||||
|
||||
return resources;
|
||||
}
|
||||
|
||||
@@ -55,6 +55,7 @@ public class PagedResourcesAssemblerUnitTests {
|
||||
PagedResources<Resource<Person>> resources = assembler.toResource(createPage(0));
|
||||
|
||||
assertThat(resources.getLink(Link.REL_PREVIOUS), is(nullValue()));
|
||||
assertThat(resources.getLink(Link.REL_SELF), is(notNullValue()));
|
||||
assertThat(resources.getLink(Link.REL_NEXT), is(notNullValue()));
|
||||
}
|
||||
|
||||
@@ -65,6 +66,7 @@ public class PagedResourcesAssemblerUnitTests {
|
||||
PagedResources<Resource<Person>> resources = assembler.toResource(createPage(1));
|
||||
|
||||
assertThat(resources.getLink(Link.REL_PREVIOUS), is(notNullValue()));
|
||||
assertThat(resources.getLink(Link.REL_SELF), is(notNullValue()));
|
||||
assertThat(resources.getLink(Link.REL_NEXT), is(notNullValue()));
|
||||
}
|
||||
|
||||
@@ -75,6 +77,7 @@ public class PagedResourcesAssemblerUnitTests {
|
||||
PagedResources<Resource<Person>> resources = assembler.toResource(createPage(2));
|
||||
|
||||
assertThat(resources.getLink(Link.REL_PREVIOUS), is(notNullValue()));
|
||||
assertThat(resources.getLink(Link.REL_SELF), is(notNullValue()));
|
||||
assertThat(resources.getLink(Link.REL_NEXT), is(nullValue()));
|
||||
}
|
||||
|
||||
@@ -87,6 +90,7 @@ public class PagedResourcesAssemblerUnitTests {
|
||||
PagedResources<Resource<Person>> resources = assembler.toResource(createPage(1));
|
||||
|
||||
assertThat(resources.getLink(Link.REL_PREVIOUS).getHref(), startsWith(baseUri.toUriString()));
|
||||
assertThat(resources.getLink(Link.REL_SELF), is(notNullValue()));
|
||||
assertThat(resources.getLink(Link.REL_NEXT).getHref(), startsWith(baseUri.toUriString()));
|
||||
}
|
||||
|
||||
@@ -99,6 +103,7 @@ public class PagedResourcesAssemblerUnitTests {
|
||||
PagedResources<Resource<Person>> resources = assembler.toResource(createPage(1), link);
|
||||
|
||||
assertThat(resources.getLink(Link.REL_PREVIOUS).getHref(), startsWith(link.getHref()));
|
||||
assertThat(resources.getLink(Link.REL_SELF), is(notNullValue()));
|
||||
assertThat(resources.getLink(Link.REL_NEXT).getHref(), startsWith(link.getHref()));
|
||||
}
|
||||
|
||||
@@ -117,6 +122,31 @@ public class PagedResourcesAssemblerUnitTests {
|
||||
assembler.toResource(page);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see DATACMNS-418
|
||||
*/
|
||||
@Test
|
||||
public void addsSelfLinkWithPaginationTemplateVariables() {
|
||||
|
||||
PagedResourcesAssembler<Person> assembler = new PagedResourcesAssembler<Person>(resolver, null);
|
||||
PagedResources<Resource<Person>> resources = assembler.toResource(createPage(1));
|
||||
|
||||
Link selfLink = resources.getLink(Link.REL_SELF);
|
||||
assertThat(selfLink.getHref(), endsWith("{?page,size,sort}"));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see DATACMNS-418
|
||||
*/
|
||||
@Test
|
||||
public void appendsMissingTemplateParametersToLink() {
|
||||
|
||||
PagedResourcesAssembler<Person> assembler = new PagedResourcesAssembler<Person>(resolver, null);
|
||||
|
||||
Link link = new Link("/foo?page=0");
|
||||
assertThat(assembler.appendPaginationParameterTemplates(link), is(new Link("/foo?page=0{&size,sort}")));
|
||||
}
|
||||
|
||||
private static Page<Person> createPage(int index) {
|
||||
|
||||
AbstractPageRequest request = new PageRequest(index, 1);
|
||||
|
||||
Reference in New Issue
Block a user