From 4251fd1df94d7ad57cb5f9a18615c707677a96af Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Sat, 3 Jun 2023 17:27:53 +0200 Subject: [PATCH] Several bugfixes for models --- .../librecms/pages/models/BreadcrumbData.java | 10 ++++ .../librecms/pages/models/CategoryModel.java | 1 - .../pages/models/ContentItemModel.java | 16 +++++ .../librecms/pages/models/ItemListModel.java | 59 +++++++++++-------- .../pages/models/PagePropertiesModel.java | 6 +- .../librecms/pages/models/PageUrlModel.java | 1 + 6 files changed, 67 insertions(+), 26 deletions(-) diff --git a/ccm-cms/src/main/java/org/librecms/pages/models/BreadcrumbData.java b/ccm-cms/src/main/java/org/librecms/pages/models/BreadcrumbData.java index df5f3b022..81f39d9c5 100644 --- a/ccm-cms/src/main/java/org/librecms/pages/models/BreadcrumbData.java +++ b/ccm-cms/src/main/java/org/librecms/pages/models/BreadcrumbData.java @@ -28,6 +28,8 @@ public class BreadcrumbData { private String path; + private String link; + public String getTitle() { return title; } @@ -44,4 +46,12 @@ public class BreadcrumbData { this.path = path; } + public String getLink() { + return link; + } + + public void setLink(final String link) { + this.link = link; + } + } diff --git a/ccm-cms/src/main/java/org/librecms/pages/models/CategoryModel.java b/ccm-cms/src/main/java/org/librecms/pages/models/CategoryModel.java index 38b42b948..f4a194e89 100644 --- a/ccm-cms/src/main/java/org/librecms/pages/models/CategoryModel.java +++ b/ccm-cms/src/main/java/org/librecms/pages/models/CategoryModel.java @@ -24,7 +24,6 @@ import org.libreccm.categorization.Domain; import org.libreccm.categorization.DomainRepository; import org.libreccm.l10n.GlobalizationHelper; import org.librecms.contentsection.ContentItemVersion; -import org.librecms.pages.PagesService; import java.io.Serializable; import java.util.Collections; diff --git a/ccm-cms/src/main/java/org/librecms/pages/models/ContentItemModel.java b/ccm-cms/src/main/java/org/librecms/pages/models/ContentItemModel.java index f28ccf617..dd7597e09 100644 --- a/ccm-cms/src/main/java/org/librecms/pages/models/ContentItemModel.java +++ b/ccm-cms/src/main/java/org/librecms/pages/models/ContentItemModel.java @@ -170,6 +170,17 @@ public class ContentItemModel { return contentItem.isPresent(); } +// /** +// * A convient getter for checking if a content item is available from a +// * template. +// * +// * @return {@code true} if an item is available, {@code false} if not. +// */ +// @Transactional(Transactional.TxType.REQUIRED) +// public boolean getItemAvailable() { +// init(); +// return contentItem.isPresent(); +// } /** * Gets the {@code objectId)} (see {@link CcmObject#objectId} of the current * item. @@ -422,6 +433,11 @@ public class ContentItemModel { */ @Transactional(Transactional.TxType.REQUIRED) private Optional retrieveContentItem() { + if (categoryModel.getCategory() == null) { + // For none-category pages, for example login + return Optional.empty(); + } + final Optional item; if (itemName == null || "index".equals(itemName)) { item = pagesService.findIndexItem( 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 84f8bb9c4..a391f8e78 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 @@ -186,30 +186,41 @@ public class ItemListModel { public List getItems( final String listName ) { - final List items + // If no category is available, for example in the login application + if (categoryModel.getCategory() == null) { + return Collections.emptyList(); + } + + final Class limitToType = buildLimitToType( + getLimitToTypeSetting(listName)); + final Category currentCategory = categoryRepository + .findById(categoryModel.getCategory().getCategoryId()) + .orElseThrow( + () -> new RuntimeException( + String.format( + "Category with ID %d was set as current " + + "category, but no category with " + + "that ID was found in the database.", + categoryModel.getCategory().getCategoryId() + ) + ) + ); + final List categories = collectCategories(currentCategory); + final List listOrder = getListOrderSetting(listName); + final int pageSize = getPageSizeSetting(listName); + final int offset = getOffset(listName, getPageSizeSetting(listName)); + + final List items = Collections.unmodifiableList( - buildList( - buildLimitToType(getLimitToTypeSetting(listName)), - collectCategories( - categoryRepository - .findById(categoryModel.getCategory().getCategoryId()) - .orElseThrow( - () -> new RuntimeException( - String.format( - "Category with ID %d was set as current " - + "category, but no category with " - + "that ID was found in the database.", - categoryModel.getCategory().getCategoryId() - ) - ) - ) - ), - getListOrderSetting(listName), - getPageSizeSetting(listName), - getOffset(listName, getPageSizeSetting(listName)) - ) - ); - + buildList( + limitToType, + categories, + listOrder, + pageSize, + offset + ) + ); + return items; } @@ -241,7 +252,7 @@ public class ItemListModel { criteriaBuilder.equal( from.get("version"), ContentItemVersion.LIVE ), - buildPermissionsCheck( + buildPermissionsCheck( criteriaBuilder, from, permissionsJoin ) ) diff --git a/ccm-cms/src/main/java/org/librecms/pages/models/PagePropertiesModel.java b/ccm-cms/src/main/java/org/librecms/pages/models/PagePropertiesModel.java index c23aeca67..d1f091a73 100644 --- a/ccm-cms/src/main/java/org/librecms/pages/models/PagePropertiesModel.java +++ b/ccm-cms/src/main/java/org/librecms/pages/models/PagePropertiesModel.java @@ -21,6 +21,7 @@ package org.librecms.pages.models; import java.util.Collections; import java.util.HashMap; import java.util.Map; +import java.util.Optional; import javax.enterprise.context.RequestScoped; import javax.inject.Named; @@ -36,7 +37,10 @@ public class PagePropertiesModel { private Map properties; public Map getProperties() { - return Collections.unmodifiableMap(properties); + return Optional + .ofNullable(properties) + .map(Collections::unmodifiableMap) + .orElse(Collections.emptyMap()); } public void setProperties(final Map properties) { diff --git a/ccm-cms/src/main/java/org/librecms/pages/models/PageUrlModel.java b/ccm-cms/src/main/java/org/librecms/pages/models/PageUrlModel.java index 732aa0da0..76206f710 100644 --- a/ccm-cms/src/main/java/org/librecms/pages/models/PageUrlModel.java +++ b/ccm-cms/src/main/java/org/librecms/pages/models/PageUrlModel.java @@ -251,6 +251,7 @@ public class PageUrlModel { final BreadcrumbData breadcrumb = new BreadcrumbData(); breadcrumb.setPath(selected.get().getCategoryPath()); breadcrumb.setTitle(selected.get().getTitle()); + breadcrumb.setLink(selected.get().getCategoryLink()); buildBreadcrumbs(selected.get(), breadcrumbs); }