diff --git a/config/alfresco/blog-context.xml b/config/alfresco/blog-context.xml
index 7f33059085..410d2dc7ae 100644
--- a/config/alfresco/blog-context.xml
+++ b/config/alfresco/blog-context.xml
@@ -81,6 +81,7 @@
+
@@ -117,7 +118,6 @@
-
diff --git a/source/java/org/alfresco/repo/blog/BlogService.java b/source/java/org/alfresco/repo/blog/BlogService.java
index 1caca65c8b..7a8155aa15 100644
--- a/source/java/org/alfresco/repo/blog/BlogService.java
+++ b/source/java/org/alfresco/repo/blog/BlogService.java
@@ -102,7 +102,6 @@ public interface BlogService
* @param blogContainerNode the container node for blog posts (under the site).
* @param fromDate an inclusive date limit for the results (more recent than).
* @param toDate an inclusive date limit for the results (before).
- * @param tag if specified, only returns posts tagged with this tag.
* @param pagingReq an object defining the paging parameters for the result set.
*
* @return a {@link PagingResults} object containing some or all of the results (subject to paging).
@@ -111,9 +110,21 @@ public interface BlogService
*
* @deprecated This method is a domain-specific query used by the Blog REST API and is not considered suitable for general use.
*/
- PagingResults getMyDraftsAndAllPublished(NodeRef blogContainerNode, Date fromDate, Date toDate,
- String tag, PagingRequest pagingReq);
+ PagingResults getMyDraftsAndAllPublished(NodeRef blogContainerNode, Date fromDate, Date toDate, PagingRequest pagingReq);
+ /**
+ * Finds blog posts by the specified user tagged with the given tag string.
+ *
+ * @param blogContainerNode the container node for blog posts (under the site).
+ * @param tag tag string.
+ * @param pagingReq an object defining the paging parameters for the result set.
+ *
+ * @return a {@link PagingResults} object containing some or all of the results (subject to paging).
+ *
+ * @see SiteService#getContainer(String, String) to retrieve the blogContainerNode
+ */
+ PagingResults findTaggedBlogPosts(NodeRef blogContainerNode, String tag, PagingRequest pagingReq);
+
/**
* Returns true if the specified blog-post node is a 'draft' blog post.
*
diff --git a/source/java/org/alfresco/repo/blog/BlogServiceImpl.java b/source/java/org/alfresco/repo/blog/BlogServiceImpl.java
index 7a23337f7b..598738d014 100644
--- a/source/java/org/alfresco/repo/blog/BlogServiceImpl.java
+++ b/source/java/org/alfresco/repo/blog/BlogServiceImpl.java
@@ -19,8 +19,10 @@
package org.alfresco.repo.blog;
import java.io.Serializable;
+import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import org.alfresco.model.ContentModel;
@@ -39,9 +41,14 @@ import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
+import org.alfresco.service.cmr.search.ResultSet;
+import org.alfresco.service.cmr.search.SearchParameters;
+import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
+import org.alfresco.util.ISO9075;
+import org.alfresco.util.Pair;
import org.alfresco.util.ParameterCheck;
import org.alfresco.util.registry.NamedObjectRegistry;
@@ -69,6 +76,7 @@ public class BlogServiceImpl implements BlogService
private ContentService contentService;
private NodeService nodeService;
private PermissionService permissionService;
+ private SearchService searchService;
public void setCannedQueryRegistry(NamedObjectRegistry> cannedQueryRegistry)
{
@@ -110,6 +118,11 @@ public class BlogServiceImpl implements BlogService
this.permissionService = permissionService;
}
+ public void setSearchService(SearchService searchService)
+ {
+ this.searchService = searchService;
+ }
+
@Override
public boolean isDraftBlogPost(NodeRef blogPostNode)
{
@@ -199,7 +212,7 @@ public class BlogServiceImpl implements BlogService
* @deprecated
*/
@Override
- public PagingResults getMyDraftsAndAllPublished(NodeRef blogContainerNode, Date createdFrom, Date createdTo, String tag, PagingRequest pagingReq)
+ public PagingResults getMyDraftsAndAllPublished(NodeRef blogContainerNode, Date createdFrom, Date createdTo, PagingRequest pagingReq)
{
ParameterCheck.mandatory("blogContainerNode", blogContainerNode);
ParameterCheck.mandatory("pagingReq", pagingReq);
@@ -207,7 +220,7 @@ public class BlogServiceImpl implements BlogService
// get canned query
pagingReq.setRequestTotalCountMax(MAX_QUERY_ENTRY_COUNT);
String currentUser = AuthenticationUtil.getFullyAuthenticatedUser();
- DraftsAndPublishedBlogPostsCannedQuery cq = (DraftsAndPublishedBlogPostsCannedQuery)draftsAndPublishedBlogPostsCannedQueryFactory.getCannedQuery(blogContainerNode, createdFrom, createdTo, currentUser, tag, pagingReq);
+ DraftsAndPublishedBlogPostsCannedQuery cq = (DraftsAndPublishedBlogPostsCannedQuery)draftsAndPublishedBlogPostsCannedQueryFactory.getCannedQuery(blogContainerNode, createdFrom, createdTo, currentUser, pagingReq);
// execute canned query
CannedQueryResults results = cq.execute();
@@ -250,4 +263,70 @@ public class BlogServiceImpl implements BlogService
nodeService.setProperty(blogPostNode, ContentModel.PROP_UPDATED, new Date());
}
}
+
+ @Override
+ public PagingResults findTaggedBlogPosts(
+ NodeRef blogContainerNode, String tag, PagingRequest pagingReq)
+ {
+ StringBuilder luceneQuery = new StringBuilder();
+ luceneQuery.append("+TYPE:\"").append(ContentModel.TYPE_CONTENT).append("\" ")
+ .append("+PARENT:\"").append(blogContainerNode.toString()).append("\" ")
+ .append("+PATH:\"/cm:taggable/cm:").append(ISO9075.encode(tag)).append("/member\"");
+
+ SearchParameters sp = new SearchParameters();
+ sp.addStore(blogContainerNode.getStoreRef());
+ sp.setLanguage(SearchService.LANGUAGE_LUCENE);
+ sp.setQuery(luceneQuery.toString());
+ sp.addSort(ContentModel.PROP_PUBLISHED.toString(), false);
+ ResultSet luceneResults = null;
+ PagingResults results = null;
+ try
+ {
+ luceneResults = searchService.query(sp);
+ final ResultSet finalLuceneResults = luceneResults;
+
+ results = new PagingResults()
+ {
+
+ @Override
+ public List getPage()
+ {
+ List nodeRefs = finalLuceneResults.getNodeRefs();
+ List blogPostInfos = new ArrayList(nodeRefs.size());
+ for (NodeRef nodeRef : nodeRefs)
+ {
+ blogPostInfos.add(new BlogPostInfo(nodeRef, (String)nodeService.getProperty(nodeRef, ContentModel.PROP_NAME)));
+ }
+ return blogPostInfos;
+ }
+
+ @Override
+ public String getQueryExecutionId()
+ {
+ return null;
+ }
+
+ @Override
+ public Pair getTotalResultCount()
+ {
+ int size = finalLuceneResults.getNodeRefs().size();
+ //FIXME Impl
+ return new Pair(size, size);
+ }
+
+ @Override
+ public boolean hasMoreItems()
+ {
+ return finalLuceneResults.hasMore();
+ }
+ };
+ }
+ finally
+ {
+ if (luceneResults != null) luceneResults.close();
+ }
+
+
+ return results;
+ }
}
diff --git a/source/java/org/alfresco/repo/blog/cannedqueries/DraftsAndPublishedBlogPostsCannedQuery.java b/source/java/org/alfresco/repo/blog/cannedqueries/DraftsAndPublishedBlogPostsCannedQuery.java
index 2ed6233537..6bec70f147 100644
--- a/source/java/org/alfresco/repo/blog/cannedqueries/DraftsAndPublishedBlogPostsCannedQuery.java
+++ b/source/java/org/alfresco/repo/blog/cannedqueries/DraftsAndPublishedBlogPostsCannedQuery.java
@@ -56,17 +56,14 @@ public class DraftsAndPublishedBlogPostsCannedQuery extends AbstractCannedQueryP
private static final String QUERY_SELECT_GET_BLOGS = "select_GetBlogsCannedQuery";
private final CannedQueryDAO cannedQueryDAO;
- private final TaggingService taggingService;
public DraftsAndPublishedBlogPostsCannedQuery(
CannedQueryDAO cannedQueryDAO,
- TaggingService taggingService,
MethodSecurityBean methodSecurity,
CannedQueryParameters params)
{
super(params, methodSecurity);
this.cannedQueryDAO = cannedQueryDAO;
- this.taggingService = taggingService;
}
@Override
@@ -80,7 +77,6 @@ public class DraftsAndPublishedBlogPostsCannedQuery extends AbstractCannedQueryP
DraftsAndPublishedBlogPostsCannedQueryParams paramBean = (DraftsAndPublishedBlogPostsCannedQueryParams) paramBeanObj;
String requestedCreator = paramBean.getCmCreator();
- String requestedTag = paramBean.getTag();
Date createdFromDate = paramBean.getCreatedFromDate();
Date createdToDate = paramBean.getCreatedToDate();
@@ -135,13 +131,6 @@ public class DraftsAndPublishedBlogPostsCannedQuery extends AbstractCannedQueryP
}
}
- // TODO review use-case and either remove or push-down
- // Only return blog posts tagged with the specified tag string.
- if (requestedTag != null && !taggingService.getTags(result.getNode().getNodeRef()).contains(requestedTag))
- {
- nextNodeIsAcceptable = false;
- }
-
if (nextNodeIsAcceptable)
{
filtered.add(result);
diff --git a/source/java/org/alfresco/repo/blog/cannedqueries/DraftsAndPublishedBlogPostsCannedQueryFactory.java b/source/java/org/alfresco/repo/blog/cannedqueries/DraftsAndPublishedBlogPostsCannedQueryFactory.java
index 87589ea0b5..ecf904a1aa 100644
--- a/source/java/org/alfresco/repo/blog/cannedqueries/DraftsAndPublishedBlogPostsCannedQueryFactory.java
+++ b/source/java/org/alfresco/repo/blog/cannedqueries/DraftsAndPublishedBlogPostsCannedQueryFactory.java
@@ -30,7 +30,6 @@ import org.alfresco.query.PagingRequest;
import org.alfresco.query.CannedQuerySortDetails.SortOrder;
import org.alfresco.repo.blog.BlogService.BlogPostInfo;
import org.alfresco.service.cmr.repository.NodeRef;
-import org.alfresco.service.cmr.tagging.TaggingService;
import org.alfresco.util.ParameterCheck;
/**
@@ -41,24 +40,17 @@ import org.alfresco.util.ParameterCheck;
*/
public class DraftsAndPublishedBlogPostsCannedQueryFactory extends AbstractBlogPostsCannedQueryFactory
{
- private TaggingService taggingService;
-
- public void setTaggingService(TaggingService taggingService)
- {
- this.taggingService = taggingService;
- }
-
@Override
public CannedQuery getCannedQuery(CannedQueryParameters parameters)
{
final DraftsAndPublishedBlogPostsCannedQuery cq = new DraftsAndPublishedBlogPostsCannedQuery(
- cannedQueryDAO, taggingService,
+ cannedQueryDAO,
methodSecurity,
parameters);
return (CannedQuery) cq;
}
- public CannedQuery getCannedQuery(NodeRef blogContainerNode, Date fromDate, Date toDate, String byUser, String tag, PagingRequest pagingReq)
+ public CannedQuery getCannedQuery(NodeRef blogContainerNode, Date fromDate, Date toDate, String byUser, PagingRequest pagingReq)
{
ParameterCheck.mandatory("blogContainerNode", blogContainerNode);
ParameterCheck.mandatory("pagingReq", pagingReq);
@@ -72,7 +64,7 @@ public class DraftsAndPublishedBlogPostsCannedQueryFactory extends AbstractBlogP
getQNameId(ContentModel.PROP_PUBLISHED),
getQNameId(ContentModel.TYPE_CONTENT),
byUser,
- fromDate, toDate, tag);
+ fromDate, toDate);
CannedQueryPageDetails cqpd = createCQPageDetails(pagingReq);
CannedQuerySortDetails cqsd = createCQSortDetails(ContentModel.PROP_PUBLISHED, SortOrder.DESCENDING);
diff --git a/source/java/org/alfresco/repo/blog/cannedqueries/DraftsAndPublishedBlogPostsCannedQueryParams.java b/source/java/org/alfresco/repo/blog/cannedqueries/DraftsAndPublishedBlogPostsCannedQueryParams.java
index 1088c30660..0f24a0e230 100644
--- a/source/java/org/alfresco/repo/blog/cannedqueries/DraftsAndPublishedBlogPostsCannedQueryParams.java
+++ b/source/java/org/alfresco/repo/blog/cannedqueries/DraftsAndPublishedBlogPostsCannedQueryParams.java
@@ -31,7 +31,6 @@ public class DraftsAndPublishedBlogPostsCannedQueryParams extends BlogEntity
private final String cmCreator;
private final Date createdFromDate;
private final Date createdToDate;
- private final String tag;
public DraftsAndPublishedBlogPostsCannedQueryParams(Long blogContainerNodeId,
Long nameQNameId,
@@ -39,15 +38,13 @@ public class DraftsAndPublishedBlogPostsCannedQueryParams extends BlogEntity
Long contentTypeQNameId,
String cmCreator,
Date createdFromDate,
- Date createdToDate,
- String tag)
+ Date createdToDate)
{
super(blogContainerNodeId, nameQNameId, publishedQNameId, contentTypeQNameId, null, null);
this.cmCreator = cmCreator;
this.createdFromDate = createdFromDate;
this.createdToDate = createdToDate;
- this.tag = tag;
}
public String getCmCreator()
@@ -64,9 +61,4 @@ public class DraftsAndPublishedBlogPostsCannedQueryParams extends BlogEntity
{
return createdToDate;
}
-
- public String getTag()
- {
- return tag;
- }
}
diff --git a/source/java/org/alfresco/service/ServiceRegistry.java b/source/java/org/alfresco/service/ServiceRegistry.java
index 77cfad5749..4f1029a907 100644
--- a/source/java/org/alfresco/service/ServiceRegistry.java
+++ b/source/java/org/alfresco/service/ServiceRegistry.java
@@ -137,7 +137,7 @@ public interface ServiceRegistry
static final QName RENDITION_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "RenditionService");
static final QName RATING_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "RatingService");
static final QName REPO_ADMIN_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "RepoAdminService");
- static final QName NODE_LOCATOR_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "NodeLocatorService");
+ static final QName NODE_LOCATOR_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "nodeLocatorService");
// WCM / AVM
static final QName AVM_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "AVMService");