From 16bfe12fc874b50a916783fc97b3cbfca0ba66fc Mon Sep 17 00:00:00 2001 From: jensp Date: Thu, 11 May 2017 18:01:30 +0000 Subject: [PATCH] CCM NG/ccm-cms: Some progress for the ContentItemPage git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4730 8810af33-2d31-482b-a856-94f89814c4df Former-commit-id: 6c7022eafc48a84d6de4c2d709d4225b71b06612 --- ccm-cms/src/main/java/org/librecms/Cms.java | 10 +++++- .../main/java/org/librecms/ContentTypes.java | 35 ------------------- .../contentsection/ContentItemRepository.java | 32 ++++++++++++++++- 3 files changed, 40 insertions(+), 37 deletions(-) delete mode 100644 ccm-cms/src/main/java/org/librecms/ContentTypes.java diff --git a/ccm-cms/src/main/java/org/librecms/Cms.java b/ccm-cms/src/main/java/org/librecms/Cms.java index 334532fe2..15528811a 100644 --- a/ccm-cms/src/main/java/org/librecms/Cms.java +++ b/ccm-cms/src/main/java/org/librecms/Cms.java @@ -19,13 +19,21 @@ import org.libreccm.modules.ShutdownEvent; import org.libreccm.modules.UnInstallEvent; import org.libreccm.web.ApplicationType; import org.libreccm.web.CcmApplication; -import org.librecms.assets.*; +import org.librecms.assets.AssetTypes; +import org.librecms.assets.Bookmark; +import org.librecms.assets.ExternalAudioAsset; +import org.librecms.assets.ExternalVideoAsset; +import org.librecms.assets.FileAsset; +import org.librecms.assets.Image; +import org.librecms.assets.LegalMetadata; +import org.librecms.assets.SideNote; import org.librecms.contentsection.ContentSection; import org.librecms.contentsection.ContentSectionCreator; import org.librecms.contentsection.ContentSectionSetup; import org.librecms.contentsection.ui.admin.ApplicationInstanceForm; import org.librecms.contentsection.ui.admin.SettingsPane; import org.librecms.contenttypes.Article; +import org.librecms.contenttypes.ContentTypes; import org.librecms.contenttypes.Event; import org.librecms.contenttypes.MultiPartArticle; import org.librecms.contenttypes.News; diff --git a/ccm-cms/src/main/java/org/librecms/ContentTypes.java b/ccm-cms/src/main/java/org/librecms/ContentTypes.java deleted file mode 100644 index 98d8491b5..000000000 --- a/ccm-cms/src/main/java/org/librecms/ContentTypes.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2016 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; - -import org.librecms.contentsection.ContentItem; - -/** - * Annotation for modules to describe the content types provided by a module. - * The content types - classes which extend the {@link ContentItem} class - must - * be annotated with the {@link ContentType} annotation. - * - * - * @author Jens Pelzetter - */ -public @interface ContentTypes { - - Class[] value(); - -} 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 6881d0aa7..4778627e1 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/ContentItemRepository.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/ContentItemRepository.java @@ -30,6 +30,8 @@ import org.libreccm.categorization.ObjectNotAssignedToCategoryException; import org.libreccm.core.CcmObject; import org.libreccm.core.CcmObjectRepository; import org.libreccm.core.UnexpectedErrorException; +import org.libreccm.security.PermissionChecker; +import org.libreccm.security.Role; import java.util.List; import java.util.Optional; @@ -41,8 +43,12 @@ import javax.persistence.NoResultException; import javax.persistence.TypedQuery; import org.libreccm.security.Shiro; +import org.libreccm.security.User; import org.libreccm.workflow.Workflow; +import java.util.Collections; +import java.util.stream.Collectors; + import javax.transaction.Transactional; /** @@ -68,6 +74,9 @@ public class ContentItemRepository @Inject private Shiro shiro; + + @Inject + private PermissionChecker permissionChecker; @Override public Long getEntityId(final ContentItem item) { @@ -222,14 +231,35 @@ public class ContentItemRepository return query.getSingleResult(); } + @Transactional(Transactional.TxType.REQUIRED) public Optional findByNameInFolder(final Category folder, final String name) { + + final Optional user = shiro.getUser(); + final List roles; + if (user.isPresent()) { + roles = user + .get() + .getRoleMemberships() + .stream() + .map(membership -> membership.getRole()) + .collect(Collectors.toList()); + } else { + roles = Collections.emptyList(); + } + + final boolean isSystemUser = shiro.isSystemUser(); + final boolean isAdmin = permissionChecker.isPermitted("*"); + final TypedQuery query = getEntityManager() .createNamedQuery("ContentItem.findByNameInFolder", ContentItem.class); query.setParameter("folder", folder); query.setParameter("name", name); - + query.setParameter("roles", roles); + query.setParameter("isSystemUser", isSystemUser); + query.setParameter("isAdmin", isAdmin); + try { return Optional.of(query.getSingleResult()); } catch (NoResultException ex) {