From 15459112c7df86a93b87bbd08dc082fc6113ab88 Mon Sep 17 00:00:00 2001 From: jensp Date: Thu, 30 Nov 2017 17:54:08 +0000 Subject: [PATCH] CCM NG: Several bugfixes git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5151 8810af33-2d31-482b-a856-94f89814c4df --- .../contentsection/ContentItemRepository.java | 52 ++++++++++++++----- .../GreetingItemComponentRenderer.java | 1 - .../pagemodel/ItemListComponentRenderer.java | 10 +++- .../AbstractContentItemRenderer.java | 15 ++++-- .../contentitems/ArticleRenderer.java | 25 ++++++--- .../contentitems/ContentItemRenderers.java | 11 +++- .../pagemodel/contentitems/EventRenderer.java | 12 ++++- .../MultiPartArticleRenderer.java | 10 ++++ .../pagemodel/contentitems/NewsRenderer.java | 18 +++++-- .../categorization/Categorization.java | 35 ++++++++----- .../categorization/CategoryManager.java | 6 +-- .../portation/AbstractMarshaller.java | 2 +- .../org/libreccm/security/UserRepository.java | 2 + .../portation/CoreDataImportTest.java | 4 +- 14 files changed, 146 insertions(+), 57 deletions(-) diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/ContentItemRepository.java b/ccm-cms/src/main/java/org/librecms/contentsection/ContentItemRepository.java index 9f5a254fb..622b46280 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/ContentItemRepository.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/ContentItemRepository.java @@ -18,6 +18,8 @@ */ package org.librecms.contentsection; +import com.arsdigita.kernel.KernelConfig; + import org.apache.shiro.subject.Subject; import java.util.Date; @@ -27,6 +29,7 @@ import org.libreccm.categorization.Categorization; import org.libreccm.categorization.Category; import org.libreccm.categorization.CategoryManager; import org.libreccm.categorization.ObjectNotAssignedToCategoryException; +import org.libreccm.configuration.ConfigurationManager; import org.libreccm.core.CcmObject; import org.libreccm.core.CcmObjectRepository; import org.libreccm.core.UnexpectedErrorException; @@ -65,9 +68,17 @@ import javax.transaction.Transactional; public class ContentItemRepository extends AbstractAuditedEntityRepository { + private static final long serialVersionUID = -145167586339461600L; + + @Inject + private CategoryManager categoryManager; + @Inject private CcmObjectRepository ccmObjectRepo; + @Inject + private ConfigurationManager confManager; + @Inject private FolderRepository folderRepo; @@ -75,28 +86,25 @@ public class ContentItemRepository private ContentItemManager itemManager; @Inject - private CategoryManager categoryManager; - - @Inject - private Shiro shiro; - - @Inject - private UserRepository userRepository; + private PermissionChecker permissionChecker; @Inject private RoleManager roleManager; @Inject - private WorkflowRepository workflowRepo; - - @Inject - private TaskRepository taskRepo; + private Shiro shiro; @Inject private TaskManager taskManager; @Inject - private PermissionChecker permissionChecker; + private TaskRepository taskRepo; + + @Inject + private UserRepository userRepository; + + @Inject + private WorkflowRepository workflowRepo; @Override public Long getEntityId(final ContentItem item) { @@ -440,7 +448,6 @@ public class ContentItemRepository final Class type, final String name) { - final TypedQuery query = getEntityManager() .createNamedQuery("ContentItem.filterByFolderAndTypeAndName", ContentItem.class); @@ -637,7 +644,24 @@ public class ContentItemRepository roles = roleManager.findAllRolesForUser(theUser); } else { - roles = Collections.emptyList(); + final Optional publicUser; + + final KernelConfig kernelConfig = confManager + .findConfiguration(KernelConfig.class); + final String principal = (String) shiro + .getPublicUser() + .getPrincipal(); + if (kernelConfig.emailIsPrimaryIdentifier()) { + publicUser = userRepository.findByEmailAddress(principal); + } else { + publicUser = userRepository.findByName(principal); + } + + if (publicUser.isPresent()) { + roles = roleManager.findAllRolesForUser(publicUser.get()); + } else { + roles = Collections.emptyList(); + } } final boolean isSystemUser = shiro.isSystemUser(); 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 f1a8a1145..a19d9d2c0 100644 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/GreetingItemComponentRenderer.java +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/GreetingItemComponentRenderer.java @@ -32,7 +32,6 @@ import java.util.Optional; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; -import javax.ws.rs.NotFoundException; import static org.librecms.pages.PagesConstants.*; 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 a5b8e7495..da4b39528 100644 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/ItemListComponentRenderer.java +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/ItemListComponentRenderer.java @@ -54,10 +54,11 @@ import javax.servlet.http.HttpServletRequest; import static org.librecms.pages.PagesConstants.*; import org.libreccm.pagemodel.RendersComponent; +import org.librecms.contentsection.ContentItemVersion; /** * Renderer for the {@link ItemListComponent}. - * + * * @author Jens Pelzetter */ @RequestScoped @@ -166,7 +167,12 @@ public class ItemListComponentRenderer final Join catJoin = from .join("categories"); - criteriaQuery.where(catJoin.get("category").in(categories)); + criteriaQuery.where(criteriaBuilder + .and(catJoin.get("category").in(categories), + criteriaBuilder.equal(catJoin.get("indexObject"), false), + criteriaBuilder.equal(catJoin.get("type"), ""), + criteriaBuilder.equal(from.get("version"), + ContentItemVersion.LIVE))); // criteriaQuery // .where(criteriaBuilder // .and(catJoin.get("category").in(categories), diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/AbstractContentItemRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/AbstractContentItemRenderer.java index 8b60e34f7..264c9071e 100644 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/AbstractContentItemRenderer.java +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/AbstractContentItemRenderer.java @@ -28,22 +28,26 @@ import org.librecms.contentsection.ItemAttachment; import org.librecms.contentsection.rs.ContentItems; import org.librecms.pagemodel.assets.AssetRenderers; +import java.io.Serializable; import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.stream.Collectors; -import javax.inject.Inject; - /** * Base class for the renderers for {@link ContentItems}. * * @author Jens Pelzetter */ -public abstract class AbstractContentItemRenderer { +public abstract class AbstractContentItemRenderer implements Serializable { - @Inject - private AssetRenderers assetRenderers; + private static final long serialVersionUID = 1290408390406469580L; + + private final AssetRenderers assetRenderers; + + public AbstractContentItemRenderer(final AssetRenderers assetRenderers) { + this.assetRenderers = assetRenderers; + } /** * This method should be called to render a {@link ContentItem}. The method @@ -97,6 +101,7 @@ public abstract class AbstractContentItemRenderer { result.put("contentType", renderContentType(item.getContentType(), language)); result.put("description", item.getDescription().getValue(language)); + result.put("version", item.getVersion().toString()); result.put("creationDate", item.getCreationDate()); result.put("lastModified", item.getLastModified()); result.put("creationUserName", item.getCreationUserName()); diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ArticleRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ArticleRenderer.java index b2898d206..55642824b 100644 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ArticleRenderer.java +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ArticleRenderer.java @@ -20,34 +20,43 @@ package org.librecms.pagemodel.contentitems; import org.librecms.contentsection.ContentItem; import org.librecms.contenttypes.Article; +import org.librecms.pagemodel.assets.AssetRenderers; import java.util.Locale; import java.util.Map; import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; /** * Renderer for {@link Article} items. - * + * * @author Jens Pelzetter */ @ContentItemRenderer(renders = Article.class) @RequestScoped public class ArticleRenderer extends AbstractContentItemRenderer { + private static final long serialVersionUID = 8355183377902033759L; + + @Inject + public ArticleRenderer(final AssetRenderers assetRenderers) { + super(assetRenderers); + } + /** - * Render the provided {@link Article}. The following values are put into - * the map: - * + * Render the provided {@link Article}. The following values are put into + * the map: + * *
      *  {
      *      "text": {@link Article#getText()}
      *  }
      * 
- * - * @param item The item to render. + * + * @param item The item to render. * @param language The current language. - * @param result The map into which the result is placed. + * @param result The map into which the result is placed. */ @Override public void renderItem(final ContentItem item, @@ -60,7 +69,7 @@ public class ArticleRenderer extends AbstractContentItemRenderer { } else { return; } - + result.put("text", article.getText().getValue(language)); } diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ContentItemRenderers.java b/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ContentItemRenderers.java index 9becfbd33..62e66c350 100644 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ContentItemRenderers.java +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ContentItemRenderers.java @@ -21,6 +21,7 @@ package org.librecms.pagemodel.contentitems; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.librecms.contentsection.ContentItem; +import org.librecms.pagemodel.assets.AssetRenderers; import java.util.Locale; import java.util.Map; @@ -43,6 +44,9 @@ public class ContentItemRenderers { private static final Logger LOGGER = LogManager .getLogger(ContentItemRenderers.class); + @Inject + private AssetRenderers assetRenderers; + @Inject private Instance renderers; @@ -69,7 +73,7 @@ public class ContentItemRenderers { * is returned. * * @param itemType The type for which the renderer is retrieved. - * @param mode The render mode. + * @param mode The render mode. * * @return The renderer for the provided type. */ @@ -94,7 +98,10 @@ public class ContentItemRenderers { LOGGER.warn("No renderer for item type \"{}\" and mode " + "\"--DEFAULT--\". Returning default renderer.", itemType.getName()); - return new AbstractContentItemRenderer() { + return new AbstractContentItemRenderer(assetRenderers) { + + private static final long serialVersionUID + = -4679445070846896396L; @Override public void renderItem(final ContentItem item, diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/EventRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/EventRenderer.java index d06898ca9..ad9f3378a 100644 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/EventRenderer.java +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/EventRenderer.java @@ -20,10 +20,13 @@ package org.librecms.pagemodel.contentitems; import org.librecms.contentsection.ContentItem; import org.librecms.contenttypes.Event; +import org.librecms.pagemodel.assets.AssetRenderers; import java.util.Locale; import java.util.Map; +import javax.inject.Inject; + /** * Renderer for {@link Event} items. * @@ -32,10 +35,17 @@ import java.util.Map; @ContentItemRenderer(renders = Event.class) public class EventRenderer extends AbstractContentItemRenderer { + private static final long serialVersionUID = -3517404651544429745L; + + @Inject + public EventRenderer(final AssetRenderers assetRenderers) { + super(assetRenderers); + } + /** * Render the provided {@link Event}. The following values are put into * {@code result}: - * + * *
      *  {
      *      "text": {@link Event#getText()}
diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/MultiPartArticleRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/MultiPartArticleRenderer.java
index ed83a8b49..2312f9533 100644
--- a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/MultiPartArticleRenderer.java
+++ b/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/MultiPartArticleRenderer.java
@@ -21,12 +21,15 @@ package org.librecms.pagemodel.contentitems;
 import org.librecms.contentsection.ContentItem;
 import org.librecms.contenttypes.MultiPartArticle;
 import org.librecms.contenttypes.MultiPartArticleSection;
+import org.librecms.pagemodel.assets.AssetRenderers;
 
 import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
 import java.util.stream.Collectors;
 
+import javax.inject.Inject;
+
 /**
  * Renderer for {@link MultiPartArticle} items.
  *
@@ -35,6 +38,13 @@ import java.util.stream.Collectors;
 @ContentItemRenderer(renders = MultiPartArticle.class)
 public class MultiPartArticleRenderer extends AbstractContentItemRenderer {
 
+    private static final long serialVersionUID = -4298383182795585868L;
+
+    @Inject
+    public MultiPartArticleRenderer(final AssetRenderers assetRenderers) {
+        super(assetRenderers);
+    }
+
     /**
      * Renders the provided {@link MultiPartArticle}. The following values are
      * put into {@code result}:
diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/NewsRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/NewsRenderer.java
index 6768115e7..6406a4c37 100644
--- a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/NewsRenderer.java
+++ b/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/NewsRenderer.java
@@ -20,31 +20,41 @@ package org.librecms.pagemodel.contentitems;
 
 import org.librecms.contentsection.ContentItem;
 import org.librecms.contenttypes.News;
+import org.librecms.pagemodel.assets.AssetRenderers;
 
 import java.util.Locale;
 import java.util.Map;
 
 import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
 
 /**
  * Renderer for {@link News} items.
- * 
+ *
  * @author Jens Pelzetter
  */
 @ContentItemRenderer(renders = News.class)
 @RequestScoped
 public class NewsRenderer extends AbstractContentItemRenderer {
 
+    private static final long serialVersionUID = -493301428054148505L;
+
+    @Inject
+    public NewsRenderer(final AssetRenderers assetRenderers) {
+        super(assetRenderers);
+    }
+
     /**
-     * Renders the provided {@link News} item. The following values are put into {@code result}:
-     * 
+     * Renders the provided {@link News} item. The following values are put into
+     * {@code result}:
+     *
      * 
      *  {
      *      "text": {@link News#getText()}
      *      "releaseDate": {@link News#getReleaseDate()}
      *  }
      * 
- * + * * @param item The item to render. * @param language The current language. * @param result The map into which the result is placed. diff --git a/ccm-core/src/main/java/org/libreccm/categorization/Categorization.java b/ccm-core/src/main/java/org/libreccm/categorization/Categorization.java index 891f37dbc..0b3a49f5b 100644 --- a/ccm-core/src/main/java/org/libreccm/categorization/Categorization.java +++ b/ccm-core/src/main/java/org/libreccm/categorization/Categorization.java @@ -29,6 +29,8 @@ import java.util.Objects; import static org.libreccm.core.CoreConstants.DB_SCHEMA; +import javax.persistence.Access; +import javax.persistence.AccessType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -36,6 +38,7 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; +import javax.persistence.MappedSuperclass; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; @@ -77,13 +80,13 @@ import javax.persistence.Table; name = "Categorization.findIndexObject", query = "SELECT c.categorizedObject FROM Categorization c " + "WHERE c.category = :category " - + "AND c.index = TRUE") + + "AND c.indexObject = TRUE") , @NamedQuery( name = "Categorization.findIndexObjectCategorization", query = "SELECT c FROM Categorization c " + "WHERE c.category = :category " - + "AND c.index = TRUE" + + "AND c.indexObject = TRUE" ) , @NamedQuery( @@ -92,7 +95,7 @@ import javax.persistence.Table; + "ELSE false END) " + "FROM Categorization c " + "WHERE c.category = :category " - + "AND c.index = TRUE") + + "AND c.indexObject = TRUE") }) @JsonIdentityInfo(generator = CategorizationIdGenerator.class, property = "customCatId") @@ -125,11 +128,11 @@ public class Categorization implements Serializable, Relation, Portable { private CcmObject categorizedObject; /** - * If the categorised object is the index object of the category this - * property is set to {@code true}. + * If the categorised object is the indexObject object of the category this + property is set to {@code true}. */ @Column(name = "CATEGORY_INDEX") - private boolean index; + private boolean indexObject; /** * Defines the order in which the categories assigned the the categorised @@ -153,7 +156,7 @@ public class Categorization implements Serializable, Relation, Portable { private String type; public Categorization() { - index = false; + indexObject = false; categoryOrder = 0; objectOrder = 0; } @@ -192,12 +195,16 @@ public class Categorization implements Serializable, Relation, Portable { this.categorizedObject = categorizedObject; } - public boolean isIndex() { - return index; +// public boolean getIndex() { +// return indexObject; +// } + + public boolean isIndexObject() { + return indexObject; } - public void setIndex(final boolean index) { - this.index = index; + public void setIndexObject(final boolean indexObject) { + this.indexObject = indexObject; } public long getCategoryOrder() { @@ -231,7 +238,7 @@ public class Categorization implements Serializable, Relation, Portable { = 89 * hash + (int) (categorizationId ^ (categorizationId >>> 32)); hash = 89 * hash + Objects.hashCode(category); hash = 89 * hash + Objects.hashCode(categorizedObject); - hash = 89 * hash + (index ? 1 : 0); + hash = 89 * hash + (indexObject ? 1 : 0); hash = 89 * hash + (int) (categoryOrder ^ (categoryOrder >>> 32)); hash = 89 * hash + (int) (objectOrder ^ (objectOrder >>> 32)); hash = 89 * hash + Objects.hashCode(type); @@ -263,7 +270,7 @@ public class Categorization implements Serializable, Relation, Portable { return false; } - if (index != other.isIndex()) { + if (indexObject != other.isIndexObject()) { return false; } @@ -301,7 +308,7 @@ public class Categorization implements Serializable, Relation, Portable { categorizationId, Objects.toString(category), Objects.toString(categorizedObject), - index, + indexObject, categoryOrder, objectOrder, type, diff --git a/ccm-core/src/main/java/org/libreccm/categorization/CategoryManager.java b/ccm-core/src/main/java/org/libreccm/categorization/CategoryManager.java index 4e46be08a..879578ec6 100644 --- a/ccm-core/src/main/java/org/libreccm/categorization/CategoryManager.java +++ b/ccm-core/src/main/java/org/libreccm/categorization/CategoryManager.java @@ -144,7 +144,7 @@ public class CategoryManager { final long objectCount = countObjects(assignedCategory); categorization.setObjectOrder(objectCount + 1); categorization.setType(type); - categorization.setIndex(false); + categorization.setIndexObject(false); object.addCategory(categorization); assignedCategory.addObject(categorization); @@ -992,7 +992,7 @@ public class CategoryManager { ex); } - categorization.setIndex(true); + categorization.setIndexObject(true); entityManager.merge(categorization); } @@ -1013,7 +1013,7 @@ public class CategoryManager { query.setParameter("category", category); final List result = query.getResultList(); - result.forEach(categorization -> categorization.setIndex(false)); + result.forEach(categorization -> categorization.setIndexObject(false)); result.forEach(categorization -> entityManager.merge(categorization)); } diff --git a/ccm-core/src/main/java/org/libreccm/portation/AbstractMarshaller.java b/ccm-core/src/main/java/org/libreccm/portation/AbstractMarshaller.java index 82bc3ba32..49c7a7e81 100644 --- a/ccm-core/src/main/java/org/libreccm/portation/AbstractMarshaller.java +++ b/ccm-core/src/main/java/org/libreccm/portation/AbstractMarshaller.java @@ -201,7 +201,7 @@ public abstract class AbstractMarshaller

{ } catch (IOException e) { LOGGER.error("Unable to read objects " + "from XML line:\n \"{}\"", line); - LOGGER.error(e); + LOGGER.error("Exception: ", e); error = true; } break; diff --git a/ccm-core/src/main/java/org/libreccm/security/UserRepository.java b/ccm-core/src/main/java/org/libreccm/security/UserRepository.java index ba1af55c5..74af2fa23 100644 --- a/ccm-core/src/main/java/org/libreccm/security/UserRepository.java +++ b/ccm-core/src/main/java/org/libreccm/security/UserRepository.java @@ -36,6 +36,8 @@ import java.util.Optional; @RequestScoped public class UserRepository extends AbstractEntityRepository { + private static final long serialVersionUID = 5787091134411376455L; + @Override public Class getEntityClass() { return User.class; diff --git a/ccm-core/src/test/java/org/libreccm/portation/CoreDataImportTest.java b/ccm-core/src/test/java/org/libreccm/portation/CoreDataImportTest.java index ba14ebc03..d1827e4c1 100644 --- a/ccm-core/src/test/java/org/libreccm/portation/CoreDataImportTest.java +++ b/ccm-core/src/test/java/org/libreccm/portation/CoreDataImportTest.java @@ -153,8 +153,8 @@ public class CoreDataImportTest { Assert.assertFalse(importHelper.importWorkflows()); Assert.assertFalse(importHelper.importTaskComments()); - //Assert.assertFalse(importHelper.importAssignableTasks()); - //Assert.assertFalse(importHelper.importTaskAssignments()); + Assert.assertFalse(importHelper.importAssignableTasks()); +// Assert.assertFalse(importHelper.importTaskAssignments()); } }