Skip to content

Commit b50ef0b

Browse files
committed
improved slightly link generation code
1 parent 14b65b3 commit b50ef0b

File tree

1 file changed

+34
-21
lines changed

1 file changed

+34
-21
lines changed

spring-boot-rest/src/main/java/com/baeldung/web/hateoas/listener/PaginatedResultsRetrievedDiscoverabilityListener.java

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.baeldung.web.hateoas.listener;
22

3+
import java.util.StringJoiner;
4+
35
import javax.servlet.http.HttpServletResponse;
46

57
import org.springframework.context.ApplicationListener;
@@ -27,32 +29,32 @@ public PaginatedResultsRetrievedDiscoverabilityListener() {
2729
public final void onApplicationEvent(final PaginatedResultsRetrievedEvent ev) {
2830
Preconditions.checkNotNull(ev);
2931

30-
addLinkHeaderOnPagedResourceRetrieval(ev.getUriBuilder(), ev.getResponse(), ev.getClazz(), ev.getPage(), ev.getTotalPages(), ev.getPageSize());
32+
addLinkHeaderOnPagedResourceRetrieval(ev.getUriBuilder(), ev.getResponse(), ev.getClazz(), ev.getPage(),
33+
ev.getTotalPages(), ev.getPageSize());
3134
}
3235

3336
// - note: at this point, the URI is transformed into plural (added `s`) in a hardcoded way - this will change in the future
34-
final void addLinkHeaderOnPagedResourceRetrieval(final UriComponentsBuilder uriBuilder, final HttpServletResponse response, final Class clazz, final int page, final int totalPages, final int pageSize) {
37+
final void addLinkHeaderOnPagedResourceRetrieval(final UriComponentsBuilder uriBuilder,
38+
final HttpServletResponse response, final Class clazz, final int page, final int totalPages,
39+
final int pageSize) {
3540
plural(uriBuilder, clazz);
3641

37-
final StringBuilder linkHeader = new StringBuilder();
42+
final StringJoiner linkHeader = new StringJoiner(", ");
3843
if (hasNextPage(page, totalPages)) {
3944
final String uriForNextPage = constructNextPageUri(uriBuilder, page, pageSize);
40-
linkHeader.append(LinkUtil.createLinkHeader(uriForNextPage, LinkUtil.REL_NEXT));
45+
linkHeader.add(LinkUtil.createLinkHeader(uriForNextPage, LinkUtil.REL_NEXT));
4146
}
4247
if (hasPreviousPage(page)) {
4348
final String uriForPrevPage = constructPrevPageUri(uriBuilder, page, pageSize);
44-
appendCommaIfNecessary(linkHeader);
45-
linkHeader.append(LinkUtil.createLinkHeader(uriForPrevPage, LinkUtil.REL_PREV));
49+
linkHeader.add(LinkUtil.createLinkHeader(uriForPrevPage, LinkUtil.REL_PREV));
4650
}
4751
if (hasFirstPage(page)) {
4852
final String uriForFirstPage = constructFirstPageUri(uriBuilder, pageSize);
49-
appendCommaIfNecessary(linkHeader);
50-
linkHeader.append(LinkUtil.createLinkHeader(uriForFirstPage, LinkUtil.REL_FIRST));
53+
linkHeader.add(LinkUtil.createLinkHeader(uriForFirstPage, LinkUtil.REL_FIRST));
5154
}
5255
if (hasLastPage(page, totalPages)) {
5356
final String uriForLastPage = constructLastPageUri(uriBuilder, totalPages, pageSize);
54-
appendCommaIfNecessary(linkHeader);
55-
linkHeader.append(LinkUtil.createLinkHeader(uriForLastPage, LinkUtil.REL_LAST));
57+
linkHeader.add(LinkUtil.createLinkHeader(uriForLastPage, LinkUtil.REL_LAST));
5658
}
5759

5860
if (linkHeader.length() > 0) {
@@ -61,19 +63,35 @@ final void addLinkHeaderOnPagedResourceRetrieval(final UriComponentsBuilder uriB
6163
}
6264

6365
final String constructNextPageUri(final UriComponentsBuilder uriBuilder, final int page, final int size) {
64-
return uriBuilder.replaceQueryParam(PAGE, page + 1).replaceQueryParam("size", size).build().encode().toUriString();
66+
return uriBuilder.replaceQueryParam(PAGE, page + 1)
67+
.replaceQueryParam("size", size)
68+
.build()
69+
.encode()
70+
.toUriString();
6571
}
6672

6773
final String constructPrevPageUri(final UriComponentsBuilder uriBuilder, final int page, final int size) {
68-
return uriBuilder.replaceQueryParam(PAGE, page - 1).replaceQueryParam("size", size).build().encode().toUriString();
74+
return uriBuilder.replaceQueryParam(PAGE, page - 1)
75+
.replaceQueryParam("size", size)
76+
.build()
77+
.encode()
78+
.toUriString();
6979
}
7080

7181
final String constructFirstPageUri(final UriComponentsBuilder uriBuilder, final int size) {
72-
return uriBuilder.replaceQueryParam(PAGE, 0).replaceQueryParam("size", size).build().encode().toUriString();
82+
return uriBuilder.replaceQueryParam(PAGE, 0)
83+
.replaceQueryParam("size", size)
84+
.build()
85+
.encode()
86+
.toUriString();
7387
}
7488

7589
final String constructLastPageUri(final UriComponentsBuilder uriBuilder, final int totalPages, final int size) {
76-
return uriBuilder.replaceQueryParam(PAGE, totalPages).replaceQueryParam("size", size).build().encode().toUriString();
90+
return uriBuilder.replaceQueryParam(PAGE, totalPages)
91+
.replaceQueryParam("size", size)
92+
.build()
93+
.encode()
94+
.toUriString();
7795
}
7896

7997
final boolean hasNextPage(final int page, final int totalPages) {
@@ -92,16 +110,11 @@ final boolean hasLastPage(final int page, final int totalPages) {
92110
return (totalPages > 1) && hasNextPage(page, totalPages);
93111
}
94112

95-
final void appendCommaIfNecessary(final StringBuilder linkHeader) {
96-
if (linkHeader.length() > 0) {
97-
linkHeader.append(", ");
98-
}
99-
}
100-
101113
// template
102114

103115
protected void plural(final UriComponentsBuilder uriBuilder, final Class clazz) {
104-
final String resourceName = clazz.getSimpleName().toLowerCase() + "s";
116+
final String resourceName = clazz.getSimpleName()
117+
.toLowerCase() + "s";
105118
uriBuilder.path("/auth/" + resourceName);
106119
}
107120

0 commit comments

Comments
 (0)