diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/CategorizedItemComponentRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/CategorizedItemComponentRenderer.java
index 70ab5f2a6..9dfe632a3 100644
--- a/ccm-cms/src/main/java/org/librecms/pagemodel/CategorizedItemComponentRenderer.java
+++ b/ccm-cms/src/main/java/org/librecms/pagemodel/CategorizedItemComponentRenderer.java
@@ -22,7 +22,6 @@ import org.libreccm.categorization.Categorization;
import org.libreccm.categorization.Category;
import org.libreccm.categorization.CategoryRepository;
import org.libreccm.core.CcmObject;
-import org.libreccm.pagemodel.ComponentModelType;
import org.librecms.contentsection.ContentItem;
import org.librecms.contentsection.ContentItemVersion;
@@ -42,13 +41,15 @@ import javax.ws.rs.NotFoundException;
import static org.librecms.pages.PagesConstants.*;
+import org.libreccm.pagemodel.RendersComponentModel;
+
/**
* Renderer for the {@link CategorizedItemComponent}.
*
* @author Jens Pelzetter
*/
@RequestScoped
-@ComponentModelType(componentModel = CategorizedItemComponent.class)
+@RendersComponentModel(componentModel = CategorizedItemComponent.class)
public class CategorizedItemComponentRenderer
extends AbstractContentItemComponentRenderer {
diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/CategoryTreeComponentRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/CategoryTreeComponentRenderer.java
index d1993531d..29ea4971c 100644
--- a/ccm-cms/src/main/java/org/librecms/pagemodel/CategoryTreeComponentRenderer.java
+++ b/ccm-cms/src/main/java/org/librecms/pagemodel/CategoryTreeComponentRenderer.java
@@ -25,7 +25,6 @@ import org.libreccm.categorization.CategoryManager;
import org.libreccm.categorization.CategoryRepository;
import org.libreccm.configuration.ConfigurationManager;
import org.libreccm.core.CcmObject;
-import org.libreccm.pagemodel.ComponentModelType;
import java.util.HashMap;
import java.util.List;
@@ -41,6 +40,7 @@ import javax.transaction.Transactional;
import static org.librecms.pages.PagesConstants.*;
import org.libreccm.pagemodel.ComponentRenderer;
+import org.libreccm.pagemodel.RendersComponentModel;
/**
* Renderer for the {@link CategoryTreeComponent}.
@@ -48,7 +48,7 @@ import org.libreccm.pagemodel.ComponentRenderer;
* @author Jens Pelzetter
*/
@RequestScoped
-@ComponentModelType(componentModel = CategoryTreeComponent.class)
+@RendersComponentModel(componentModel = CategoryTreeComponent.class)
public class CategoryTreeComponentRenderer
implements ComponentRenderer {
diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/FixedContentItemComponentRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/FixedContentItemComponentRenderer.java
index 307eb0dba..ad0839d93 100644
--- a/ccm-cms/src/main/java/org/librecms/pagemodel/FixedContentItemComponentRenderer.java
+++ b/ccm-cms/src/main/java/org/librecms/pagemodel/FixedContentItemComponentRenderer.java
@@ -18,7 +18,6 @@
*/
package org.librecms.pagemodel;
-import org.libreccm.pagemodel.ComponentModelType;
import org.librecms.contentsection.ContentItem;
import org.librecms.contentsection.ContentItemRepository;
@@ -29,13 +28,15 @@ import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.ws.rs.NotFoundException;
+import org.libreccm.pagemodel.RendersComponentModel;
+
/**
* Renderer for the {@link FixedContentItemComponent}.
*
* @author Jens Pelzetter
*/
@RequestScoped
-@ComponentModelType(componentModel = FixedContentItemComponent.class)
+@RendersComponentModel(componentModel = FixedContentItemComponent.class)
public class FixedContentItemComponentRenderer
extends AbstractContentItemComponentRenderer {
diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/GreetingItemComponentRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/GreetingItemComponentRenderer.java
index 5755ee831..fd1b32259 100644
--- a/ccm-cms/src/main/java/org/librecms/pagemodel/GreetingItemComponentRenderer.java
+++ b/ccm-cms/src/main/java/org/librecms/pagemodel/GreetingItemComponentRenderer.java
@@ -22,7 +22,6 @@ import org.libreccm.categorization.Category;
import org.libreccm.categorization.CategoryManager;
import org.libreccm.categorization.CategoryRepository;
import org.libreccm.core.CcmObject;
-import org.libreccm.pagemodel.ComponentModelType;
import org.librecms.contentsection.ContentItem;
import java.util.Map;
@@ -35,13 +34,15 @@ import javax.ws.rs.NotFoundException;
import static org.librecms.pages.PagesConstants.*;
+import org.libreccm.pagemodel.RendersComponentModel;
+
/**
* Renderer for the {@link GreetingItemComponent}.
*
* @author Jens Pelzetter
*/
@RequestScoped
-@ComponentModelType(componentModel = GreetingItemComponent.class)
+@RendersComponentModel(componentModel = GreetingItemComponent.class)
public class GreetingItemComponentRenderer
extends AbstractContentItemComponentRenderer {
diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/ItemListComponentRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/ItemListComponentRenderer.java
index da7cb4844..29e029180 100644
--- a/ccm-cms/src/main/java/org/librecms/pagemodel/ItemListComponentRenderer.java
+++ b/ccm-cms/src/main/java/org/librecms/pagemodel/ItemListComponentRenderer.java
@@ -24,7 +24,6 @@ import org.libreccm.categorization.Categorization;
import org.libreccm.categorization.Category;
import org.libreccm.configuration.ConfigurationManager;
import org.libreccm.core.UnexpectedErrorException;
-import org.libreccm.pagemodel.ComponentModelType;
import java.util.Map;
@@ -54,13 +53,15 @@ import javax.servlet.http.HttpServletRequest;
import static org.librecms.pages.PagesConstants.*;
+import org.libreccm.pagemodel.RendersComponentModel;
+
/**
* Renderer for the {@link ItemListComponent}.
*
* @author Jens Pelzetter
*/
@RequestScoped
-@ComponentModelType(componentModel = ItemListComponent.class)
+@RendersComponentModel(componentModel = ItemListComponent.class)
public class ItemListComponentRenderer
implements ComponentRenderer {
diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModelRepository.java b/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModelRepository.java
index ba3a8adca..5cec334b3 100644
--- a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModelRepository.java
+++ b/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModelRepository.java
@@ -35,6 +35,8 @@ import java.util.UUID;
@RequestScoped
public class ComponentModelRepository extends AbstractEntityRepository {
+ private static final long serialVersionUID = -6358512316472857971L;
+
@Override
public Class getEntityClass() {
return ComponentModel.class;
diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModels.java b/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModels.java
index fc01545b5..ec7761340 100644
--- a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModels.java
+++ b/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModels.java
@@ -33,6 +33,14 @@ import javax.annotation.PostConstruct;
import javax.enterprise.context.ApplicationScoped;
/**
+ * An Utility class which provides access to all component models available.
+ *
+ * This class is an {@link ApplicationScoped} CDI bean. The {@link #init} method
+ * is called by the CDI container after creating an instance of this class. The
+ * {@link #init} method retrieves the informations about the available
+ * {@link ComponentModel}s from the module classes. For exactly from the
+ * {@link Module#pageModelComponentModels()} property of the {@link Module}
+ * annotation of the module class.
*
* @author Jens Pelzetter
*/
@@ -40,11 +48,15 @@ import javax.enterprise.context.ApplicationScoped;
public class ComponentModels {
private final List availableComponentModels
- = new ArrayList<>();
+ = new ArrayList<>();
private final Map componentInfos
- = new HashMap<>();
+ = new HashMap<>();
+ /**
+ * Creates the list of available {@link ComponentModels}. Called by the CDI
+ * container.
+ */
@PostConstruct
private void init() {
@@ -68,19 +80,47 @@ public class ComponentModels {
}
}
+ /**
+ * Get a list of the available {@link ComponentModel}s.
+ *
+ * @return A (unmodifiable) list of all available {@link ComponentModel}s.
+ */
public List findAvailableComponentModels() {
return Collections.unmodifiableList(availableComponentModels);
}
+ /**
+ * Get the informations about a specific {@link ComponentModel}
+ * implementation.
+ *
+ * @param clazz The class of the {@link ComponentModel} implementation.
+ *
+ * @return An {@link Optional} containing the informations about the
+ * {@link ComponentModel} implementation. If the class is not a
+ * {@link ComponentModel} implementation or is an unknown
+ * implementation an empty {@link Optional} is returned.
+ */
public Optional getComponentModelInfo(
final Class extends ComponentModel> clazz) {
return getComponentModelInfo(clazz.getName());
}
-
+
+ /**
+ * Get the informations about a specific {@link ComponentModel}
+ * implementation.
+ *
+ * @param className The name of the class of the {@link ComponentModel}
+ * implementation.
+ *
+ * @return An {@link Optional} containing the informations about the
+ * {@link ComponentModel} implementation. If the class is not a
+ * {@link ComponentModel} implementation or is an unknown
+ * implementation an empty {@link Optional} is returned.
+ */
public Optional getComponentModelInfo(
- final String className) {
-
+ final String className) {
+
if (componentInfos.containsKey(className)) {
return Optional.of(componentInfos.get(className));
} else {
diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentRenderer.java b/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentRenderer.java
index 4b823c286..377f6e7de 100644
--- a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentRenderer.java
+++ b/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentRenderer.java
@@ -25,6 +25,8 @@ import java.util.Map;
* A {@code ComponentRenderer} transforms a {@link ComponentModel} into a
* component.
*
+ * An implementation must be annotation with the {@link ComponentModelType}
+ * qualifier annotation.
*
* @author Jens Pelzetter
* @param Type of the model the component renderer processes.
@@ -34,9 +36,9 @@ public interface ComponentRenderer {
/**
* Renders a {@link ComponentModel}.
*
- * The result of the rendering process is a map which uses strings as key.
- * The values are either Java primitive types or Collections. More exactly
- * the values are objects of one the following types:
+ * The result of the rendering process is a {@link Map} which uses strings
+ * as key. The values are either Java primitive types or Collections. More
+ * exactly the values are objects of one the following types:
*
*
* - {@link Double}
@@ -50,8 +52,8 @@ public interface ComponentRenderer {
*
*
* Other subtypes {@link Collection} are might be supported but there is no
- * grantee for that. The values in a collection must be one of the types in
- * the list above. Collections might contain multiple types from the list
+ * guarantee for that. The values in a collection must be one of the types
+ * in the list above. Collections might contain multiple types from the list
* above. The keys for a map should always be strings.
*
* @param componentModel The component model to render.
diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentRendererManager.java b/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentRendererManager.java
index 455c9477f..688a3fb9a 100644
--- a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentRendererManager.java
+++ b/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentRendererManager.java
@@ -92,11 +92,11 @@ public class ComponentRendererManager {
}
/**
- * Annotation literal for the {@link ComponentModelType} annotation.
+ * Annotation literal for the {@link RendersComponentModel} annotation.
*/
private static class ComponentModelTypeLiteral
- extends AnnotationLiteral
- implements ComponentModelType {
+ extends AnnotationLiteral
+ implements RendersComponentModel {
private static final long serialVersionUID = -2601632434295178600L;
diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/PageRenderer.java b/ccm-core/src/main/java/org/libreccm/pagemodel/PageRenderer.java
index 5773513c4..ef3c4a824 100644
--- a/ccm-core/src/main/java/org/libreccm/pagemodel/PageRenderer.java
+++ b/ccm-core/src/main/java/org/libreccm/pagemodel/PageRenderer.java
@@ -23,7 +23,7 @@ import java.util.Map;
/**
* Interface for page renderers. A page renderer is invoked to render a page of
* specific type. An implementation should be a CDI bean which is annotated with
- * the qualifier {@link PageModelType}.
+ * the qualifier {@link RendersPageModelType}.
*
* An implementation should add all default components which have to be present
* in page. The {@link PageModel} should only specify
diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModelType.java b/ccm-core/src/main/java/org/libreccm/pagemodel/RendersComponentModel.java
similarity index 96%
rename from ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModelType.java
rename to ccm-core/src/main/java/org/libreccm/pagemodel/RendersComponentModel.java
index 0b6ef2983..ab6590538 100644
--- a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModelType.java
+++ b/ccm-core/src/main/java/org/libreccm/pagemodel/RendersComponentModel.java
@@ -33,7 +33,7 @@ import java.lang.annotation.Target;
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
-public @interface ComponentModelType {
+public @interface RendersComponentModel {
Class extends ComponentModel> componentModel();
diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/RendersPageModelType.java b/ccm-core/src/main/java/org/libreccm/pagemodel/RendersPageModelType.java
new file mode 100644
index 000000000..fb7ad3c76
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/pagemodel/RendersPageModelType.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2017 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.libreccm.pagemodel;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+/**
+ * Specifies which type of {@link PageModel} an implementation of
+ * {@link PageRenderer} can render.
+ *
+ * @author Jens Pelzetter
+ */
+@Qualifier
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface RendersPageModelType {
+
+ String value();
+
+}