From f522dbad81b7007a1065bcef3cd465bb9df67ff5 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Wed, 12 Oct 2011 17:39:19 +0000 Subject: [PATCH] ALF-10429 / ALF-10413 Refactor the blog webscripts to follow the pattern of the other new service webscripts, avoiding the old JS style code git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@31184 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../public-services-security-context.xml | 6 +- .../alfresco/repo/blog/BlogServiceImpl.java | 86 +++++++++++++++++++ .../service/cmr/blog/BlogService.java | 23 +++++ 3 files changed, 112 insertions(+), 3 deletions(-) diff --git a/config/alfresco/public-services-security-context.xml b/config/alfresco/public-services-security-context.xml index 624fdb9476..b6b231c612 100644 --- a/config/alfresco/public-services-security-context.xml +++ b/config/alfresco/public-services-security-context.xml @@ -930,9 +930,9 @@ - org.alfresco.service.cmr.blog.BlogService.getDrafts=ACL_NODE.0.sys:base.ReadChildren,AFTER_ACL_NODE.sys:base.ReadProperties - org.alfresco.service.cmr.blog.BlogService.getPublished=ACL_NODE.0.sys:base.ReadChildren,AFTER_ACL_NODE.sys:base.ReadProperties - org.alfresco.service.cmr.blog.BlogService.getPublishedExternally=ACL_NODE.0.sys:base.ReadChildren,AFTER_ACL_NODE.sys:base.ReadProperties + org.alfresco.service.cmr.blog.BlogService.getDrafts=ACL_ALLOW,AFTER_ACL_NODE.sys:base.ReadProperties + org.alfresco.service.cmr.blog.BlogService.getPublished=ACL_ALLOW,AFTER_ACL_NODE.sys:base.ReadProperties + org.alfresco.service.cmr.blog.BlogService.getPublishedExternally=ACL_ALLOW,AFTER_ACL_NODE.sys:base.ReadProperties org.alfresco.service.cmr.blog.BlogService.getMyDraftsAndAllPublished=ACL_NODE.0.sys:base.ReadChildren,AFTER_ACL_NODE.sys:base.ReadProperties org.alfresco.service.cmr.blog.BlogService.*=ACL_ALLOW diff --git a/source/java/org/alfresco/repo/blog/BlogServiceImpl.java b/source/java/org/alfresco/repo/blog/BlogServiceImpl.java index 9554ac57e8..044370031f 100644 --- a/source/java/org/alfresco/repo/blog/BlogServiceImpl.java +++ b/source/java/org/alfresco/repo/blog/BlogServiceImpl.java @@ -38,6 +38,7 @@ import org.alfresco.repo.blog.cannedqueries.GetBlogPostsCannedQueryFactory; import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.search.impl.lucene.LuceneUtils; import org.alfresco.repo.security.authentication.AuthenticationUtil; +import org.alfresco.repo.security.permissions.AccessDeniedException; import org.alfresco.repo.site.SiteServiceImpl; import org.alfresco.service.cmr.blog.BlogPostInfo; import org.alfresco.service.cmr.blog.BlogService; @@ -61,6 +62,8 @@ import org.alfresco.util.ISO9075; import org.alfresco.util.Pair; import org.alfresco.util.ParameterCheck; import org.alfresco.util.registry.NamedObjectRegistry; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; /** * @author Neil Mc Erlean (based on existing webscript controllers in the REST API) @@ -77,6 +80,11 @@ public class BlogServiceImpl implements BlogService public static final String BLOG_COMPONENT = "blog"; + /** + * The logger + */ + private static Log logger = LogFactory.getLog(BlogServiceImpl.class); + // Injected services private NamedObjectRegistry> cannedQueryRegistry; private GetBlogPostsCannedQueryFactory draftPostsCannedQueryFactory; @@ -175,6 +183,25 @@ public class BlogServiceImpl implements BlogService siteService, transactionService, taggingService); } + /** + * Builds up a {@link BlogPostInfo} object for the given node + */ + private BlogPostInfo buildBlogPost(NodeRef nodeRef, NodeRef parentNodeRef, String postName) + { + BlogPostInfoImpl post = new BlogPostInfoImpl(nodeRef, postName); + + // Grab all the properties, we need the bulk of them anyway + Map props = nodeService.getProperties(nodeRef); + + // TODO Populate them + + // Finally set tags + // TODO + + // All done + return post; + } + @Override public boolean isDraftBlogPost(NodeRef blogPostNode) { @@ -251,6 +278,65 @@ public class BlogServiceImpl implements BlogService @Override + public BlogPostInfo getForNodeRef(NodeRef nodeRef) + { + QName type = nodeService.getType(nodeRef); + + // Note - there isn't a special blog type! + // The nodes are just created as cm:Content + if (type.equals(ContentModel.TYPE_CONTENT)) + { + ChildAssociationRef ref = nodeService.getPrimaryParent(nodeRef); + String postName = ref.getQName().getLocalName(); + NodeRef container = ref.getParentRef(); + return buildBlogPost(nodeRef, container, postName); + } + else + { + logger.debug("Invalid type " + type + " found"); + return null; + } + } + + @Override + public BlogPostInfo getBlogPost(String siteShortName, String postName) + { + NodeRef container = getSiteBlogContainer(siteShortName, false); + if (container == null) + { + // No blog posts yet + return null; + } + + // We can now fetch by parent nodeRef + return getBlogPost(container, postName); + } + + @Override + public BlogPostInfo getBlogPost(NodeRef parentNodeRef, String postName) + { + NodeRef postNode; + try + { + postNode = nodeService.getChildByName(parentNodeRef, ContentModel.ASSOC_CONTAINS, postName); + } + catch(AccessDeniedException e) + { + // You can't see that blog post + // For compatibility with the old webscripts, rather than + // reporting permission denied, pretend it isn't there + postNode = null; + } + + // If we found a node, wrap it as a BlogPostInfo + if (postNode != null) + { + return buildBlogPost(postNode, parentNodeRef, postName); + } + return null; + } + + @Override public PagingResults getDrafts(String siteShortName, String username, PagingRequest pagingReq) { diff --git a/source/java/org/alfresco/service/cmr/blog/BlogService.java b/source/java/org/alfresco/service/cmr/blog/BlogService.java index b55c1447c9..e3dcf9e4b0 100644 --- a/source/java/org/alfresco/service/cmr/blog/BlogService.java +++ b/source/java/org/alfresco/service/cmr/blog/BlogService.java @@ -24,6 +24,7 @@ import org.alfresco.model.ContentModel; import org.alfresco.query.PagingRequest; import org.alfresco.query.PagingResults; import org.alfresco.repo.blog.BlogIntegrationService; +import org.alfresco.service.NotAuditable; import org.alfresco.service.cmr.dictionary.DataTypeDefinition; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.site.SiteService; @@ -81,6 +82,28 @@ public interface BlogService */ void deleteBlogPost(BlogPostInfo post); + /** + * For a given NodeRef corresponding to a {@link BlogPostInfo}, + * returns the object wrapping the Node. + * + * For anything else, the response is null. + */ + @NotAuditable + BlogPostInfo getForNodeRef(NodeRef nodeRef); + + /** + * Retrieves an existing {@link BlogPostInfo} from the repository, + * which is within a site + */ + BlogPostInfo getBlogPost(String siteShortName, String postName); + + /** + * Retrieves an existing {@link BlogPostInfo} from the repository, + * which is attached to the specified Node. + * The parent Node should normally be a Site Container + */ + BlogPostInfo getBlogPost(NodeRef parentNodeRef, String postName); + /** * Gets the draft blog posts created by the specified user. *