Page parameter of item list is now aware of different lists

pull/20/head
Jens Pelzetter 2022-02-16 18:37:00 +01:00
parent 81482c578f
commit fb285f7a29
1 changed files with 38 additions and 14 deletions

View File

@ -60,6 +60,7 @@ import org.librecms.contentsection.privileges.ItemPrivileges;
import com.arsdigita.kernel.KernelConfig;
import java.util.Arrays;
import java.util.stream.Stream;
/**
*
@ -87,6 +88,8 @@ public class ItemListModel {
private static final int PAGE_SIZE_DEFAULT = 20;
private static final String PAGE_PARAM_NAME = "page";
@Inject
private CategoryModel categoryModel;
@ -158,7 +161,8 @@ public class ItemListModel {
)
),
getListOrderSetting(listName),
getPageSizeSetting(listName)
getPageSizeSetting(listName),
getOffset(listName, getPageSizeSetting(listName))
)
);
}
@ -167,7 +171,8 @@ public class ItemListModel {
final Class<? extends ContentItem> limitToType,
final List<Category> categories,
final List<String> listOrder,
final int pageSize
final int pageSize,
final int offset
) {
final CriteriaBuilder criteriaBuilder = entityManager
.getCriteriaBuilder();
@ -212,7 +217,7 @@ public class ItemListModel {
item, globalizationHelper.getNegotiatedLocale()
)
)
.skip(getOffset(pageSize))
.skip(offset)
.limit(pageSize)
.map(this::buildListItemModel)
.collect(Collectors.toList());
@ -362,16 +367,36 @@ public class ItemListModel {
}
}
private int getOffset(final int pageSize) {
if (pageUrlModel.getQueryParameters().containsKey("page")) {
final String value = pageUrlModel.getQueryParameters().get("page");
if (value.matches("\\d*")) {
final int page = Integer.valueOf(value);
private int getOffset(final String listName, final int pageSize) {
final String pageParamName = Stream
.of(listName, PAGE_PARAM_NAME)
.filter(token -> token != null && !token.isBlank())
.collect(
Collectors.joining(".")
);
return page * pageSize;
} else {
return 0;
}
if (pageUrlModel.getQueryParameters().containsKey(pageParamName)) {
return calculateOffset(pageParamName, pageSize);
} else if (pageUrlModel.getQueryParameters().containsKey(PAGE_PARAM_NAME)) {
return calculateOffset(PAGE_PARAM_NAME, pageSize);
} else {
return 0;
}
}
private int calculateOffset(
final String pageParamName,
final int pageSize
) {
return parsePageParam(pageParamName) * pageSize;
}
private int parsePageParam(final String pageParamName) {
final String value = pageUrlModel
.getQueryParameters()
.get(pageParamName);
if (value.matches("\\d+")) {
return Integer.parseUnsignedInt(value);
} else {
return 0;
}
@ -436,13 +461,12 @@ public class ItemListModel {
final String listName,
final String settingKey
) {
return List
return Stream
.of(
ITEM_LIST_SETTINGS_PREFIX,
listName,
settingKey
)
.stream()
.filter(token -> token != null && !token.isBlank())
.collect(
Collectors.joining(".")