diff --git a/ccm-cms/src/main/java/org/librecms/ui/PageDetailsModel.java b/ccm-cms/src/main/java/org/librecms/ui/PageDetailsModel.java index 8c27a312a..a5cfe66ae 100644 --- a/ccm-cms/src/main/java/org/librecms/ui/PageDetailsModel.java +++ b/ccm-cms/src/main/java/org/librecms/ui/PageDetailsModel.java @@ -18,9 +18,9 @@ */ package org.librecms.ui; +import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; -import java.util.Map; +import java.util.List; import javax.enterprise.context.RequestScoped; import javax.inject.Named; @@ -39,7 +39,7 @@ public class PageDetailsModel { private String category; - private Map pageProperties; + private List pageProperties; public String getSite() { return site; @@ -65,12 +65,12 @@ public class PageDetailsModel { this.category = category; } - public Map getPageProperties() { - return Collections.unmodifiableMap(pageProperties); + public List getPageProperties() { + return Collections.unmodifiableList(pageProperties); } - protected void setPageProperties(final Map pageProperties) { - this.pageProperties = new HashMap<>(pageProperties); + protected void setPageProperties(final List pageProperties) { + this.pageProperties = new ArrayList<>(pageProperties); } } diff --git a/ccm-cms/src/main/java/org/librecms/ui/PagePropertyModel.java b/ccm-cms/src/main/java/org/librecms/ui/PagePropertyModel.java new file mode 100644 index 000000000..fa1a56585 --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/ui/PagePropertyModel.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2021 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package org.librecms.ui; + +import java.util.Comparator; + +/** + * + * @author Jens Pelzetter + */ +public class PagePropertyModel implements Comparable { + + private String name; + + private String value; + + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } + + public String getValue() { + return value; + } + + public void setValue(final String value) { + this.value = value; + } + + @Override + public int compareTo(final PagePropertyModel other) { + return Comparator + .comparing(PagePropertyModel::getName, String::compareTo) + .thenComparing(PagePropertyModel::getValue, String::compareTo) + .compare(this, other); + } + +} diff --git a/ccm-cms/src/main/java/org/librecms/ui/PagesController.java b/ccm-cms/src/main/java/org/librecms/ui/PagesController.java index d51c9552a..a7e1bc209 100644 --- a/ccm-cms/src/main/java/org/librecms/ui/PagesController.java +++ b/ccm-cms/src/main/java/org/librecms/ui/PagesController.java @@ -37,6 +37,7 @@ import org.librecms.pages.PagesManager; import org.librecms.pages.PagesRepository; import java.util.HashMap; +import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; @@ -273,7 +274,7 @@ public class PagesController { pageManager.createPageForCategory(category); return String.format( - "redirect:/pages/%s/%s", + "redirect:/pages/%s/%s/@details", pagesInstance, categoryParam ); @@ -315,10 +316,18 @@ public class PagesController { pageDetailsModel.setCategoryDomain( pages.getCategoryDomain().getDomainKey() ); - pageDetailsModel.setPageProperties(page.getProperties()); + pageDetailsModel.setPageProperties( + page + .getProperties() + .entrySet() + .stream() + .map(this::buildPagePropertyModel) + .sorted() + .collect(Collectors.toList()) + ); pageDetailsModel.setSite(pages.getSite().getDomainOfSite()); - return "org/librecms/ui/cms/pages-detail.xhtml"; + return "org/librecms/ui/cms/page-details.xhtml"; } @POST @@ -406,7 +415,7 @@ public class PagesController { pageRepo.save(page); return String.format( - "redirect:/pages/%s/%s", + "redirect:/pages/%s/%s/@details", pagesInstance, categoryParam ); @@ -473,13 +482,12 @@ public class PagesController { pageRepo.save(page); return String.format( - "redirect:/pages/%s/%s", + "redirect:/pages/%s/%s/@details", pagesInstance, categoryParam ); } - //ToDo: Remove page property private Optional findPages(final String identifierParam) { final Identifier identifier = identifierParser.parseIdentifier( identifierParam @@ -533,4 +541,14 @@ public class PagesController { return node; } + private PagePropertyModel buildPagePropertyModel( + Map.Entry property + ) { + final PagePropertyModel model = new PagePropertyModel(); + model.setName(property.getKey()); + model.setValue(property.getValue()); + + return model; + } + } diff --git a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/cms/page-details.xhtml b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/cms/page-details.xhtml new file mode 100644 index 000000000..24257167c --- /dev/null +++ b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/cms/page-details.xhtml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + +
+

#{CmsAdminMessages.getMessage('pages.page.details.heading', [CmsPageDetailsModel.category, CmsPagesDetailsModel.site])}

+ +

#{CmsAdminMessages['pages.page.details.properties.heading']}

+ + + + + + + + + + + + + + + + +
#{CmsAdminMessages['pages.page.details.properties.name.header']}#{CmsAdminMessages['pages.page.details.properties.value.header']}#{CmsAdminMessages['pages.page.details.properties.actions.header']}
#{property.name}#{property.value} + + +
+
+
+
+ diff --git a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/cms/pages-details.xhtml b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/cms/pages-details.xhtml index e74ddeea0..318df1f02 100644 --- a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/cms/pages-details.xhtml +++ b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/cms/pages-details.xhtml @@ -9,7 +9,9 @@