Merged 5.1.N (5.1.1) to HEAD (5.1)

118306 nsmintanca: Merged 5.0.N (5.0.4) to 5.1.N (5.1.1)
      118229 aleahu: MNT-14730 : Approve and Reject workflow not working in subfolders after the rule has been applied
         - Renamed the copied file when executing a simple workflow rule in order to avoid name conflicts by using copyAndRename instead of copy.


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@123590 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Alan Davis
2016-03-11 17:29:42 +00:00
parent 75c5da59d8
commit c2e645b2ae
2 changed files with 72 additions and 22 deletions

View File

@@ -28,6 +28,7 @@ import org.alfresco.model.ContentModel;
import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.service.cmr.action.Action; import org.alfresco.service.cmr.action.Action;
import org.alfresco.service.cmr.action.ParameterDefinition; import org.alfresco.service.cmr.action.ParameterDefinition;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.CopyService; import org.alfresco.service.cmr.repository.CopyService;
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.repository.NodeService;
@@ -144,17 +145,13 @@ public class TransitionSimpleWorkflowActionExecuter extends ActionExecuterAbstra
else else
{ {
// copy the node to the specified folder // copy the node to the specified folder
String qname = QName.createValidLocalName(name); ChildAssociationRef originalAssoc = nodeService.getPrimaryParent(actionedUponNodeRef);
NodeRef newNode = copyService.copy( copyService.copyAndRename(
actionedUponNodeRef, actionedUponNodeRef,
destinationFolder, destinationFolder,
ContentModel.ASSOC_CONTAINS, originalAssoc.getTypeQName(),
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, qname), originalAssoc.getQName(),
true); true);
// the copy service does not copy the name of the node so we
// need to update the property on the copied item
nodeService.setProperty(newNode, ContentModel.PROP_NAME, name);
} }
} }
} }

View File

@@ -26,6 +26,7 @@ import org.alfresco.model.ApplicationModel;
import org.alfresco.model.ContentModel; import org.alfresco.model.ContentModel;
import org.alfresco.repo.action.ActionImpl; import org.alfresco.repo.action.ActionImpl;
import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.alfresco.test_category.BaseSpringTestsCategory; import org.alfresco.test_category.BaseSpringTestsCategory;
@@ -85,24 +86,13 @@ public class TransitionSimpleWorkflowActionExecuterTest extends BaseAlfrescoSpri
// Get the executer instance // Get the executer instance
this.acceptExecuter = (TransitionSimpleWorkflowActionExecuter)this.applicationContext.getBean("accept-simpleworkflow"); this.acceptExecuter = (TransitionSimpleWorkflowActionExecuter)this.applicationContext.getBean("accept-simpleworkflow");
this.rejectExecuter = (TransitionSimpleWorkflowActionExecuter)this.applicationContext.getBean("reject-simpleworkflow"); this.rejectExecuter = (TransitionSimpleWorkflowActionExecuter)this.applicationContext.getBean("reject-simpleworkflow");
// Set up workflow details on the node
Map<QName, Serializable> propertyValues = new HashMap<QName, Serializable>();
propertyValues.put(ApplicationModel.PROP_APPROVE_STEP, "Approve");
propertyValues.put(ApplicationModel.PROP_APPROVE_FOLDER, destinationFolder);
propertyValues.put(ApplicationModel.PROP_APPROVE_MOVE, Boolean.TRUE);
propertyValues.put(ApplicationModel.PROP_REJECT_STEP, "Reject");
propertyValues.put(ApplicationModel.PROP_REJECT_FOLDER, destinationFolder);
propertyValues.put(ApplicationModel.PROP_REJECT_MOVE, Boolean.FALSE);
// Apply the simple workflow aspect to the node
this.nodeService.addAspect(node, ApplicationModel.ASPECT_SIMPLE_WORKFLOW, propertyValues);
} }
public void testExecutionApprove() public void testExecutionApprove()
{ {
addWorkflowAspect(node, destinationFolder, Boolean.TRUE, Boolean.FALSE);
assertTrue(nodeService.hasAspect(node, ApplicationModel.ASPECT_SIMPLE_WORKFLOW)); assertTrue(nodeService.hasAspect(node, ApplicationModel.ASPECT_SIMPLE_WORKFLOW));
NodeRef pParent = nodeService.getPrimaryParent(node).getParentRef(); NodeRef pParent = nodeService.getPrimaryParent(node).getParentRef();
assertEquals(sourceFolder, pParent); assertEquals(sourceFolder, pParent);
@@ -117,6 +107,8 @@ public class TransitionSimpleWorkflowActionExecuterTest extends BaseAlfrescoSpri
public void testExecutionReject() public void testExecutionReject()
{ {
addWorkflowAspect(node, destinationFolder, Boolean.TRUE, Boolean.FALSE);
assertTrue(nodeService.hasAspect(node, ApplicationModel.ASPECT_SIMPLE_WORKFLOW)); assertTrue(nodeService.hasAspect(node, ApplicationModel.ASPECT_SIMPLE_WORKFLOW));
NodeRef pParent = nodeService.getPrimaryParent(node).getParentRef(); NodeRef pParent = nodeService.getPrimaryParent(node).getParentRef();
assertEquals(sourceFolder, pParent); assertEquals(sourceFolder, pParent);
@@ -130,4 +122,65 @@ public class TransitionSimpleWorkflowActionExecuterTest extends BaseAlfrescoSpri
assertEquals(sourceFolder, pParent); assertEquals(sourceFolder, pParent);
assertEquals(1, nodeService.getChildAssocs(destinationFolder).size()); assertEquals(1, nodeService.getChildAssocs(destinationFolder).size());
} }
/** Test for MNT-14730*/
public void testExecutionApproveWhenDestinationSameAsSource()
{
addWorkflowAspect(node, sourceFolder, Boolean.FALSE, Boolean.FALSE);
assertTrue(nodeService.hasAspect(node, ApplicationModel.ASPECT_SIMPLE_WORKFLOW));
NodeRef pParent = nodeService.getPrimaryParent(node).getParentRef();
assertEquals(sourceFolder, pParent);
ActionImpl action = new ActionImpl(null, ID, "accept-simpleworkflow", null);
acceptExecuter.execute(action, node);
String copyName = QName.createValidLocalName("Copy of my node.txt");
NodeRef nodeRef = nodeService.getChildByName(sourceFolder, ContentModel.ASSOC_CONTAINS, copyName);
assertNotNull(nodeRef);
}
/** Test for MNT-14730*/
public void testExecutionRejectWhenDestinationSameAsSource()
{
addWorkflowAspect(node, sourceFolder, Boolean.FALSE, Boolean.FALSE);
assertTrue(nodeService.hasAspect(node, ApplicationModel.ASPECT_SIMPLE_WORKFLOW));
NodeRef pParent = nodeService.getPrimaryParent(node).getParentRef();
assertEquals(sourceFolder, pParent);
assertEquals(0, nodeService.getChildAssocs(destinationFolder).size());
ActionImpl action = new ActionImpl(null, ID, "reject-simpleworkflow", null);
rejectExecuter.execute(action, node);
assertFalse(nodeService.hasAspect(node, ApplicationModel.ASPECT_SIMPLE_WORKFLOW));
pParent = nodeService.getPrimaryParent(node).getParentRef();
assertEquals(sourceFolder, pParent);
assertEquals(0, nodeService.getChildAssocs(destinationFolder).size());
String copyName = QName.createValidLocalName("Copy of my node.txt");
NodeRef nodeRef = nodeService.getChildByName(sourceFolder, ContentModel.ASSOC_CONTAINS, copyName);
assertNotNull(nodeRef);
}
private void addWorkflowAspect(NodeRef node, NodeRef destinationFolder, Boolean moveOnApprove, Boolean moveOnReject)
{
// Set up workflow details on the node
Map<QName, Serializable> propertyValues = createWorkflowProperties(destinationFolder, moveOnApprove, moveOnReject);
// Apply the simple workflow aspect to the node
this.nodeService.addAspect(node, ApplicationModel.ASPECT_SIMPLE_WORKFLOW, propertyValues);
}
private Map<QName, Serializable> createWorkflowProperties(NodeRef destinationFolder, Boolean moveOnApprove, Boolean moveOnReject)
{
Map<QName, Serializable> propertyValues = new HashMap<QName, Serializable>();
propertyValues.put(ApplicationModel.PROP_APPROVE_STEP, "Approve");
propertyValues.put(ApplicationModel.PROP_APPROVE_FOLDER, destinationFolder);
propertyValues.put(ApplicationModel.PROP_APPROVE_MOVE, moveOnApprove);
propertyValues.put(ApplicationModel.PROP_REJECT_STEP, "Reject");
propertyValues.put(ApplicationModel.PROP_REJECT_FOLDER, destinationFolder);
propertyValues.put(ApplicationModel.PROP_REJECT_MOVE, moveOnReject);
return propertyValues;
}
} }