1
1
package com .baeldung .web .hateoas .listener ;
2
2
3
+ import java .util .StringJoiner ;
4
+
3
5
import javax .servlet .http .HttpServletResponse ;
4
6
5
7
import org .springframework .context .ApplicationListener ;
@@ -27,32 +29,32 @@ public PaginatedResultsRetrievedDiscoverabilityListener() {
27
29
public final void onApplicationEvent (final PaginatedResultsRetrievedEvent ev ) {
28
30
Preconditions .checkNotNull (ev );
29
31
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 ());
31
34
}
32
35
33
36
// - 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 ) {
35
40
plural (uriBuilder , clazz );
36
41
37
- final StringBuilder linkHeader = new StringBuilder ( );
42
+ final StringJoiner linkHeader = new StringJoiner ( ", " );
38
43
if (hasNextPage (page , totalPages )) {
39
44
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 ));
41
46
}
42
47
if (hasPreviousPage (page )) {
43
48
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 ));
46
50
}
47
51
if (hasFirstPage (page )) {
48
52
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 ));
51
54
}
52
55
if (hasLastPage (page , totalPages )) {
53
56
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 ));
56
58
}
57
59
58
60
if (linkHeader .length () > 0 ) {
@@ -61,19 +63,35 @@ final void addLinkHeaderOnPagedResourceRetrieval(final UriComponentsBuilder uriB
61
63
}
62
64
63
65
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 ();
65
71
}
66
72
67
73
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 ();
69
79
}
70
80
71
81
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 ();
73
87
}
74
88
75
89
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 ();
77
95
}
78
96
79
97
final boolean hasNextPage (final int page , final int totalPages ) {
@@ -92,16 +110,11 @@ final boolean hasLastPage(final int page, final int totalPages) {
92
110
return (totalPages > 1 ) && hasNextPage (page , totalPages );
93
111
}
94
112
95
- final void appendCommaIfNecessary (final StringBuilder linkHeader ) {
96
- if (linkHeader .length () > 0 ) {
97
- linkHeader .append (", " );
98
- }
99
- }
100
-
101
113
// template
102
114
103
115
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" ;
105
118
uriBuilder .path ("/auth/" + resourceName );
106
119
}
107
120
0 commit comments