From 49c14677778325cd948d62e28949258531601e96 Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Mon, 19 Apr 2021 19:53:28 +0200 Subject: [PATCH] Get createstep from MvcAuthoringKit annotation --- .../org/librecms/contenttypes/Article.java | 14 +-- .../contentsections/DocumentFolderModel.java | 8 ++ .../documents/CreatesDocumentOfType.java | 51 ----------- .../documents/DocumentController.java | 91 ++++++++++++------- .../ui/contenttypes/MvcArticleCreateStep.java | 3 - .../documentfolder/documentfolder.xhtml | 2 +- 6 files changed, 74 insertions(+), 95 deletions(-) delete mode 100644 ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/CreatesDocumentOfType.java diff --git a/ccm-cms/src/main/java/org/librecms/contenttypes/Article.java b/ccm-cms/src/main/java/org/librecms/contenttypes/Article.java index cb8145ee3..85c20347d 100644 --- a/ccm-cms/src/main/java/org/librecms/contenttypes/Article.java +++ b/ccm-cms/src/main/java/org/librecms/contenttypes/Article.java @@ -75,13 +75,13 @@ import javax.xml.bind.annotation.XmlRootElement; order = 2 ) }) -//@MvcAuthoringKit( -// createStep = MvcArticleCreateStep.class, -// authoringSteps = { -// MvcArticlePropertiesStep.class, -// MvcArticleTextBodyStep.class -// } -//) +@MvcAuthoringKit( + createStep = MvcArticleCreateStep.class, + authoringSteps = { + MvcArticlePropertiesStep.class, + MvcArticleTextBodyStep.class + } +) @XmlRootElement(name = "article", namespace = CMS_XML_NS) public class Article extends ContentItem implements Serializable { diff --git a/ccm-cms/src/main/java/org/librecms/ui/contentsections/DocumentFolderModel.java b/ccm-cms/src/main/java/org/librecms/ui/contentsections/DocumentFolderModel.java index 26c209917..7643c7646 100644 --- a/ccm-cms/src/main/java/org/librecms/ui/contentsections/DocumentFolderModel.java +++ b/ccm-cms/src/main/java/org/librecms/ui/contentsections/DocumentFolderModel.java @@ -149,6 +149,14 @@ public class DocumentFolderModel { return path; } + public String getPathWithTrailingSlash() { + if (path.isEmpty()) { + return ""; + } else { + return String.format("%s/", path); + } + } + protected void setPath(final String path) { this.path = path; } diff --git a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/CreatesDocumentOfType.java b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/CreatesDocumentOfType.java deleted file mode 100644 index c0f99e8b1..000000000 --- a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/CreatesDocumentOfType.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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.contentsections.documents; - -import org.librecms.contentsection.ContentItem; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -import javax.inject.Qualifier; - -/** - * Qualifier annotation for implementation of {@link MvcDocumentCreateStep} - * defining the type of the created document/content item. Used to select - * the requested create step from all available implementations. - * - * @author Jens Pelzetter - */ -@Qualifier -@Retention(RetentionPolicy.RUNTIME) -@Target( - { - ElementType.METHOD, - ElementType.FIELD, - ElementType.PARAMETER, - ElementType.TYPE - } -) -public @interface CreatesDocumentOfType { - - Class value(); - -} diff --git a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/DocumentController.java b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/DocumentController.java index 8f253abab..90fbe34e9 100644 --- a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/DocumentController.java +++ b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/DocumentController.java @@ -108,11 +108,13 @@ public class DocumentController { @Inject private ContentItemRepository itemRepo; -// /** -// * All available {@link MvcAuthoringStep}s. -// */ -// @Inject -// private Instance authoringSteps; + /** + * All available {@link MvcAuthoringStep}s. + */ + @Inject + @Any + private Instance authoringSteps; + /** * All available {@link MvcDocumentCreateStep}s. */ @@ -225,6 +227,21 @@ public class DocumentController { return showCreateStep(sectionIdentifier, "", documentType); } + @POST + @Path("/@create") + @AuthorizationRequired + @Transactional(Transactional.TxType.REQUIRED) + public String showCreateStepPost( + @PathParam("sectionIdentifier") final String sectionIdentifier, + @FormParam("documentType") final String documentType + ) { + return String.format( + "redirect:/%s/documents/@create/%s", + sectionIdentifier, + documentType + ); + } + /** * Shows the create step of the document type. * @@ -257,6 +274,24 @@ public class DocumentController { } } + @POST + @Path("/{folderPath:(.+)?}/@create/{documentType}") + @AuthorizationRequired + @Transactional(Transactional.TxType.REQUIRED) + @SuppressWarnings("unchecked") + public String showCreateStepPost( + @PathParam("sectionIdentifier") final String sectionIdentifier, + @PathParam("folderPath") final String folderPath, + @FormParam("documentType") final String documentType + ) { + return String.format( + "redirect:/%s/documents/%s/@create/%s", + sectionIdentifier, + folderPath, + documentType + ); + } + @POST @Path("/@create/{documentType}") @AuthorizationRequired @@ -268,7 +303,7 @@ public class DocumentController { ) { return createDocument( sectionIdentifier, - "", + "", documentType, //formParameters request @@ -798,31 +833,6 @@ public class DocumentController { return entry; } - /** - * An annotation literal used to retrieve the create step for a specific - * content type. - */ - private static class CreateDocumentOfTypeLiteral - extends AnnotationLiteral - implements CreatesDocumentOfType { - - private static final long serialVersionUID = 1L; - - private final Class value; - - public CreateDocumentOfTypeLiteral( - final Class value - ) { - this.value = value; - } - - @Override - public Class value() { - return value; - } - - } - /** * An annotation literal for retrieving the authoring step with a specific * path fragment. @@ -958,8 +968,23 @@ public class DocumentController { ); } - final Instance> instance = createSteps - .select(new CreateDocumentOfTypeLiteral(documentClass)); + final Optional authoringKitResult = Optional + .ofNullable( + documentClass.getDeclaredAnnotation(MvcAuthoringKit.class) + ); + if (!authoringKitResult.isPresent()) { + return new CreateStepResult( + showCreateStepNotAvailable(section, folderPath, documentType) + ); + } + final MvcAuthoringKit authoringKit = authoringKitResult.get(); + final Class> createStepClass + = authoringKit.createStep(); + +// final Instance> instance = createSteps +// .select(new CreateDocumentOfTypeLiteral(documentClass)); + final Instance> instance + = createSteps.select(createStepClass); if (instance.isUnsatisfied() || instance.isAmbiguous()) { return new CreateStepResult( showCreateStepNotAvailable(section, folderPath, documentType) diff --git a/ccm-cms/src/main/java/org/librecms/ui/contenttypes/MvcArticleCreateStep.java b/ccm-cms/src/main/java/org/librecms/ui/contenttypes/MvcArticleCreateStep.java index c90979529..56ea35cba 100644 --- a/ccm-cms/src/main/java/org/librecms/ui/contenttypes/MvcArticleCreateStep.java +++ b/ccm-cms/src/main/java/org/librecms/ui/contenttypes/MvcArticleCreateStep.java @@ -26,9 +26,7 @@ import org.librecms.contentsection.ContentItemManager; import org.librecms.contentsection.ContentItemRepository; import org.librecms.contenttypes.Article; import org.librecms.ui.contentsections.documents.AbstractMvcDocumentCreateStep; -import org.librecms.ui.contentsections.documents.CreatesDocumentOfType; -import java.util.Arrays; import java.util.Locale; import java.util.Map; import java.util.Optional; @@ -47,7 +45,6 @@ import javax.transaction.Transactional; */ @RequestScoped @Named("CmsArticleCreateStep") -@CreatesDocumentOfType(Article.class) public class MvcArticleCreateStep extends AbstractMvcDocumentCreateStep
{ diff --git a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/documentfolder/documentfolder.xhtml b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/documentfolder/documentfolder.xhtml index d5fc5bdb3..2bd1d7495 100644 --- a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/documentfolder/documentfolder.xhtml +++ b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/documentfolder/documentfolder.xhtml @@ -201,7 +201,7 @@ id="new-document-dialog" tabindex="-1">