Merged HEAD-BUG-FIX (5.0/Cloud) to HEAD (5.0/Cloud)

78565: Merged V4.2-BUG-FIX (4.2.4) to HEAD-BUG-FIX (5.0/Cloud)
      77792: Merged V4.2.3 (4.2.3) to V4.2-BUG-FIX (4.2.4)
         77393: Merged DEV to V4.2.3 (4.2.3)
            76812: MNT-11695 : Site cannot be deleted if copy/move outbound rule exists
            Fixed move action, implemented a JUnit test to simulate the issue.


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@82602 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Erik Winlof
2014-09-03 12:35:11 +00:00
parent ad229d966f
commit f7c9eb6db8
2 changed files with 62 additions and 1 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2010 Alfresco Software Limited.
* Copyright (C) 2005-2014 Alfresco Software Limited.
*
* This file is part of Alfresco
*
@@ -19,6 +19,7 @@
package org.alfresco.repo.action.executer;
import java.util.List;
import java.util.Set;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.action.ParameterDefinitionImpl;
@@ -29,6 +30,7 @@ import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.model.FileNotFoundException;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.namespace.QName;
/**
* Move action executor.
@@ -81,6 +83,15 @@ public class MoveActionExecuter extends ActionExecuterAbstractBase
&& !this.nodeService.hasAspect(actionedUponNodeRef, ContentModel.ASPECT_WORKING_COPY))
{
NodeRef destinationParent = (NodeRef) ruleAction.getParameterValue(PARAM_DESTINATION_FOLDER);
// Check the destination not to be in a pending delete list
// MNT-11695
Set<QName> destinationAspects = nodeService.getAspects(destinationParent);
if (destinationAspects.contains(ContentModel.ASPECT_PENDING_DELETE))
{
return;
}
try
{
fileFolderService.move(actionedUponNodeRef, destinationParent, null);

View File

@@ -32,6 +32,7 @@ import org.alfresco.repo.action.evaluator.ComparePropertyValueEvaluator;
import org.alfresco.repo.action.executer.AddFeaturesActionExecuter;
import org.alfresco.repo.action.executer.CopyActionExecuter;
import org.alfresco.repo.action.executer.ImageTransformActionExecuter;
import org.alfresco.repo.action.executer.MoveActionExecuter;
import org.alfresco.repo.content.MimetypeMap;
import org.alfresco.repo.content.transform.AbstractContentTransformerTest;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
@@ -1289,5 +1290,54 @@ public class RuleServiceImplTest extends BaseRuleTest
txn.begin();
assertFalse("The folder should be deleted.", nodeService.exists(parentFolderNodeRef));
txn.commit();
// Now test move action
txn = transactionService.getUserTransaction();
txn.begin();
// Create 1 folder with 2 folders inside
parentFolderNodeRef = this.nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("parentnode" + GUID.generate()),
ContentModel.TYPE_FOLDER).getChildRef();
folder1NodeRef = this.nodeService.createNode(parentFolderNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("parentnode" + GUID.generate()),
ContentModel.TYPE_FOLDER).getChildRef();
folder2NodeRef = this.nodeService.createNode(parentFolderNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("parentnode" + GUID.generate()),
ContentModel.TYPE_FOLDER).getChildRef();
// Create rule for folder1
testRule = new Rule();
testRule.setRuleTypes(Collections.singletonList(RuleType.OUTBOUND));
testRule.setTitle("RuleServiceTest" + GUID.generate());
testRule.setDescription(DESCRIPTION);
testRule.applyToChildren(true);
action = this.actionService.createAction(MoveActionExecuter.NAME);
action.setParameterValue(CopyActionExecuter.PARAM_DESTINATION_FOLDER, folder2NodeRef);
testRule.setAction(action);
this.ruleService.saveRule(folder1NodeRef, testRule);
assertNotNull("Rule was not saved", testRule.getNodeRef());
actionedQName = QName.createQName("actioneduponnode" + GUID.generate());
// New node
actionedUponNodeRef = this.nodeService.createNode(folder1NodeRef, ContentModel.ASSOC_CHILDREN, actionedQName, ContentModel.TYPE_CONTENT).getChildRef();
writer = this.contentService.getWriter(actionedUponNodeRef, ContentModel.PROP_CONTENT, true);
writer.setMimetype("text/plain");
writer.putContent("TestContent");
txn.commit();
// Remove the parent folder
txn = transactionService.getUserTransaction();
txn.begin();
try
{
nodeService.deleteNode(parentFolderNodeRef);
}
catch (Exception e)
{
fail("The nodes should be deleted without errors, but exception was thrown: " + e);
}
txn.commit();
txn = transactionService.getUserTransaction();
txn.begin();
assertFalse("The folder should be deleted.", nodeService.exists(parentFolderNodeRef));
txn.commit();
}
}