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 extends ContentItem> 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 extends ContentItem> value;
-
- public CreateDocumentOfTypeLiteral(
- final Class extends ContentItem> value
- ) {
- this.value = value;
- }
-
- @Override
- public Class extends ContentItem> 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 extends MvcDocumentCreateStep>> createStepClass
+ = authoringKit.createStep();
+
+// final Instance> instance = createSteps
+// .select(new CreateDocumentOfTypeLiteral(documentClass));
+ final Instance extends MvcDocumentCreateStep>> 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">
-