From 30d9dc0c15552f0f0b5c433f70b4b905733b38e3 Mon Sep 17 00:00:00 2001 From: jensp Date: Mon, 27 Nov 2017 10:25:37 +0000 Subject: [PATCH] CCM NG: Some JavaDoc git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5141 8810af33-2d31-482b-a856-94f89814c4df --- .../CategorizedItemComponentRenderer.java | 5 +- .../CategoryTreeComponentRenderer.java | 4 +- .../FixedContentItemComponentRenderer.java | 5 +- .../GreetingItemComponentRenderer.java | 5 +- .../pagemodel/ItemListComponentRenderer.java | 5 +- .../pagemodel/ComponentModelRepository.java | 2 + .../libreccm/pagemodel/ComponentModels.java | 50 +++++++++++++++++-- .../libreccm/pagemodel/ComponentRenderer.java | 12 +++-- .../pagemodel/ComponentRendererManager.java | 6 +-- .../org/libreccm/pagemodel/PageRenderer.java | 2 +- ...elType.java => RendersComponentModel.java} | 2 +- .../pagemodel/RendersPageModelType.java | 41 +++++++++++++++ 12 files changed, 114 insertions(+), 25 deletions(-) rename ccm-core/src/main/java/org/libreccm/pagemodel/{ComponentModelType.java => RendersComponentModel.java} (96%) create mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/RendersPageModelType.java 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 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 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(); + +}