From 379251371dfd60b1addf09617a9ddf3435cbf610 Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Tue, 19 Jan 2021 21:38:13 +0100 Subject: [PATCH] First part of FolderBrowser for MVC based UI Former-commit-id: b2842d1c4ecdf66314c0ae56ba96d21a3de1d0a3 --- .../src/main/java/org/librecms/ui/CmsUi.java | 1 + .../librecms/ui/ContentSectionController.java | 106 ++++++++++++++++++ .../org/librecms/ui/ContentSectionModel.java | 35 ++++++ .../ui/ContentSectionsController.java | 2 - .../org/librecms/ui/FolderBrowserModel.java | 31 +++++ .../ui/content-section/contentsection.xhtml | 57 ++++++++++ .../ui/content-section/folderbrowser.xhtml | 26 +++++ .../content-sections/content-sections.xhtml | 1 - .../librecms/ui/content-sections/list.xhtml | 2 +- .../org/librecms/CmsAdminMessages.properties | 2 + .../librecms/CmsAdminMessages_de.properties | 2 + 11 files changed, 261 insertions(+), 4 deletions(-) create mode 100644 ccm-cms/src/main/java/org/librecms/ui/ContentSectionController.java create mode 100644 ccm-cms/src/main/java/org/librecms/ui/ContentSectionModel.java create mode 100644 ccm-cms/src/main/java/org/librecms/ui/FolderBrowserModel.java create mode 100644 ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/content-section/contentsection.xhtml create mode 100644 ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/content-section/folderbrowser.xhtml diff --git a/ccm-cms/src/main/java/org/librecms/ui/CmsUi.java b/ccm-cms/src/main/java/org/librecms/ui/CmsUi.java index 9d696fd3f..1d2d58937 100644 --- a/ccm-cms/src/main/java/org/librecms/ui/CmsUi.java +++ b/ccm-cms/src/main/java/org/librecms/ui/CmsUi.java @@ -26,6 +26,7 @@ public class CmsUi extends Application { classes.add(IsAuthenticatedFilter.class); classes.add(ContentSectionsController.class); + classes.add(ContentSectionController.class); return classes; } diff --git a/ccm-cms/src/main/java/org/librecms/ui/ContentSectionController.java b/ccm-cms/src/main/java/org/librecms/ui/ContentSectionController.java new file mode 100644 index 000000000..1f1ad7b33 --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/ui/ContentSectionController.java @@ -0,0 +1,106 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.librecms.ui; + +import org.libreccm.api.Identifier; +import org.libreccm.api.IdentifierParser; +import org.libreccm.security.AuthorizationRequired; +import org.librecms.contentsection.ContentSection; +import org.librecms.contentsection.ContentSectionRepository; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; +import javax.mvc.Controller; +import javax.mvc.Models; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.WebApplicationException; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@Controller +@Path("/{sectionIdentifier}") +public class ContentSectionController { + + @Inject + private CmsAdminMessages cmsAdminMessages; + + @Inject + private ContentSectionModel contentSectionModel; + + @Inject + private FolderBrowserModel folderBrowserModel; + + @Inject + private Models models; + + @Inject + private ContentSectionRepository sectionRepo; + + @Inject + private IdentifierParser identifierParser; + + @GET + @Path("/folderbrowser") + @AuthorizationRequired + public String listItems( + @PathParam("sectionIdentifier") final String sectionIdentifier + ) { + final Identifier identifier = identifierParser.parseIdentifier( + sectionIdentifier + ); + final ContentSection section; + switch (identifier.getType()) { + case ID: + section = sectionRepo + .findById(Long.parseLong(identifier.getIdentifier())) + .orElseThrow( + () -> new WebApplicationException( + String.format( + "No ContentSection with ID %s found.", + identifier.getIdentifier() + ) + ) + ); + break; + case UUID: + section = sectionRepo + .findByUuid(identifier.getIdentifier()) + .orElseThrow( + () -> new WebApplicationException( + String.format( + "No ContentSection with UUID %s found.", + identifier.getIdentifier() + ) + ) + ); + break; + default: + section = sectionRepo + .findByLabel(identifier.getIdentifier()) + .orElseThrow( + () -> new WebApplicationException( + String.format( + "No ContentSection named %s found.", + identifier.getIdentifier() + ) + ) + ); + break; + } + + contentSectionModel.setSection(section); + folderBrowserModel.setSection(section); + + return "org/librecms/ui/content-section/folderbrowser.xhtml"; + + } + +} diff --git a/ccm-cms/src/main/java/org/librecms/ui/ContentSectionModel.java b/ccm-cms/src/main/java/org/librecms/ui/ContentSectionModel.java new file mode 100644 index 000000000..3f32477ae --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/ui/ContentSectionModel.java @@ -0,0 +1,35 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.librecms.ui; + +import org.librecms.contentsection.ContentSection; + +import java.util.Objects; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Named; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@Named("ContentSectionModel") +public class ContentSectionModel { + + private ContentSection section; + + protected void setSection(final ContentSection section) { + this.section = Objects.requireNonNull( + section, "Parameter section can't be null" + ); + } + + public String getSectionName() { + return section.getLabel(); + } + +} diff --git a/ccm-cms/src/main/java/org/librecms/ui/ContentSectionsController.java b/ccm-cms/src/main/java/org/librecms/ui/ContentSectionsController.java index 12ff93d52..c7d0154a2 100644 --- a/ccm-cms/src/main/java/org/librecms/ui/ContentSectionsController.java +++ b/ccm-cms/src/main/java/org/librecms/ui/ContentSectionsController.java @@ -11,7 +11,6 @@ import org.libreccm.core.CoreConstants; import org.libreccm.security.AuthorizationRequired; import org.libreccm.security.PermissionChecker; import org.libreccm.security.RequiresPrivilege; -import org.libreccm.security.Shiro; import org.librecms.contentsection.ContentSection; import org.librecms.contentsection.ContentSectionManager; import org.librecms.contentsection.ContentSectionRepository; @@ -24,7 +23,6 @@ import java.util.Objects; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.mvc.Controller; -import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.transaction.Transactional; import javax.ws.rs.FormParam; diff --git a/ccm-cms/src/main/java/org/librecms/ui/FolderBrowserModel.java b/ccm-cms/src/main/java/org/librecms/ui/FolderBrowserModel.java new file mode 100644 index 000000000..1a30f6a83 --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/ui/FolderBrowserModel.java @@ -0,0 +1,31 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.librecms.ui; + +import org.librecms.contentsection.ContentSection; + +import java.util.Objects; + +import javax.enterprise.context.RequestScoped; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +public class FolderBrowserModel { + + private ContentSection section; + + protected void setSection(final ContentSection section) { + this.section = Objects.requireNonNull( + section, "Parameter section can't be null" + ); + } + + + +} diff --git a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/content-section/contentsection.xhtml b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/content-section/contentsection.xhtml new file mode 100644 index 000000000..7dcf337be --- /dev/null +++ b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/content-section/contentsection.xhtml @@ -0,0 +1,57 @@ + + + + Content Section #{ContentSectionModel.sectionName} #{title} - LibreCMS + + + +
+ + +
+
+ +
+ + + diff --git a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/content-section/folderbrowser.xhtml b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/content-section/folderbrowser.xhtml new file mode 100644 index 000000000..4174c1a30 --- /dev/null +++ b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/content-section/folderbrowser.xhtml @@ -0,0 +1,26 @@ +]> + + + + + + + + + + +
+

#{CmsAdminMessages.getMessage("folderbrowser.heading", [ContentSectionModel.sectionName])}

+ +

placeholder

+
+
+ +
+ diff --git a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/content-sections/content-sections.xhtml b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/content-sections/content-sections.xhtml index 7a8026c34..114e7929f 100644 --- a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/content-sections/content-sections.xhtml +++ b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/content-sections/content-sections.xhtml @@ -2,7 +2,6 @@ diff --git a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/content-sections/list.xhtml b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/content-sections/list.xhtml index 259df38dd..95937bf1a 100644 --- a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/content-sections/list.xhtml +++ b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/content-sections/list.xhtml @@ -96,7 +96,7 @@ var="section"> - + #{section.label} diff --git a/ccm-cms/src/main/resources/org/librecms/CmsAdminMessages.properties b/ccm-cms/src/main/resources/org/librecms/CmsAdminMessages.properties index c4b996a89..1d04a6d38 100644 --- a/ccm-cms/src/main/resources/org/librecms/CmsAdminMessages.properties +++ b/ccm-cms/src/main/resources/org/librecms/CmsAdminMessages.properties @@ -24,3 +24,5 @@ contentsections.edit_dialog.close=Cancel contentsections.edit_dialog.name.label=Name contentsections.edit_dialog.save=Rename content section contentsections.edit_dialog.name.help=The name of the content section. Can only contain the letters a to z, the numbers 0-9, the hyphen and the underscore. +folderbrowser.title=Folder Browser +folderbrowser.heading=Content Section {0} Folderbrowser diff --git a/ccm-cms/src/main/resources/org/librecms/CmsAdminMessages_de.properties b/ccm-cms/src/main/resources/org/librecms/CmsAdminMessages_de.properties index fc0578195..8420ef98e 100644 --- a/ccm-cms/src/main/resources/org/librecms/CmsAdminMessages_de.properties +++ b/ccm-cms/src/main/resources/org/librecms/CmsAdminMessages_de.properties @@ -24,3 +24,5 @@ contentsections.edit_dialog.close=Abbrechen contentsections.edit_dialog.name.label=Name contentsections.edit_dialog.save=Content Section umbenennen contentsections.edit_dialog.name.help=Der Name der Content Section. Darf nur die Zeichen a bis z, 0-9, the Bindestrich und den Unterstrich enthalten. +folderbrowser.title=Ordner +folderbrowser.heading=Content Section {0} Ordner