ALF-10429 / ALF-10413 - Implement the site related methods on BlogService

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@31173 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Nick Burch
2011-10-12 14:54:31 +00:00
parent 63e87a3388
commit 5e9c517438
3 changed files with 113 additions and 23 deletions

View File

@@ -66,8 +66,11 @@
<property name="dictionaryService" ref="DictionaryService"/> <property name="dictionaryService" ref="DictionaryService"/>
<property name="namespaceService" ref="NamespaceService"/> <property name="namespaceService" ref="NamespaceService"/>
<property name="nodeService" ref="NodeService"/> <property name="nodeService" ref="NodeService"/>
<property name="permissionService" ref="PermissionService"/> <property name="siteService" ref="SiteService"/>
<property name="searchService" ref="SearchService"/> <property name="searchService" ref="SearchService"/>
<property name="taggingService" ref="TaggingService"/>
<property name="permissionService" ref="PermissionService"/>
<property name="transactionService" ref="transactionService" />
<property name="draftBlogPostsCannedQueryFactory" ref="getDraftBlogPostsCannedQueryFactory"/> <property name="draftBlogPostsCannedQueryFactory" ref="getDraftBlogPostsCannedQueryFactory"/>
<property name="publishedBlogPostsCannedQueryFactory" ref="getPublishedBlogPostsCannedQueryFactory"/> <property name="publishedBlogPostsCannedQueryFactory" ref="getPublishedBlogPostsCannedQueryFactory"/>

View File

@@ -28,6 +28,7 @@ import java.util.Map;
import org.alfresco.model.ContentModel; import org.alfresco.model.ContentModel;
import org.alfresco.query.CannedQueryFactory; import org.alfresco.query.CannedQueryFactory;
import org.alfresco.query.CannedQueryResults; import org.alfresco.query.CannedQueryResults;
import org.alfresco.query.EmptyPagingResults;
import org.alfresco.query.PagingRequest; import org.alfresco.query.PagingRequest;
import org.alfresco.query.PagingResults; import org.alfresco.query.PagingResults;
import org.alfresco.repo.blog.cannedqueries.DraftsAndPublishedBlogPostsCannedQuery; import org.alfresco.repo.blog.cannedqueries.DraftsAndPublishedBlogPostsCannedQuery;
@@ -37,6 +38,7 @@ import org.alfresco.repo.blog.cannedqueries.GetBlogPostsCannedQueryFactory;
import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.content.MimetypeMap;
import org.alfresco.repo.search.impl.lucene.LuceneUtils; import org.alfresco.repo.search.impl.lucene.LuceneUtils;
import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.site.SiteServiceImpl;
import org.alfresco.service.cmr.blog.BlogPostInfo; import org.alfresco.service.cmr.blog.BlogPostInfo;
import org.alfresco.service.cmr.blog.BlogService; import org.alfresco.service.cmr.blog.BlogService;
import org.alfresco.service.cmr.dictionary.DataTypeDefinition; import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
@@ -50,8 +52,11 @@ import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.SearchParameters; import org.alfresco.service.cmr.search.SearchParameters;
import org.alfresco.service.cmr.search.SearchService; import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.site.SiteService;
import org.alfresco.service.cmr.tagging.TaggingService;
import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.alfresco.service.transaction.TransactionService;
import org.alfresco.util.ISO9075; import org.alfresco.util.ISO9075;
import org.alfresco.util.Pair; import org.alfresco.util.Pair;
import org.alfresco.util.ParameterCheck; import org.alfresco.util.ParameterCheck;
@@ -70,6 +75,8 @@ public class BlogServiceImpl implements BlogService
*/ */
private static final int MAX_QUERY_ENTRY_COUNT = 10000; private static final int MAX_QUERY_ENTRY_COUNT = 10000;
public static final String BLOG_COMPONENT = "blog";
// Injected services // Injected services
private NamedObjectRegistry<CannedQueryFactory<BlogPostInfo>> cannedQueryRegistry; private NamedObjectRegistry<CannedQueryFactory<BlogPostInfo>> cannedQueryRegistry;
private GetBlogPostsCannedQueryFactory draftPostsCannedQueryFactory; private GetBlogPostsCannedQueryFactory draftPostsCannedQueryFactory;
@@ -82,7 +89,10 @@ public class BlogServiceImpl implements BlogService
private DictionaryService dictionaryService; private DictionaryService dictionaryService;
private NamespaceService namespaceService; private NamespaceService namespaceService;
private NodeService nodeService; private NodeService nodeService;
private SiteService siteService;
private TransactionService transactionService;
private PermissionService permissionService; private PermissionService permissionService;
private TaggingService taggingService;
private SearchService searchService; private SearchService searchService;
public void setCannedQueryRegistry(NamedObjectRegistry<CannedQueryFactory<BlogPostInfo>> cannedQueryRegistry) public void setCannedQueryRegistry(NamedObjectRegistry<CannedQueryFactory<BlogPostInfo>> cannedQueryRegistry)
@@ -130,16 +140,41 @@ public class BlogServiceImpl implements BlogService
this.nodeService = nodeService; this.nodeService = nodeService;
} }
public void setSiteService(SiteService siteService)
{
this.siteService = siteService;
}
public void setTransactionService(TransactionService transactionService)
{
this.transactionService = transactionService;
}
public void setPermissionService(PermissionService permissionService) public void setPermissionService(PermissionService permissionService)
{ {
this.permissionService = permissionService; this.permissionService = permissionService;
} }
public void setTaggingService(TaggingService taggingService)
{
this.taggingService = taggingService;
}
public void setSearchService(SearchService searchService) public void setSearchService(SearchService searchService)
{ {
this.searchService = searchService; this.searchService = searchService;
} }
/**
* Fetches the Blogs Container on a site, creating as required if requested.
*/
protected NodeRef getSiteBlogContainer(final String siteShortName, boolean create)
{
return SiteServiceImpl.getSiteContainer(
siteShortName, BLOG_COMPONENT, create,
siteService, transactionService, taggingService);
}
@Override @Override
public boolean isDraftBlogPost(NodeRef blogPostNode) public boolean isDraftBlogPost(NodeRef blogPostNode)
{ {
@@ -151,8 +186,11 @@ public class BlogServiceImpl implements BlogService
public BlogPostInfo createBlogPost(String siteShortName, String blogTitle, public BlogPostInfo createBlogPost(String siteShortName, String blogTitle,
String blogContent, boolean isDraft) String blogContent, boolean isDraft)
{ {
// TODO Implement // Grab the location to stor ein
return null; NodeRef container = getSiteBlogContainer(siteShortName, true);
// Add by Parent NodeRef
return createBlogPost(container, blogTitle, blogContent, isDraft);
} }
@Override @Override
@@ -197,7 +235,7 @@ public class BlogServiceImpl implements BlogService
throw new IllegalArgumentException("Can't update a post that was never persisted, call create instead"); throw new IllegalArgumentException("Can't update a post that was never persisted, call create instead");
} }
// TODO Implement // TODO Implement, once BlogPostInfo is finished
return null; return null;
} }
@@ -216,8 +254,15 @@ public class BlogServiceImpl implements BlogService
public PagingResults<BlogPostInfo> getDrafts(String siteShortName, public PagingResults<BlogPostInfo> getDrafts(String siteShortName,
String username, PagingRequest pagingReq) String username, PagingRequest pagingReq)
{ {
// TODO Implement NodeRef container = getSiteBlogContainer(siteShortName, false);
return null; if (container == null)
{
// No blog posts yet
return new EmptyPagingResults<BlogPostInfo>();
}
// We can now fetch by parent nodeRef
return getDrafts(container, username, pagingReq);
} }
@Override @Override
@@ -239,8 +284,15 @@ public class BlogServiceImpl implements BlogService
public PagingResults<BlogPostInfo> getPublishedExternally( public PagingResults<BlogPostInfo> getPublishedExternally(
String siteShortName, PagingRequest pagingReq) String siteShortName, PagingRequest pagingReq)
{ {
// TODO Implement NodeRef container = getSiteBlogContainer(siteShortName, false);
return null; if (container == null)
{
// No blog posts yet
return new EmptyPagingResults<BlogPostInfo>();
}
// We can now fetch by parent nodeRef
return getPublishedExternally(container, pagingReq);
} }
@Override @Override
@@ -262,8 +314,15 @@ public class BlogServiceImpl implements BlogService
public PagingResults<BlogPostInfo> getPublished(String siteShortName, public PagingResults<BlogPostInfo> getPublished(String siteShortName,
Date fromDate, Date toDate, String byUser, PagingRequest pagingReq) Date fromDate, Date toDate, String byUser, PagingRequest pagingReq)
{ {
// TODO Implement NodeRef container = getSiteBlogContainer(siteShortName, false);
return null; if (container == null)
{
// No blog posts yet
return new EmptyPagingResults<BlogPostInfo>();
}
// We can now fetch by parent nodeRef
return getPublished(container, fromDate, toDate, byUser, pagingReq);
} }
@Override @Override
@@ -341,8 +400,15 @@ public class BlogServiceImpl implements BlogService
public PagingResults<BlogPostInfo> findBlogPosts(String siteShortName, public PagingResults<BlogPostInfo> findBlogPosts(String siteShortName,
RangedDateProperty dateRange, String tag, PagingRequest pagingReq) RangedDateProperty dateRange, String tag, PagingRequest pagingReq)
{ {
// TODO Implement NodeRef container = getSiteBlogContainer(siteShortName, false);
return null; if (container == null)
{
// No blog posts yet
return new EmptyPagingResults<BlogPostInfo>();
}
// We can now fetch by parent nodeRef
return findBlogPosts(container, dateRange, tag, pagingReq);
} }
@Override @Override

View File

@@ -54,7 +54,6 @@ import org.alfresco.service.cmr.site.SiteInfo;
import org.alfresco.service.cmr.site.SiteService; import org.alfresco.service.cmr.site.SiteService;
import org.alfresco.service.cmr.site.SiteVisibility; import org.alfresco.service.cmr.site.SiteVisibility;
import org.alfresco.service.cmr.tagging.TaggingService; import org.alfresco.service.cmr.tagging.TaggingService;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.alfresco.util.ApplicationContextHelper; import org.alfresco.util.ApplicationContextHelper;
import org.alfresco.util.Pair; import org.alfresco.util.Pair;
@@ -101,6 +100,7 @@ public class BlogServiceImplTest
*/ */
private static List<NodeRef> CLASS_TEST_NODES_TO_TIDY = new ArrayList<NodeRef>(); private static List<NodeRef> CLASS_TEST_NODES_TO_TIDY = new ArrayList<NodeRef>();
private static SiteInfo BLOG_SITE;
private static NodeRef BLOG_CONTAINER_NODE; private static NodeRef BLOG_CONTAINER_NODE;
@BeforeClass public static void initTestsContext() throws Exception @BeforeClass public static void initTestsContext() throws Exception
@@ -125,21 +125,32 @@ public class BlogServiceImplTest
private static void createTestSiteWithBlogContainer() throws Exception private static void createTestSiteWithBlogContainer() throws Exception
{ {
BLOG_CONTAINER_NODE = TRANSACTION_HELPER.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<NodeRef>() BLOG_SITE = TRANSACTION_HELPER.doInTransaction(
new RetryingTransactionHelper.RetryingTransactionCallback<SiteInfo>()
{ {
@Override @Override
public NodeRef execute() throws Throwable public SiteInfo execute() throws Throwable
{ {
SiteInfo site = SITE_SERVICE.createSite("BlogSitePreset", BlogServiceImplTest.class.getSimpleName() + "_testSite" + System.currentTimeMillis(), SiteInfo site = SITE_SERVICE.createSite("BlogSitePreset", BlogServiceImplTest.class.getSimpleName() + "_testSite" + System.currentTimeMillis(),
"test site title", "test site description", SiteVisibility.PUBLIC); "test site title", "test site description", SiteVisibility.PUBLIC);
CLASS_TEST_NODES_TO_TIDY.add(site.getNodeRef()); CLASS_TEST_NODES_TO_TIDY.add(site.getNodeRef());
return site;
}
});
NodeRef result = SITE_SERVICE.getContainer(site.getShortName(), "blog"); BLOG_CONTAINER_NODE = TRANSACTION_HELPER.doInTransaction(
new RetryingTransactionHelper.RetryingTransactionCallback<NodeRef>()
{
@Override
public NodeRef execute() throws Throwable
{
SiteInfo site = BLOG_SITE;
NodeRef result = SITE_SERVICE.getContainer(site.getShortName(), BlogServiceImpl.BLOG_COMPONENT);
if (result == null) if (result == null)
{ {
result = NODE_SERVICE.createNode(site.getNodeRef(), ContentModel.ASSOC_CONTAINS, result = SITE_SERVICE.createContainer(site.getShortName(), BlogServiceImpl.BLOG_COMPONENT,
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "blog"), ContentModel.TYPE_FOLDER, null).getChildRef(); ContentModel.TYPE_FOLDER, null);
CLASS_TEST_NODES_TO_TIDY.add(result); CLASS_TEST_NODES_TO_TIDY.add(result);
} }
@@ -215,7 +226,17 @@ public class BlogServiceImplTest
for (int i = 0; i < arbitraryNumberGreaterThanPageSize; i++) for (int i = 0; i < arbitraryNumberGreaterThanPageSize; i++)
{ {
BlogPostInfo newBlogPost = BLOG_SERVICE.createBlogPost(BLOG_CONTAINER_NODE, "title_" + i, "Hello world", true); BlogPostInfo newBlogPost;
if(i % 2 == 0)
{
// By container ref
newBlogPost = BLOG_SERVICE.createBlogPost(BLOG_CONTAINER_NODE, "title_" + i, "Hello world", true);
}
else
{
// By site name
newBlogPost = BLOG_SERVICE.createBlogPost(BLOG_SITE.getShortName(), "title_" + i, "Hello world", true);
}
results.add(newBlogPost.getNodeRef()); results.add(newBlogPost.getNodeRef());
testNodesToTidy.add(newBlogPost.getNodeRef()); testNodesToTidy.add(newBlogPost.getNodeRef());