ALF-16520, ALF-16477, ALF-16456, ALF-16453: Clones of fixes already performed in v4.1.2, but couldn't be merged automatically due to activiti-version difference

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@43597 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Frederik Heremans
2012-11-14 09:53:02 +00:00
parent 72bef82fc6
commit 46e7e0e7e8
20 changed files with 178 additions and 20 deletions

View File

@@ -19,7 +19,14 @@
package org.alfresco.repo.workflow.activiti;
import java.io.InputStream;
import java.io.Serializable;
import java.util.HashMap;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.workflow.AbstractMultitenantWorkflowTest;
import org.alfresco.service.cmr.workflow.WorkflowDefinition;
import org.alfresco.service.cmr.workflow.WorkflowDeployment;
import org.alfresco.service.namespace.QName;
/**
@@ -29,6 +36,10 @@ import org.alfresco.service.namespace.QName;
*/
public class ActivitiMultitenantWorkflowTest extends AbstractMultitenantWorkflowTest
{
private static final String CALLACTIVITY_SUBPROCESS_LOCATION = "activiti/test-callactivity-subprocess.bpmn20.xml";
private static final String CALLACTIVITY_MAINPROCESS_LOCATION = "activiti/test-callactivity-main.bpmn20.xml";
@Override
protected String getEngine()
{
@@ -52,5 +63,31 @@ public class ActivitiMultitenantWorkflowTest extends AbstractMultitenantWorkflow
{
return "activiti$activitiAdhoc";
}
/**
* ALF-15939: Call-activity should be multi-tenant aware.
*/
public void testSubProcessCallActivity() throws Exception
{
// Run as User1 so tenant domain 1
AuthenticationUtil.setFullyAuthenticatedUser(user1);
// Deploy called sub-process on tenant domain 1
InputStream input = getInputStream(CALLACTIVITY_SUBPROCESS_LOCATION);
WorkflowDeployment deployment = workflowService.deployDefinition(getEngine(), input, XML);
// Deploy called main-process on tenant domain 1
input = getInputStream(CALLACTIVITY_MAINPROCESS_LOCATION);
deployment = workflowService.deployDefinition(getEngine(), input, XML);
WorkflowDefinition mainProcessDefinition = deployment.getDefinition();
// Start a process, which immediately tries to call the sub-process before returning control to thread
try {
workflowService.startWorkflow(mainProcessDefinition.getId(), new HashMap<QName, Serializable>());
} catch(Exception e) {
e.printStackTrace();
fail("No exception was expected while running process, but got: " + e.toString());
}
}
}

View File

@@ -22,6 +22,7 @@ import java.util.List;
import org.activiti.engine.delegate.ExecutionListener;
import org.activiti.engine.delegate.TaskListener;
import org.activiti.engine.impl.bpmn.behavior.CallActivityBehavior;
import org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior;
import org.activiti.engine.impl.bpmn.parser.BpmnParseListener;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
@@ -139,7 +140,17 @@ public class AlfrescoBpmnParseListener implements BpmnParseListener
@Override
public void parseCallActivity(Element callActivityElement, ScopeImpl scope, ActivityImpl activity)
{
// Nothing to do here
if (tenantService.isEnabled())
{
ActivityBehavior activityBehavior = activity.getActivityBehavior();
if(activityBehavior instanceof CallActivityBehavior)
{
CallActivityBehavior callActivity = (CallActivityBehavior) activityBehavior;
// Make name of process-definition to be called aware of the current tenant
callActivity.setProcessDefinitonKey(tenantService.getName(callActivity.getProcessDefinitonKey()));
}
}
}
@Override