mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Consolidating usage patterns around CannedQuery
- Removed executionID from AbstractCannedQuery constructors - Removed authenticationToken from CannedQueryParameters and applyPostQueryPermissions - Created common MethodSecurityBean to abstract permission checks - Pushed security definitions into public-services-security-context.xml (except blog-context.xml) - BlogServiceImpl now just returns the results of the CQ - CopyService CQ start - JIRAs - ALF-7167: RINF 11: Canned queries - ALF-9322: RINF 11: Remove AbstractCannedQueryPermissions - ALF-8969, ALF-8806, ALF-9033, ALF-8805 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@28680 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -1,323 +1,253 @@
|
||||
/*
|
||||
* Copyright (C) 2005-2011 Alfresco Software Limited.
|
||||
*
|
||||
* This file is part of Alfresco
|
||||
*
|
||||
* Alfresco 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 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco 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 Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.alfresco.repo.blog;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.query.CannedQueryFactory;
|
||||
import org.alfresco.query.CannedQueryResults;
|
||||
import org.alfresco.query.PagingRequest;
|
||||
import org.alfresco.query.PagingResults;
|
||||
import org.alfresco.repo.blog.cannedqueries.DraftsAndPublishedBlogPostsCannedQuery;
|
||||
import org.alfresco.repo.blog.cannedqueries.DraftsAndPublishedBlogPostsCannedQueryFactory;
|
||||
import org.alfresco.repo.blog.cannedqueries.GetBlogPostsCannedQuery;
|
||||
import org.alfresco.repo.blog.cannedqueries.GetBlogPostsCannedQueryFactory;
|
||||
import org.alfresco.repo.content.MimetypeMap;
|
||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||
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.security.PermissionService;
|
||||
import org.alfresco.service.cmr.tagging.TaggingService;
|
||||
import org.alfresco.service.namespace.NamespaceService;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.alfresco.util.Pair;
|
||||
import org.alfresco.util.ParameterCheck;
|
||||
import org.alfresco.util.registry.NamedObjectRegistry;
|
||||
|
||||
/**
|
||||
* @author Neil Mc Erlean (based on existing webscript controllers in the REST API)
|
||||
* @since 4.0
|
||||
*/
|
||||
public class BlogServiceImpl implements BlogService
|
||||
{
|
||||
/**
|
||||
* For backwards compatibility with pre-Swift, we are asking the query to give us an accurate total count of how many
|
||||
* blog-post nodes there are. This may need to change in the future - certainly if the current 'brute force' query
|
||||
* is replaced by a database query.
|
||||
*/
|
||||
private static final int MAX_QUERY_ENTRY_COUNT = 10000;
|
||||
|
||||
// Injected services
|
||||
private NamedObjectRegistry<CannedQueryFactory<BlogPostInfo>> cannedQueryRegistry;
|
||||
private GetBlogPostsCannedQueryFactory draftPostsCannedQueryFactory;
|
||||
private GetBlogPostsCannedQueryFactory publishedPostsCannedQueryFactory;
|
||||
private GetBlogPostsCannedQueryFactory publishedExternallyPostsCannedQueryFactory;
|
||||
|
||||
private DraftsAndPublishedBlogPostsCannedQueryFactory draftsAndPublishedBlogPostsCannedQueryFactory;
|
||||
|
||||
private ContentService contentService;
|
||||
private NodeService nodeService;
|
||||
private PermissionService permissionService;
|
||||
private TaggingService taggingService;
|
||||
|
||||
public void setCannedQueryRegistry(NamedObjectRegistry<CannedQueryFactory<BlogPostInfo>> cannedQueryRegistry)
|
||||
{
|
||||
this.cannedQueryRegistry = cannedQueryRegistry;
|
||||
}
|
||||
|
||||
public void setDraftBlogPostsCannedQueryFactory(GetBlogPostsCannedQueryFactory cannedQueryFactory)
|
||||
{
|
||||
this.draftPostsCannedQueryFactory = cannedQueryFactory;
|
||||
}
|
||||
|
||||
public void setPublishedBlogPostsCannedQueryFactory(GetBlogPostsCannedQueryFactory cannedQueryFactory)
|
||||
{
|
||||
this.publishedPostsCannedQueryFactory = cannedQueryFactory;
|
||||
}
|
||||
|
||||
public void setPublishedExternallyBlogPostsCannedQueryFactory(GetBlogPostsCannedQueryFactory cannedQueryFactory)
|
||||
{
|
||||
this.publishedExternallyPostsCannedQueryFactory = cannedQueryFactory;
|
||||
}
|
||||
|
||||
public void setDraftsAndPublishedBlogPostsCannedQueryFactory(DraftsAndPublishedBlogPostsCannedQueryFactory cannedQueryFactory)
|
||||
{
|
||||
this.draftsAndPublishedBlogPostsCannedQueryFactory = cannedQueryFactory;
|
||||
}
|
||||
|
||||
public void setContentService(ContentService contentService)
|
||||
{
|
||||
this.contentService = contentService;
|
||||
}
|
||||
|
||||
public void setNodeService(NodeService nodeService)
|
||||
{
|
||||
this.nodeService = nodeService;
|
||||
}
|
||||
|
||||
public void setPermissionService(PermissionService permissionService)
|
||||
{
|
||||
this.permissionService = permissionService;
|
||||
}
|
||||
|
||||
public void setTaggingService(TaggingService taggingService)
|
||||
{
|
||||
this.taggingService = taggingService;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.alfresco.repo.blog.BlogService#isDraftBlogPost(org.alfresco.service.cmr.repository.NodeRef)
|
||||
*/
|
||||
@Override
|
||||
public boolean isDraftBlogPost(NodeRef blogPostNode)
|
||||
{
|
||||
return nodeService.getProperty(blogPostNode, ContentModel.PROP_PUBLISHED) == null;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.alfresco.repo.blog.BlogService#createBlogPost(org.alfresco.service.cmr.repository.NodeRef, java.lang.String, java.lang.String, java.util.List, boolean)
|
||||
*/
|
||||
@Override
|
||||
public ChildAssociationRef createBlogPost(NodeRef blogContainerNode, String blogTitle,
|
||||
String blogContent, boolean isDraft)
|
||||
{
|
||||
String nodeName = getUniqueChildName(blogContainerNode, "post");
|
||||
|
||||
// we simply create a new file inside the blog folder
|
||||
Map<QName, Serializable> nodeProps = new HashMap<QName, Serializable>();
|
||||
nodeProps.put(ContentModel.PROP_NAME, nodeName);
|
||||
nodeProps.put(ContentModel.PROP_TITLE, blogTitle);
|
||||
QName assocName = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, nodeName);
|
||||
ChildAssociationRef postNode = nodeService.createNode(blogContainerNode, ContentModel.ASSOC_CONTAINS, assocName,
|
||||
ContentModel.TYPE_CONTENT, nodeProps);
|
||||
|
||||
ContentWriter writer = contentService.getWriter(postNode.getChildRef(), ContentModel.PROP_CONTENT, true);
|
||||
|
||||
// Blog posts are always HTML (based on the JavaScript this class replaces.)
|
||||
writer.setMimetype(MimetypeMap.MIMETYPE_HTML);
|
||||
writer.setEncoding("UTF-8");
|
||||
writer.putContent(blogContent);
|
||||
|
||||
if (isDraft)
|
||||
{
|
||||
// Comment from the old JavaScript:
|
||||
// disable permission inheritance. The result is that only the creator will have access to the draft
|
||||
permissionService.setInheritParentPermissions(postNode.getChildRef(), false);
|
||||
}
|
||||
else
|
||||
{
|
||||
setOrUpdateReleasedAndUpdatedDates(postNode.getChildRef());
|
||||
}
|
||||
|
||||
return postNode;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.alfresco.repo.blog.BlogService#getMyDrafts(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.query.PagingRequest)
|
||||
*/
|
||||
@Override
|
||||
public PagingResults<BlogPostInfo> getDrafts(NodeRef blogContainerNode, String username, PagingRequest pagingReq)
|
||||
{
|
||||
ParameterCheck.mandatory("blogContainerNode", blogContainerNode);
|
||||
ParameterCheck.mandatory("pagingReq", pagingReq);
|
||||
|
||||
// get canned query
|
||||
pagingReq.setRequestTotalCountMax(MAX_QUERY_ENTRY_COUNT);
|
||||
GetBlogPostsCannedQuery cq = (GetBlogPostsCannedQuery)draftPostsCannedQueryFactory.getGetDraftsCannedQuery(blogContainerNode, username, pagingReq);
|
||||
|
||||
// execute canned query
|
||||
CannedQueryResults<BlogPostInfo> results = cq.execute();
|
||||
|
||||
return createPagedResults(pagingReq, results);
|
||||
}
|
||||
|
||||
/**
|
||||
* This method creates a paged result set based on the supplied {@link PagingRequest} and {@link CannedQueryResults}.
|
||||
*/
|
||||
private PagingResults<BlogPostInfo> createPagedResults(PagingRequest pagingReq, final CannedQueryResults<BlogPostInfo> results)
|
||||
{
|
||||
return new PagingResults<BlogPostInfo>()
|
||||
{
|
||||
@Override
|
||||
public String getQueryExecutionId()
|
||||
{
|
||||
return results.getQueryExecutionId();
|
||||
}
|
||||
@Override
|
||||
public List<BlogPostInfo> getPage()
|
||||
{
|
||||
return results.getPage();
|
||||
}
|
||||
@Override
|
||||
public boolean hasMoreItems()
|
||||
{
|
||||
return results.hasMoreItems();
|
||||
}
|
||||
@Override
|
||||
public Pair<Integer, Integer> getTotalResultCount()
|
||||
{
|
||||
return results.getTotalResultCount();
|
||||
}
|
||||
@Override
|
||||
public boolean permissionsApplied()
|
||||
{
|
||||
return results.permissionsApplied();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.alfresco.repo.blog.BlogService#getPublishedExternally(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.query.PagingRequest)
|
||||
*/
|
||||
@Override
|
||||
public PagingResults<BlogPostInfo> getPublishedExternally(NodeRef blogContainerNode, PagingRequest pagingReq)
|
||||
{
|
||||
ParameterCheck.mandatory("blogContainerNode", blogContainerNode);
|
||||
ParameterCheck.mandatory("pagingReq", pagingReq);
|
||||
|
||||
// get canned query
|
||||
pagingReq.setRequestTotalCountMax(MAX_QUERY_ENTRY_COUNT);
|
||||
GetBlogPostsCannedQuery cq = (GetBlogPostsCannedQuery)publishedExternallyPostsCannedQueryFactory.getGetPublishedExternallyCannedQuery(blogContainerNode, pagingReq);
|
||||
|
||||
// execute canned query
|
||||
CannedQueryResults<BlogPostInfo> results = cq.execute();
|
||||
|
||||
return createPagedResults(pagingReq, results);
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.alfresco.repo.blog.BlogService#getPublished(org.alfresco.service.cmr.repository.NodeRef, java.util.Date, java.util.Date, java.lang.String, org.alfresco.query.PagingRequest)
|
||||
*/
|
||||
@Override
|
||||
public PagingResults<BlogPostInfo> getPublished(NodeRef blogContainerNode, Date fromDate, Date toDate, String byUser, PagingRequest pagingReq)
|
||||
{
|
||||
ParameterCheck.mandatory("blogContainerNode", blogContainerNode);
|
||||
ParameterCheck.mandatory("pagingReq", pagingReq);
|
||||
|
||||
// get canned query
|
||||
pagingReq.setRequestTotalCountMax(MAX_QUERY_ENTRY_COUNT);
|
||||
GetBlogPostsCannedQuery cq = (GetBlogPostsCannedQuery)publishedPostsCannedQueryFactory.getGetPublishedCannedQuery(blogContainerNode, fromDate, toDate, byUser, pagingReq);
|
||||
|
||||
// execute canned query
|
||||
CannedQueryResults<BlogPostInfo> results = cq.execute();
|
||||
|
||||
return createPagedResults(pagingReq, results);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
@Override
|
||||
public PagingResults<BlogPostInfo> getMyDraftsAndAllPublished(NodeRef blogContainerNode, Date createdFrom, Date createdTo, String tag, PagingRequest pagingReq)
|
||||
{
|
||||
ParameterCheck.mandatory("blogContainerNode", blogContainerNode);
|
||||
ParameterCheck.mandatory("pagingReq", pagingReq);
|
||||
|
||||
// get canned query
|
||||
pagingReq.setRequestTotalCountMax(MAX_QUERY_ENTRY_COUNT);
|
||||
String currentUser = AuthenticationUtil.getFullyAuthenticatedUser();
|
||||
DraftsAndPublishedBlogPostsCannedQuery cq = (DraftsAndPublishedBlogPostsCannedQuery)draftsAndPublishedBlogPostsCannedQueryFactory.getCannedQuery(blogContainerNode, createdFrom, createdTo, currentUser, tag, pagingReq);
|
||||
|
||||
// execute canned query
|
||||
CannedQueryResults<BlogPostInfo> results = cq.execute();
|
||||
|
||||
return createPagedResults(pagingReq, results);
|
||||
}
|
||||
|
||||
|
||||
private String getUniqueChildName(NodeRef parentNode, String prefix)
|
||||
{
|
||||
return prefix + "-" + System.currentTimeMillis();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This method is taken from the previous JavaScript webscript controllers.
|
||||
* @param blogPostNode
|
||||
*/
|
||||
private void setOrUpdateReleasedAndUpdatedDates(NodeRef blogPostNode)
|
||||
{
|
||||
// make sure the syndication aspect has been added
|
||||
if (!nodeService.hasAspect(blogPostNode, ContentModel.ASPECT_SYNDICATION))
|
||||
{
|
||||
nodeService.addAspect(blogPostNode, ContentModel.ASPECT_SYNDICATION, null);
|
||||
}
|
||||
|
||||
// (re-)enable permission inheritance which got disable for draft posts
|
||||
// only set if was previously draft - as only the owner/admin can do this
|
||||
if (!permissionService.getInheritParentPermissions(blogPostNode))
|
||||
{
|
||||
permissionService.setInheritParentPermissions(blogPostNode, true);
|
||||
}
|
||||
|
||||
// check whether the published date has been set
|
||||
if (nodeService.getProperty(blogPostNode, ContentModel.PROP_PUBLISHED) == null)
|
||||
{
|
||||
nodeService.setProperty(blogPostNode, ContentModel.PROP_PUBLISHED, new Date());
|
||||
}
|
||||
else
|
||||
{
|
||||
// set/update the updated date
|
||||
nodeService.setProperty(blogPostNode, ContentModel.PROP_UPDATED, new Date());
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Copyright (C) 2005-2011 Alfresco Software Limited.
|
||||
*
|
||||
* This file is part of Alfresco
|
||||
*
|
||||
* Alfresco 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 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco 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 Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.alfresco.repo.blog;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.query.CannedQueryFactory;
|
||||
import org.alfresco.query.CannedQueryResults;
|
||||
import org.alfresco.query.PagingRequest;
|
||||
import org.alfresco.query.PagingResults;
|
||||
import org.alfresco.repo.blog.cannedqueries.DraftsAndPublishedBlogPostsCannedQuery;
|
||||
import org.alfresco.repo.blog.cannedqueries.DraftsAndPublishedBlogPostsCannedQueryFactory;
|
||||
import org.alfresco.repo.blog.cannedqueries.GetBlogPostsCannedQuery;
|
||||
import org.alfresco.repo.blog.cannedqueries.GetBlogPostsCannedQueryFactory;
|
||||
import org.alfresco.repo.content.MimetypeMap;
|
||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||
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.security.PermissionService;
|
||||
import org.alfresco.service.namespace.NamespaceService;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.alfresco.util.ParameterCheck;
|
||||
import org.alfresco.util.registry.NamedObjectRegistry;
|
||||
|
||||
/**
|
||||
* @author Neil Mc Erlean (based on existing webscript controllers in the REST API)
|
||||
* @since 4.0
|
||||
*/
|
||||
public class BlogServiceImpl implements BlogService
|
||||
{
|
||||
/**
|
||||
* For backwards compatibility with pre-Swift, we are asking the query to give us an accurate total count of how many
|
||||
* blog-post nodes there are. This may need to change in the future - certainly if the current 'brute force' query
|
||||
* is replaced by a database query.
|
||||
*/
|
||||
private static final int MAX_QUERY_ENTRY_COUNT = 10000;
|
||||
|
||||
// Injected services
|
||||
private NamedObjectRegistry<CannedQueryFactory<BlogPostInfo>> cannedQueryRegistry;
|
||||
private GetBlogPostsCannedQueryFactory draftPostsCannedQueryFactory;
|
||||
private GetBlogPostsCannedQueryFactory publishedPostsCannedQueryFactory;
|
||||
private GetBlogPostsCannedQueryFactory publishedExternallyPostsCannedQueryFactory;
|
||||
|
||||
private DraftsAndPublishedBlogPostsCannedQueryFactory draftsAndPublishedBlogPostsCannedQueryFactory;
|
||||
|
||||
private ContentService contentService;
|
||||
private NodeService nodeService;
|
||||
private PermissionService permissionService;
|
||||
|
||||
public void setCannedQueryRegistry(NamedObjectRegistry<CannedQueryFactory<BlogPostInfo>> cannedQueryRegistry)
|
||||
{
|
||||
this.cannedQueryRegistry = cannedQueryRegistry;
|
||||
}
|
||||
|
||||
public void setDraftBlogPostsCannedQueryFactory(GetBlogPostsCannedQueryFactory cannedQueryFactory)
|
||||
{
|
||||
this.draftPostsCannedQueryFactory = cannedQueryFactory;
|
||||
}
|
||||
|
||||
public void setPublishedBlogPostsCannedQueryFactory(GetBlogPostsCannedQueryFactory cannedQueryFactory)
|
||||
{
|
||||
this.publishedPostsCannedQueryFactory = cannedQueryFactory;
|
||||
}
|
||||
|
||||
public void setPublishedExternallyBlogPostsCannedQueryFactory(GetBlogPostsCannedQueryFactory cannedQueryFactory)
|
||||
{
|
||||
this.publishedExternallyPostsCannedQueryFactory = cannedQueryFactory;
|
||||
}
|
||||
|
||||
public void setDraftsAndPublishedBlogPostsCannedQueryFactory(DraftsAndPublishedBlogPostsCannedQueryFactory cannedQueryFactory)
|
||||
{
|
||||
this.draftsAndPublishedBlogPostsCannedQueryFactory = cannedQueryFactory;
|
||||
}
|
||||
|
||||
public void setContentService(ContentService contentService)
|
||||
{
|
||||
this.contentService = contentService;
|
||||
}
|
||||
|
||||
public void setNodeService(NodeService nodeService)
|
||||
{
|
||||
this.nodeService = nodeService;
|
||||
}
|
||||
|
||||
public void setPermissionService(PermissionService permissionService)
|
||||
{
|
||||
this.permissionService = permissionService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDraftBlogPost(NodeRef blogPostNode)
|
||||
{
|
||||
return nodeService.getProperty(blogPostNode, ContentModel.PROP_PUBLISHED) == null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChildAssociationRef createBlogPost(NodeRef blogContainerNode, String blogTitle,
|
||||
String blogContent, boolean isDraft)
|
||||
{
|
||||
String nodeName = getUniqueChildName(blogContainerNode, "post");
|
||||
|
||||
// we simply create a new file inside the blog folder
|
||||
Map<QName, Serializable> nodeProps = new HashMap<QName, Serializable>();
|
||||
nodeProps.put(ContentModel.PROP_NAME, nodeName);
|
||||
nodeProps.put(ContentModel.PROP_TITLE, blogTitle);
|
||||
QName assocName = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, nodeName);
|
||||
ChildAssociationRef postNode = nodeService.createNode(blogContainerNode, ContentModel.ASSOC_CONTAINS, assocName,
|
||||
ContentModel.TYPE_CONTENT, nodeProps);
|
||||
|
||||
ContentWriter writer = contentService.getWriter(postNode.getChildRef(), ContentModel.PROP_CONTENT, true);
|
||||
|
||||
// Blog posts are always HTML (based on the JavaScript this class replaces.)
|
||||
writer.setMimetype(MimetypeMap.MIMETYPE_HTML);
|
||||
writer.setEncoding("UTF-8");
|
||||
writer.putContent(blogContent);
|
||||
|
||||
if (isDraft)
|
||||
{
|
||||
// Comment from the old JavaScript:
|
||||
// disable permission inheritance. The result is that only the creator will have access to the draft
|
||||
permissionService.setInheritParentPermissions(postNode.getChildRef(), false);
|
||||
}
|
||||
else
|
||||
{
|
||||
setOrUpdateReleasedAndUpdatedDates(postNode.getChildRef());
|
||||
}
|
||||
|
||||
return postNode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PagingResults<BlogPostInfo> getDrafts(NodeRef blogContainerNode, String username, PagingRequest pagingReq)
|
||||
{
|
||||
ParameterCheck.mandatory("blogContainerNode", blogContainerNode);
|
||||
ParameterCheck.mandatory("pagingReq", pagingReq);
|
||||
|
||||
// get canned query
|
||||
pagingReq.setRequestTotalCountMax(MAX_QUERY_ENTRY_COUNT);
|
||||
GetBlogPostsCannedQuery cq = (GetBlogPostsCannedQuery)draftPostsCannedQueryFactory.getGetDraftsCannedQuery(blogContainerNode, username, pagingReq);
|
||||
|
||||
// execute canned query
|
||||
CannedQueryResults<BlogPostInfo> results = cq.execute();
|
||||
return results;
|
||||
}
|
||||
@Override
|
||||
public PagingResults<BlogPostInfo> getPublishedExternally(NodeRef blogContainerNode, PagingRequest pagingReq)
|
||||
{
|
||||
ParameterCheck.mandatory("blogContainerNode", blogContainerNode);
|
||||
ParameterCheck.mandatory("pagingReq", pagingReq);
|
||||
|
||||
// get canned query
|
||||
pagingReq.setRequestTotalCountMax(MAX_QUERY_ENTRY_COUNT);
|
||||
GetBlogPostsCannedQuery cq = (GetBlogPostsCannedQuery)publishedExternallyPostsCannedQueryFactory.getGetPublishedExternallyCannedQuery(blogContainerNode, pagingReq);
|
||||
|
||||
// execute canned query
|
||||
CannedQueryResults<BlogPostInfo> results = cq.execute();
|
||||
return results;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PagingResults<BlogPostInfo> getPublished(NodeRef blogContainerNode, Date fromDate, Date toDate, String byUser, PagingRequest pagingReq)
|
||||
{
|
||||
ParameterCheck.mandatory("blogContainerNode", blogContainerNode);
|
||||
ParameterCheck.mandatory("pagingReq", pagingReq);
|
||||
|
||||
// get canned query
|
||||
pagingReq.setRequestTotalCountMax(MAX_QUERY_ENTRY_COUNT);
|
||||
GetBlogPostsCannedQuery cq = (GetBlogPostsCannedQuery)publishedPostsCannedQueryFactory.getGetPublishedCannedQuery(blogContainerNode, fromDate, toDate, byUser, pagingReq);
|
||||
|
||||
// execute canned query
|
||||
CannedQueryResults<BlogPostInfo> results = cq.execute();
|
||||
return results;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
@Override
|
||||
public PagingResults<BlogPostInfo> getMyDraftsAndAllPublished(NodeRef blogContainerNode, Date createdFrom, Date createdTo, String tag, PagingRequest pagingReq)
|
||||
{
|
||||
ParameterCheck.mandatory("blogContainerNode", blogContainerNode);
|
||||
ParameterCheck.mandatory("pagingReq", pagingReq);
|
||||
|
||||
// get canned query
|
||||
pagingReq.setRequestTotalCountMax(MAX_QUERY_ENTRY_COUNT);
|
||||
String currentUser = AuthenticationUtil.getFullyAuthenticatedUser();
|
||||
DraftsAndPublishedBlogPostsCannedQuery cq = (DraftsAndPublishedBlogPostsCannedQuery)draftsAndPublishedBlogPostsCannedQueryFactory.getCannedQuery(blogContainerNode, createdFrom, createdTo, currentUser, tag, pagingReq);
|
||||
|
||||
// execute canned query
|
||||
CannedQueryResults<BlogPostInfo> results = cq.execute();
|
||||
return results;
|
||||
}
|
||||
|
||||
private String getUniqueChildName(NodeRef parentNode, String prefix)
|
||||
{
|
||||
return prefix + "-" + System.currentTimeMillis();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This method is taken from the previous JavaScript webscript controllers.
|
||||
*/
|
||||
private void setOrUpdateReleasedAndUpdatedDates(NodeRef blogPostNode)
|
||||
{
|
||||
// make sure the syndication aspect has been added
|
||||
if (!nodeService.hasAspect(blogPostNode, ContentModel.ASPECT_SYNDICATION))
|
||||
{
|
||||
nodeService.addAspect(blogPostNode, ContentModel.ASPECT_SYNDICATION, null);
|
||||
}
|
||||
|
||||
// (re-)enable permission inheritance which got disable for draft posts
|
||||
// only set if was previously draft - as only the owner/admin can do
|
||||
// this
|
||||
if (!permissionService.getInheritParentPermissions(blogPostNode))
|
||||
{
|
||||
permissionService.setInheritParentPermissions(blogPostNode, true);
|
||||
}
|
||||
|
||||
// check whether the published date has been set
|
||||
if (nodeService.getProperty(blogPostNode, ContentModel.PROP_PUBLISHED) == null)
|
||||
{
|
||||
nodeService.setProperty(blogPostNode, ContentModel.PROP_PUBLISHED, new Date());
|
||||
}
|
||||
else
|
||||
{
|
||||
// set/update the updated date
|
||||
nodeService.setProperty(blogPostNode, ContentModel.PROP_UPDATED, new Date());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -32,7 +32,7 @@ import org.alfresco.query.CannedQuerySortDetails.SortOrder;
|
||||
import org.alfresco.repo.blog.BlogService;
|
||||
import org.alfresco.repo.blog.BlogService.BlogPostInfo;
|
||||
import org.alfresco.repo.security.permissions.impl.acegi.AbstractCannedQueryPermissions;
|
||||
import org.alfresco.repo.security.permissions.impl.acegi.MethodSecurityInterceptor;
|
||||
import org.alfresco.repo.security.permissions.impl.acegi.MethodSecurityBean;
|
||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.NodeService;
|
||||
@@ -56,13 +56,10 @@ public class DraftsAndPublishedBlogPostsCannedQuery extends AbstractCannedQueryP
|
||||
public DraftsAndPublishedBlogPostsCannedQuery(
|
||||
NodeService rawNodeService,
|
||||
TaggingService taggingService,
|
||||
MethodSecurityInterceptor methodSecurityInterceptor,
|
||||
Object methodService,
|
||||
String methodName,
|
||||
CannedQueryParameters params,
|
||||
String queryExecutionId)
|
||||
MethodSecurityBean<BlogPostInfo> methodSecurity,
|
||||
CannedQueryParameters params)
|
||||
{
|
||||
super(params, queryExecutionId, methodSecurityInterceptor, methodService, methodName);
|
||||
super(params, methodSecurity);
|
||||
this.rawNodeService = rawNodeService;
|
||||
this.taggingService = taggingService;
|
||||
}
|
||||
|
@@ -29,11 +29,10 @@ import org.alfresco.query.CannedQueryFactory;
|
||||
import org.alfresco.query.CannedQueryPageDetails;
|
||||
import org.alfresco.query.CannedQueryParameters;
|
||||
import org.alfresco.query.CannedQuerySortDetails;
|
||||
import org.alfresco.query.PagingRequest;
|
||||
import org.alfresco.query.CannedQuerySortDetails.SortOrder;
|
||||
import org.alfresco.query.PagingRequest;
|
||||
import org.alfresco.repo.blog.BlogService.BlogPostInfo;
|
||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||
import org.alfresco.repo.security.permissions.impl.acegi.MethodSecurityInterceptor;
|
||||
import org.alfresco.repo.security.permissions.impl.acegi.MethodSecurityBean;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.NodeService;
|
||||
import org.alfresco.service.cmr.tagging.TaggingService;
|
||||
@@ -53,12 +52,15 @@ import org.alfresco.util.PropertyCheck;
|
||||
*/
|
||||
public class DraftsAndPublishedBlogPostsCannedQueryFactory extends AbstractCannedQueryFactory<BlogPostInfo>
|
||||
{
|
||||
private MethodSecurityInterceptor methodSecurityInterceptor;
|
||||
private String methodName;
|
||||
private Object methodService;
|
||||
private MethodSecurityBean<BlogPostInfo> methodSecurity;
|
||||
private NodeService rawNodeService;
|
||||
private TaggingService taggingService;
|
||||
|
||||
public void setMethodSecurity(MethodSecurityBean<BlogPostInfo> methodSecurity)
|
||||
{
|
||||
this.methodSecurity = methodSecurity;
|
||||
}
|
||||
|
||||
public void setRawNodeService(NodeService nodeService)
|
||||
{
|
||||
this.rawNodeService = nodeService;
|
||||
@@ -69,30 +71,13 @@ public class DraftsAndPublishedBlogPostsCannedQueryFactory extends AbstractCanne
|
||||
this.taggingService = taggingService;
|
||||
}
|
||||
|
||||
public void setMethodSecurityInterceptor(MethodSecurityInterceptor methodSecurityInterceptor)
|
||||
{
|
||||
this.methodSecurityInterceptor = methodSecurityInterceptor;
|
||||
}
|
||||
|
||||
public void setMethodName(String methodName)
|
||||
{
|
||||
this.methodName = methodName;
|
||||
}
|
||||
|
||||
public void setMethodService(Object methodService)
|
||||
{
|
||||
this.methodService = methodService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CannedQuery<BlogPostInfo> getCannedQuery(CannedQueryParameters parameters)
|
||||
{
|
||||
// if not passed in (TODO or not in future cache) then generate a new query execution id
|
||||
String queryExecutionId = (parameters.getQueryExecutionId() == null ? super.getQueryExecutionId(parameters) : parameters.getQueryExecutionId());
|
||||
|
||||
final DraftsAndPublishedBlogPostsCannedQuery cq = new DraftsAndPublishedBlogPostsCannedQuery(rawNodeService, taggingService,
|
||||
methodSecurityInterceptor, methodService, methodName,
|
||||
parameters, queryExecutionId);
|
||||
final DraftsAndPublishedBlogPostsCannedQuery cq = new DraftsAndPublishedBlogPostsCannedQuery(
|
||||
rawNodeService, taggingService,
|
||||
methodSecurity,
|
||||
parameters);
|
||||
return (CannedQuery<BlogPostInfo>) cq;
|
||||
}
|
||||
|
||||
@@ -112,7 +97,7 @@ public class DraftsAndPublishedBlogPostsCannedQueryFactory extends AbstractCanne
|
||||
CannedQuerySortDetails cqsd = createCQSortDetails(ContentModel.PROP_PUBLISHED, SortOrder.DESCENDING);
|
||||
|
||||
// create query params holder
|
||||
CannedQueryParameters params = new CannedQueryParameters(paramBean, cqpd, cqsd, AuthenticationUtil.getRunAsUser(), requestTotalCountMax, pagingReq.getQueryExecutionId());
|
||||
CannedQueryParameters params = new CannedQueryParameters(paramBean, cqpd, cqsd, requestTotalCountMax, pagingReq.getQueryExecutionId());
|
||||
|
||||
// return canned query instance
|
||||
return getCannedQuery(params);
|
||||
@@ -142,7 +127,7 @@ public class DraftsAndPublishedBlogPostsCannedQueryFactory extends AbstractCanne
|
||||
}
|
||||
|
||||
// page details
|
||||
CannedQueryPageDetails cqpd = new CannedQueryPageDetails(skipCount, maxItems, CannedQueryPageDetails.DEFAULT_PAGE_NUMBER, CannedQueryPageDetails.DEFAULT_PAGE_COUNT);
|
||||
CannedQueryPageDetails cqpd = new CannedQueryPageDetails(skipCount, maxItems);
|
||||
return cqpd;
|
||||
}
|
||||
|
||||
@@ -151,8 +136,6 @@ public class DraftsAndPublishedBlogPostsCannedQueryFactory extends AbstractCanne
|
||||
{
|
||||
super.afterPropertiesSet();
|
||||
|
||||
PropertyCheck.mandatory(this, "methodSecurityInterceptor", methodSecurityInterceptor);
|
||||
PropertyCheck.mandatory(this, "methodService", methodService);
|
||||
PropertyCheck.mandatory(this, "methodName", methodName);
|
||||
PropertyCheck.mandatory(this, "methodSecurity", methodSecurity);
|
||||
}
|
||||
}
|
||||
|
@@ -32,7 +32,7 @@ import org.alfresco.query.CannedQuerySortDetails.SortOrder;
|
||||
import org.alfresco.repo.blog.BlogService;
|
||||
import org.alfresco.repo.blog.BlogService.BlogPostInfo;
|
||||
import org.alfresco.repo.security.permissions.impl.acegi.AbstractCannedQueryPermissions;
|
||||
import org.alfresco.repo.security.permissions.impl.acegi.MethodSecurityInterceptor;
|
||||
import org.alfresco.repo.security.permissions.impl.acegi.MethodSecurityBean;
|
||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.NodeService;
|
||||
@@ -55,13 +55,10 @@ public class GetBlogPostsCannedQuery extends AbstractCannedQueryPermissions<Blog
|
||||
|
||||
public GetBlogPostsCannedQuery(
|
||||
NodeService rawNodeService,
|
||||
MethodSecurityInterceptor methodSecurityInterceptor,
|
||||
Object methodService,
|
||||
String methodName,
|
||||
CannedQueryParameters params,
|
||||
String queryExecutionId)
|
||||
MethodSecurityBean<BlogPostInfo> methodSecurity,
|
||||
CannedQueryParameters params)
|
||||
{
|
||||
super(params, queryExecutionId, methodSecurityInterceptor, methodService, methodName);
|
||||
super(params, methodSecurity);
|
||||
this.rawNodeService = rawNodeService;
|
||||
}
|
||||
|
||||
|
@@ -31,12 +31,11 @@ import org.alfresco.query.CannedQueryFactory;
|
||||
import org.alfresco.query.CannedQueryPageDetails;
|
||||
import org.alfresco.query.CannedQueryParameters;
|
||||
import org.alfresco.query.CannedQuerySortDetails;
|
||||
import org.alfresco.query.PagingRequest;
|
||||
import org.alfresco.query.CannedQuerySortDetails.SortOrder;
|
||||
import org.alfresco.query.PagingRequest;
|
||||
import org.alfresco.repo.blog.BlogService;
|
||||
import org.alfresco.repo.blog.BlogService.BlogPostInfo;
|
||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||
import org.alfresco.repo.security.permissions.impl.acegi.MethodSecurityInterceptor;
|
||||
import org.alfresco.repo.security.permissions.impl.acegi.MethodSecurityBean;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.NodeService;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
@@ -57,37 +56,23 @@ import org.alfresco.util.PropertyCheck;
|
||||
*/
|
||||
public class GetBlogPostsCannedQueryFactory extends AbstractCannedQueryFactory<BlogPostInfo>
|
||||
{
|
||||
private MethodSecurityInterceptor methodSecurityInterceptor;
|
||||
private String methodName;
|
||||
private Object methodService;
|
||||
private MethodSecurityBean<BlogPostInfo> methodSecurity;
|
||||
private NodeService rawNodeService;
|
||||
|
||||
public void setMethodSecurity(MethodSecurityBean<BlogPostInfo> methodSecurity)
|
||||
{
|
||||
this.methodSecurity = methodSecurity;
|
||||
}
|
||||
|
||||
public void setRawNodeService(NodeService nodeService)
|
||||
{
|
||||
this.rawNodeService = nodeService;
|
||||
}
|
||||
|
||||
public void setMethodSecurityInterceptor(MethodSecurityInterceptor methodSecurityInterceptor)
|
||||
{
|
||||
this.methodSecurityInterceptor = methodSecurityInterceptor;
|
||||
}
|
||||
|
||||
public void setMethodName(String methodName)
|
||||
{
|
||||
this.methodName = methodName;
|
||||
}
|
||||
|
||||
public void setMethodService(Object methodService)
|
||||
{
|
||||
this.methodService = methodService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CannedQuery<BlogPostInfo> getCannedQuery(CannedQueryParameters parameters)
|
||||
{
|
||||
String queryExecutionId = (parameters.getQueryExecutionId() == null ? super.getQueryExecutionId(parameters) : parameters.getQueryExecutionId());
|
||||
|
||||
final GetBlogPostsCannedQuery cq = new GetBlogPostsCannedQuery(rawNodeService, methodSecurityInterceptor, methodService, methodName, parameters, queryExecutionId);
|
||||
final GetBlogPostsCannedQuery cq = new GetBlogPostsCannedQuery(rawNodeService, methodSecurity, parameters);
|
||||
return (CannedQuery<BlogPostInfo>) cq;
|
||||
}
|
||||
|
||||
@@ -111,7 +96,7 @@ public class GetBlogPostsCannedQueryFactory extends AbstractCannedQueryFactory<B
|
||||
CannedQuerySortDetails cqsd = createCQSortDetails(ContentModel.PROP_CREATED, SortOrder.DESCENDING);
|
||||
|
||||
// create query params holder
|
||||
CannedQueryParameters params = new CannedQueryParameters(paramBean, cqpd, cqsd, AuthenticationUtil.getRunAsUser(), requestTotalCountMax, pagingReq.getQueryExecutionId());
|
||||
CannedQueryParameters params = new CannedQueryParameters(paramBean, cqpd, cqsd, requestTotalCountMax, pagingReq.getQueryExecutionId());
|
||||
|
||||
// return canned query instance
|
||||
return getCannedQuery(params);
|
||||
@@ -136,7 +121,7 @@ public class GetBlogPostsCannedQueryFactory extends AbstractCannedQueryFactory<B
|
||||
CannedQuerySortDetails cqsd = createCQSortDetails(BlogIntegrationModel.PROP_POSTED, SortOrder.DESCENDING);
|
||||
|
||||
// create query params holder
|
||||
CannedQueryParameters params = new CannedQueryParameters(paramBean, cqpd, cqsd, AuthenticationUtil.getRunAsUser(), requestTotalCountMax, pagingReq.getQueryExecutionId());
|
||||
CannedQueryParameters params = new CannedQueryParameters(paramBean, cqpd, cqsd, requestTotalCountMax, pagingReq.getQueryExecutionId());
|
||||
|
||||
// return canned query instance
|
||||
return getCannedQuery(params);
|
||||
@@ -161,7 +146,7 @@ public class GetBlogPostsCannedQueryFactory extends AbstractCannedQueryFactory<B
|
||||
CannedQuerySortDetails cqsd = createCQSortDetails(ContentModel.PROP_PUBLISHED, SortOrder.DESCENDING);
|
||||
|
||||
// create query params holder
|
||||
CannedQueryParameters params = new CannedQueryParameters(paramBean, cqpd, cqsd, AuthenticationUtil.getRunAsUser(), requestTotalCountMax, pagingReq.getQueryExecutionId());
|
||||
CannedQueryParameters params = new CannedQueryParameters(paramBean, cqpd, cqsd, requestTotalCountMax, pagingReq.getQueryExecutionId());
|
||||
|
||||
// return canned query instance
|
||||
return getCannedQuery(params);
|
||||
@@ -200,8 +185,6 @@ public class GetBlogPostsCannedQueryFactory extends AbstractCannedQueryFactory<B
|
||||
{
|
||||
super.afterPropertiesSet();
|
||||
|
||||
PropertyCheck.mandatory(this, "methodSecurityInterceptor", methodSecurityInterceptor);
|
||||
PropertyCheck.mandatory(this, "methodService", methodService);
|
||||
PropertyCheck.mandatory(this, "methodName", methodName);
|
||||
PropertyCheck.mandatory(this, "methodSecurityInterceptor", methodSecurity);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user