in reference/src/main/java/org/apache/sling/cms/reference/models/ItemList.java [61:116]
public ItemList(@Self SlingHttpServletRequest request, @RequestAttribute @Named("limit") String limit,
@RequestAttribute @Named("query") String query) {
this.query = query;
Set<String> distinct = new HashSet<>();
if (request.getRequestPathInfo().getSuffix() != null) {
query = query.replace("{SUFFIX}", request.getRequestPathInfo().getSuffix());
}
log.debug("Listing results of: {}", query);
List<Resource> queryItems = new ArrayList<>();
Iterator<Resource> res = request.getResourceResolver().findResources(query, Query.JCR_SQL2);
while (res.hasNext()) {
Resource result = res.next();
if (!distinct.contains(result.getPath())) {
queryItems.add(result);
distinct.add(result.getPath());
}
}
count = queryItems.size();
log.debug("Found {} results", count);
if (StringUtils.isNotBlank(request.getParameter("page")) && request.getParameter("page").matches("\\d+")) {
page = Integer.parseInt(request.getParameter("page"), 10) - 1;
log.debug("Using page {}", page);
} else {
page = 0;
log.debug("Page not specified or not valid");
}
int l = Integer.parseInt(limit, 10);
if (page * l >= count) {
start = count;
} else {
start = page * l;
}
log.debug("Using start {}", start);
if ((page * l) + l >= count) {
end = count;
} else {
end = (page * l) + l;
}
log.debug("Using end {}", end);
items = queryItems.subList(start, end);
List<Integer> pgs = new ArrayList<>();
int max = ((int) Math.ceil((double) count / l)) + 1;
for (int i = 1; i < max; i++) {
pgs.add(i);
}
pages = pgs.toArray(new Integer[pgs.size()]);
if (log.isDebugEnabled()) {
log.debug("Loaded pages {}", Arrays.toString(pages));
}
}