diff --git a/ccm-cms/src/main/java/org/librecms/pages/models/ItemListModel.java b/ccm-cms/src/main/java/org/librecms/pages/models/ItemListModel.java
index 08f8a7325..bb16c7c1c 100644
--- a/ccm-cms/src/main/java/org/librecms/pages/models/ItemListModel.java
+++ b/ccm-cms/src/main/java/org/librecms/pages/models/ItemListModel.java
@@ -59,6 +59,8 @@ import org.librecms.contentsection.privileges.ItemPrivileges;
import com.arsdigita.kernel.KernelConfig;
+import java.util.Arrays;
+
/**
*
* @author Jens Pelzetter
@@ -67,6 +69,24 @@ import com.arsdigita.kernel.KernelConfig;
@Named("CmsPagesItemListModel")
public class ItemListModel {
+ private static final String ITEM_LIST_SETTINGS_PREFIX = "itemlist";
+
+ private static final String LIMIT_TO_TYPE_SETTING = "limitToType";
+
+ private static final String LIST_ORDER_SETTING = "listOrder";
+
+ private static final String PAGE_SIZE_SETTING = "pageSize";
+
+ private static final boolean DESCENDING_DEFAULT = false;
+
+ private static final String LIMIT_TO_TYPE_DEFAULT = ContentItem.class
+ .getName();
+
+ private static final List LIST_ORDER_DEFAULT = List
+ .of("displayName");
+
+ private static final int PAGE_SIZE_DEFAULT = 20;
+
@Inject
private CategoryModel categoryModel;
@@ -100,62 +120,12 @@ public class ItemListModel {
@Inject
private Shiro shiro;
+ @Inject
+ private PagePropertiesModel pagePropertiesModel;
+
@Inject
private PageUrlModel pageUrlModel;
- private boolean descending;
-
- private String limitToType;
-
- private List listOrder;
-
- private int pageSize;
-
- private List extends AbstractContentItemListItemModel> itemList;
-
- public ItemListModel() {
- descending = false;
- limitToType = ContentItem.class.getName();
- listOrder = List.of("displayName");
- pageSize = 20;
- }
-
- public boolean isDescending() {
- return descending;
- }
-
- public void setDescending(final boolean descending) {
- this.descending = descending;
- }
-
- public String getLimitToType() {
- return limitToType;
- }
-
- public void setLimitToType(final String limitToType) {
- this.limitToType = limitToType;
- }
-
- public List getListOrder() {
- return Collections.unmodifiableList(listOrder);
- }
-
- public void setListOrder(final List listOrder) {
- this.listOrder = new ArrayList<>(listOrder);
- }
-
- public int getPageSize() {
- return pageSize;
- }
-
- public void setPageSize(final int pageSize) {
- this.pageSize = pageSize;
- }
-
- public int getFirstItem() {
- return getOffset(pageSize);
- }
-
@Transactional(Transactional.TxType.REQUIRED)
public int getListSize() {
return getItems().size();
@@ -163,9 +133,16 @@ public class ItemListModel {
@Transactional(Transactional.TxType.REQUIRED)
public List extends AbstractContentItemListItemModel> getItems() {
-// if (itemList == null) {
+ return getItems("");
+ }
+
+ @Transactional(Transactional.TxType.REQUIRED)
+ public List extends AbstractContentItemListItemModel> getItems(
+ final String listName
+ ) {
+ return Collections.unmodifiableList(
buildList(
- buildLimitToType(limitToType),
+ buildLimitToType(getLimitToTypeSetting(listName)),
collectCategories(
categoryRepository
.findById(categoryModel.getCategory().getCategoryId())
@@ -180,15 +157,13 @@ public class ItemListModel {
)
)
),
- listOrder,
- pageSize
- );
-// }
-
- return Collections.unmodifiableList(itemList);
+ getListOrderSetting(listName),
+ getPageSizeSetting(listName)
+ )
+ );
}
- private void buildList(
+ private List extends AbstractContentItemListItemModel> buildList(
final Class extends ContentItem> limitToType,
final List categories,
final List listOrder,
@@ -228,7 +203,7 @@ public class ItemListModel {
.collect(Collectors.toList())
);
- itemList = entityManager
+ return entityManager
.createQuery(criteriaQuery)
.getResultList()
.stream()
@@ -402,6 +377,78 @@ public class ItemListModel {
}
}
+ private String getLimitToTypeSetting(final String listName) {
+ return Optional
+ .ofNullable(
+ pagePropertiesModel
+ .getProperties()
+ .get(
+ buildSettingKey(
+ listName,
+ LIMIT_TO_TYPE_SETTING
+ )
+ )
+ )
+ .orElse(LIMIT_TO_TYPE_DEFAULT);
+ }
+
+ private List getListOrderSetting(final String listName) {
+ return Optional
+ .ofNullable(
+ pagePropertiesModel
+ .getProperties()
+ .get(
+ buildSettingKey(
+ listName,
+ LIST_ORDER_SETTING
+ )
+ )
+ )
+ .map(value -> value.split(","))
+ .map(
+ values -> Arrays
+ .asList(values)
+ .stream()
+ .map(String::strip)
+ .collect(Collectors.toList())
+ )
+ .orElse(LIST_ORDER_DEFAULT);
+ }
+
+ private int getPageSizeSetting(final String listName) {
+ return Optional
+ .ofNullable(
+ pagePropertiesModel
+ .getProperties()
+ .get(
+ buildSettingKey(
+ listName,
+ PAGE_SIZE_SETTING
+ )
+ )
+ )
+ .filter(value -> value.matches("\\d+"))
+ .map(value -> Integer.parseUnsignedInt(value))
+ .orElse(PAGE_SIZE_DEFAULT);
+ }
+
+ private String buildSettingKey(
+ final String listName,
+ final String settingKey
+ ) {
+ return List
+ .of(
+ ITEM_LIST_SETTINGS_PREFIX,
+ listName,
+ settingKey
+ )
+ .stream()
+ .filter(token -> token != null && !token.isBlank())
+ .collect(
+ Collectors.joining(".")
+ );
+ }
+
private AbstractContentItemListItemModel buildListItemModel(
final ContentItem contentItem
) {