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.
*