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