mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged DEV to HEAD
- ALF-8806 RINF 41: Lucene Removal: Fix CopyService - ALF-9028: RINF 41: Fix Aspect cm:copiedFrom - ALF-9029 RINF 49: Lucene Removal: CheckOutCheckInService API - ALF-9032: RINF 49: fixes to cm:workingcopy aspect 28996: Dev branch for De-Lucene work pending patches 29004: Evaluator runs in read-only txn 29006: Additional PermissionCheckedCollection.create method - Use an existing collection's permission check data (cut-off, etc) to wrap a new collection 29007: CopyService and CheckOutCheckInService refactors to remove Lucene CopyService: Removed cm:source property from cm:copiedfrom aspect and replaced with a cm:original association. Added CQ-based APIs to query for copies Added APIs to support bi-directional walking of copy association Fixed sundry uses of cm:copiedfrom esp. all uses related to cm:workingcopy CheckOutCheckInService: Check-out now creates a source aspect cm:checkedOut with 1:1 relationship to cm:workingcopy via cm:workingcopylink Removed explicit use of cm:workingcopy aspect and replaced it with calls to COCI API 29083: Audit tests fail when indexing is turned off. Also removed a getReader() call during rule evaluation, leading to a 'sub-action' read being recorded. 29113: NodeDAO.getNodesWithAspects supports paging 29135: Removed unused patch queries 29139: Basic patch (still terminates with error) to upgrade cm:copiedfrom and cm:workingcopy 29157: Tested patch for cm:copiedfrom and cm:workingcopy aspects git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@29159 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -18,8 +18,13 @@
|
|||||||
*/
|
*/
|
||||||
package org.alfresco.web.action.evaluator;
|
package org.alfresco.web.action.evaluator;
|
||||||
|
|
||||||
|
import javax.faces.context.FacesContext;
|
||||||
|
|
||||||
|
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
||||||
|
import org.alfresco.service.transaction.TransactionService;
|
||||||
import org.alfresco.web.action.ActionEvaluator;
|
import org.alfresco.web.action.ActionEvaluator;
|
||||||
import org.alfresco.web.bean.repository.Node;
|
import org.alfresco.web.bean.repository.Node;
|
||||||
|
import org.alfresco.web.bean.repository.Repository;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base class for all action evaluators.
|
* Base class for all action evaluators.
|
||||||
@@ -35,16 +40,26 @@ public class BaseActionEvaluator implements ActionEvaluator
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean evaluate(Object obj)
|
public boolean evaluate(final Object obj)
|
||||||
{
|
{
|
||||||
// if a Node object is passed to this method call
|
// if a Node object is passed to this method call
|
||||||
// the explicit evaluate(Node) method otherwise
|
// the explicit evaluate(Node) method otherwise
|
||||||
// allow the action by default.
|
// allow the action by default.
|
||||||
|
|
||||||
if (obj instanceof Node)
|
if (obj instanceof Node)
|
||||||
|
{
|
||||||
|
RetryingTransactionCallback<Boolean> txnCallback = new RetryingTransactionCallback<Boolean>()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public Boolean execute() throws Throwable
|
||||||
{
|
{
|
||||||
return evaluate((Node)obj);
|
return evaluate((Node)obj);
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
TransactionService txnService =
|
||||||
|
Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getTransactionService();
|
||||||
|
return txnService.getRetryingTransactionHelper().doInTransaction(txnCallback, true, true);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
@@ -22,8 +22,8 @@ import javax.faces.context.FacesContext;
|
|||||||
|
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.model.ForumModel;
|
import org.alfresco.model.ForumModel;
|
||||||
|
import org.alfresco.service.cmr.coci.CheckOutCheckInService;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
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.security.PermissionService;
|
||||||
import org.alfresco.web.bean.repository.Node;
|
import org.alfresco.web.bean.repository.Node;
|
||||||
import org.alfresco.web.bean.repository.Repository;
|
import org.alfresco.web.bean.repository.Repository;
|
||||||
@@ -49,11 +49,10 @@ public class ForumsCheckinDocEvaluator extends BaseActionEvaluator
|
|||||||
{
|
{
|
||||||
if (node.hasAspect(ForumModel.ASPECT_DISCUSSABLE))
|
if (node.hasAspect(ForumModel.ASPECT_DISCUSSABLE))
|
||||||
{
|
{
|
||||||
NodeService nodeService =
|
CheckOutCheckInService checkOutCheckInService =
|
||||||
Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getNodeService();
|
Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getCheckOutCheckInService();
|
||||||
|
|
||||||
// get the original locked node (via the copiedfrom aspect)
|
// get the original locked node (via the copiedfrom aspect)
|
||||||
NodeRef lockedNodeRef = (NodeRef)nodeService.getProperty(node.getNodeRef(), ContentModel.PROP_COPY_REFERENCE);
|
NodeRef lockedNodeRef = checkOutCheckInService.getCheckedOut(node.getNodeRef());
|
||||||
if (lockedNodeRef != null)
|
if (lockedNodeRef != null)
|
||||||
{
|
{
|
||||||
Node lockedNode = new Node(lockedNodeRef);
|
Node lockedNode = new Node(lockedNodeRef);
|
||||||
|
@@ -36,14 +36,12 @@ import javax.faces.event.AbortProcessingException;
|
|||||||
import javax.faces.event.ActionEvent;
|
import javax.faces.event.ActionEvent;
|
||||||
import javax.transaction.UserTransaction;
|
import javax.transaction.UserTransaction;
|
||||||
|
|
||||||
import org.springframework.extensions.config.Config;
|
|
||||||
import org.springframework.extensions.config.ConfigElement;
|
|
||||||
import org.springframework.extensions.config.ConfigService;
|
|
||||||
import org.alfresco.model.ApplicationModel;
|
import org.alfresco.model.ApplicationModel;
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.repo.search.SearcherException;
|
import org.alfresco.repo.search.SearcherException;
|
||||||
import org.alfresco.repo.site.SiteModel;
|
import org.alfresco.repo.site.SiteModel;
|
||||||
import org.alfresco.repo.web.scripts.FileTypeImageUtils;
|
import org.alfresco.repo.web.scripts.FileTypeImageUtils;
|
||||||
|
import org.alfresco.service.cmr.coci.CheckOutCheckInService;
|
||||||
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
||||||
import org.alfresco.service.cmr.dictionary.TypeDefinition;
|
import org.alfresco.service.cmr.dictionary.TypeDefinition;
|
||||||
import org.alfresco.service.cmr.lock.LockService;
|
import org.alfresco.service.cmr.lock.LockService;
|
||||||
@@ -87,8 +85,8 @@ import org.alfresco.web.ui.common.component.IBreadcrumbHandler;
|
|||||||
import org.alfresco.web.ui.common.component.UIActionLink;
|
import org.alfresco.web.ui.common.component.UIActionLink;
|
||||||
import org.alfresco.web.ui.common.component.UIBreadcrumb;
|
import org.alfresco.web.ui.common.component.UIBreadcrumb;
|
||||||
import org.alfresco.web.ui.common.component.UIModeList;
|
import org.alfresco.web.ui.common.component.UIModeList;
|
||||||
import org.alfresco.web.ui.common.component.UIStatusMessage;
|
|
||||||
import org.alfresco.web.ui.common.component.UIPanel.ExpandedEvent;
|
import org.alfresco.web.ui.common.component.UIPanel.ExpandedEvent;
|
||||||
|
import org.alfresco.web.ui.common.component.UIStatusMessage;
|
||||||
import org.alfresco.web.ui.common.component.data.UIRichList;
|
import org.alfresco.web.ui.common.component.data.UIRichList;
|
||||||
import org.alfresco.web.ui.repo.component.IRepoBreadcrumbHandler;
|
import org.alfresco.web.ui.repo.component.IRepoBreadcrumbHandler;
|
||||||
import org.alfresco.web.ui.repo.component.UINodeDescendants;
|
import org.alfresco.web.ui.repo.component.UINodeDescendants;
|
||||||
@@ -96,6 +94,9 @@ import org.alfresco.web.ui.repo.component.UINodePath;
|
|||||||
import org.alfresco.web.ui.repo.component.UISimpleSearch;
|
import org.alfresco.web.ui.repo.component.UISimpleSearch;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.springframework.extensions.config.Config;
|
||||||
|
import org.springframework.extensions.config.ConfigElement;
|
||||||
|
import org.springframework.extensions.config.ConfigService;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -146,6 +147,23 @@ public class BrowseBean implements IContextListener, Serializable
|
|||||||
return nodeService;
|
return nodeService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param checkOutCheckInService The service for check-in and check-out.
|
||||||
|
*/
|
||||||
|
public void setCheckOutCheckInService(CheckOutCheckInService checkOutCheckInService)
|
||||||
|
{
|
||||||
|
this.checkOutCheckInService = checkOutCheckInService;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected CheckOutCheckInService getCheckOutCheckInService()
|
||||||
|
{
|
||||||
|
if (checkOutCheckInService == null)
|
||||||
|
{
|
||||||
|
checkOutCheckInService = Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getCheckOutCheckInService();
|
||||||
|
}
|
||||||
|
return checkOutCheckInService;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param searchService The Searcher to set.
|
* @param searchService The Searcher to set.
|
||||||
*/
|
*/
|
||||||
@@ -2152,31 +2170,9 @@ public class BrowseBean implements IContextListener, Serializable
|
|||||||
{
|
{
|
||||||
NodeRef nodeRef = new NodeRef(ref);
|
NodeRef nodeRef = new NodeRef(ref);
|
||||||
|
|
||||||
boolean hasWorkingCopy = false;
|
NodeRef workingCopyNodeRef = getCheckOutCheckInService().getWorkingCopy(nodeRef);
|
||||||
ResultSet resultSet = null;
|
|
||||||
|
|
||||||
try
|
if (workingCopyNodeRef != null)
|
||||||
{
|
|
||||||
// query for a working copy
|
|
||||||
resultSet = getSearchService().query(nodeRef.getStoreRef(), SearchService.LANGUAGE_LUCENE,
|
|
||||||
"ASPECT:\"" + ContentModel.ASPECT_WORKING_COPY.toString() +
|
|
||||||
"\" AND +@\\{http\\://www.alfresco.org/model/content/1.0\\}" +
|
|
||||||
ContentModel.PROP_COPY_REFERENCE.getLocalName() + ":\"" + nodeRef.toString() + "\"");
|
|
||||||
|
|
||||||
if (resultSet.getNodeRefs().size() != 0)
|
|
||||||
{
|
|
||||||
hasWorkingCopy = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
if (resultSet != null)
|
|
||||||
{
|
|
||||||
resultSet.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasWorkingCopy)
|
|
||||||
{
|
{
|
||||||
// if node has a working copy setup error message and return
|
// if node has a working copy setup error message and return
|
||||||
Utils.addErrorMessage(MessageFormat.format(Application.getMessage(
|
Utils.addErrorMessage(MessageFormat.format(Application.getMessage(
|
||||||
@@ -2367,6 +2363,9 @@ public class BrowseBean implements IContextListener, Serializable
|
|||||||
/** The NodeService to be used by the bean */
|
/** The NodeService to be used by the bean */
|
||||||
private transient NodeService nodeService;
|
private transient NodeService nodeService;
|
||||||
|
|
||||||
|
/** The CheckOutCheckInService to be used by the bean */
|
||||||
|
private transient CheckOutCheckInService checkOutCheckInService;
|
||||||
|
|
||||||
/** The SearchService to be used by the bean */
|
/** The SearchService to be used by the bean */
|
||||||
private transient SearchService searchService;
|
private transient SearchService searchService;
|
||||||
|
|
||||||
|
@@ -18,8 +18,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.alfresco.web.bean.coci;
|
package org.alfresco.web.bean.coci;
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
import javax.faces.application.NavigationHandler;
|
import javax.faces.application.NavigationHandler;
|
||||||
@@ -29,7 +27,6 @@ import javax.faces.event.ActionEvent;
|
|||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.cmr.version.Version;
|
import org.alfresco.service.cmr.version.Version;
|
||||||
import org.alfresco.service.namespace.QName;
|
|
||||||
import org.alfresco.web.app.AlfrescoNavigationHandler;
|
import org.alfresco.web.app.AlfrescoNavigationHandler;
|
||||||
import org.alfresco.web.app.Application;
|
import org.alfresco.web.app.Application;
|
||||||
import org.alfresco.web.bean.repository.Node;
|
import org.alfresco.web.bean.repository.Node;
|
||||||
@@ -198,13 +195,7 @@ public class DoneEditingDialog extends CheckinCheckoutDialog
|
|||||||
*/
|
*/
|
||||||
private NodeRef getSourceNodeRef(NodeRef workingCopyNodeRef)
|
private NodeRef getSourceNodeRef(NodeRef workingCopyNodeRef)
|
||||||
{
|
{
|
||||||
if (getNodeService().hasAspect(workingCopyNodeRef, ContentModel.ASPECT_COPIEDFROM) == true)
|
return getCheckOutCheckInService().getCheckedOut(workingCopyNodeRef);
|
||||||
{
|
|
||||||
Map<QName, Serializable> workingCopyProperties = getNodeService().getProperties(workingCopyNodeRef);
|
|
||||||
return (NodeRef) workingCopyProperties.get(ContentModel.PROP_COPY_REFERENCE);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -29,6 +29,7 @@ import javax.faces.context.FacesContext;
|
|||||||
import org.alfresco.error.AlfrescoRuntimeException;
|
import org.alfresco.error.AlfrescoRuntimeException;
|
||||||
import org.alfresco.repo.transaction.RetryingTransactionHelper;
|
import org.alfresco.repo.transaction.RetryingTransactionHelper;
|
||||||
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
||||||
|
import org.alfresco.service.cmr.coci.CheckOutCheckInService;
|
||||||
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
||||||
import org.alfresco.service.cmr.model.FileFolderService;
|
import org.alfresco.service.cmr.model.FileFolderService;
|
||||||
import org.alfresco.service.cmr.repository.NodeService;
|
import org.alfresco.service.cmr.repository.NodeService;
|
||||||
@@ -51,6 +52,7 @@ import org.alfresco.web.ui.common.Utils;
|
|||||||
*
|
*
|
||||||
* @author gavinc
|
* @author gavinc
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("serial")
|
||||||
public abstract class BaseDialogBean implements IDialogBean, Serializable
|
public abstract class BaseDialogBean implements IDialogBean, Serializable
|
||||||
{
|
{
|
||||||
protected Map<String, String> parameters;
|
protected Map<String, String> parameters;
|
||||||
@@ -62,6 +64,7 @@ public abstract class BaseDialogBean implements IDialogBean, Serializable
|
|||||||
|
|
||||||
transient private TransactionService transactionService;
|
transient private TransactionService transactionService;
|
||||||
transient private NodeService nodeService;
|
transient private NodeService nodeService;
|
||||||
|
transient private CheckOutCheckInService checkOutCheckInService;
|
||||||
transient private FileFolderService fileFolderService;
|
transient private FileFolderService fileFolderService;
|
||||||
transient private SearchService searchService;
|
transient private SearchService searchService;
|
||||||
transient private DictionaryService dictionaryService;
|
transient private DictionaryService dictionaryService;
|
||||||
@@ -272,6 +275,15 @@ public abstract class BaseDialogBean implements IDialogBean, Serializable
|
|||||||
return this.nodeService;
|
return this.nodeService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected CheckOutCheckInService getCheckOutCheckInService()
|
||||||
|
{
|
||||||
|
if (this.checkOutCheckInService == null)
|
||||||
|
{
|
||||||
|
this.checkOutCheckInService = Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getCheckOutCheckInService();
|
||||||
|
}
|
||||||
|
return this.checkOutCheckInService;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the rule service
|
* Get the rule service
|
||||||
* @return RuleService rule service
|
* @return RuleService rule service
|
||||||
|
@@ -337,6 +337,10 @@
|
|||||||
<property-name>searchService</property-name>
|
<property-name>searchService</property-name>
|
||||||
<value>#{SearchService}</value>
|
<value>#{SearchService}</value>
|
||||||
</managed-property>
|
</managed-property>
|
||||||
|
<managed-property>
|
||||||
|
<property-name>checkOutCheckInService</property-name>
|
||||||
|
<value>#{CheckOutCheckInService}</value>
|
||||||
|
</managed-property>
|
||||||
<managed-property>
|
<managed-property>
|
||||||
<property-name>lockService</property-name>
|
<property-name>lockService</property-name>
|
||||||
<value>#{LockService}</value>
|
<value>#{LockService}</value>
|
||||||
|
Reference in New Issue
Block a user