mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-10-15 15:02:20 +00:00
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:
@@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user