Merging DEV/ACTIVITI_INTEGRATION2 to HEAD

25933: Updated activiti jars to 5.3 release + temporarily disabled query-tests for activtiti
	25932: Fixed failing FormServiceImplTest.
	25930: Fixed ClassCastException and NullPointerException when using JBPM and Activiti tasks in Alfresco Explorer.
	25898: Implemented testGetWorkflows() which tests the methods getWorkflows() getActiveWorkflows() and getCompletedWorkflows() for both workflow engines.
	25888: Fixed failing testOutcome.
	25884: Workflow console fully tested using activiti engine + small bugfixes
	25854: Implemented testGetPathProperties on AbstractWorkflowServiceIntegrationTest. This tests getPathProperties for Activiti and JBPM workflow engines.
	25827: Added lifecycle sample for activiti engine
	25801: Added a new WorkflowRestApiTest testTaskInstancesForWorkflowGet. Also fixed issues with ActivitWorkflowEngine.queryTasks() relating to the start task being returned incorrectly.
	25731: Added timer execution test to verify Authentication and Transactional behavior + added license headers to 2 files
	25682: ALF-6902 delete identitylinks + added timer sample + adhoc notify me feature
	25649: Redeploying of parallel activiti WF's turned of (remainder from development)
	25645: Fixing getWorkflows test, using valid date to check "due before"
	25642: Implemented getPathProperties() on ActivitiWorkflowEngine. Also refactored ActivitiTypeConverter to create ActivitiPropertyConverter which uses a WorkflowPropertyHandlerRegistry.
	25636: Fixes for use of Activiti workflows in JSF client
	25615: Added parallel review and approve process (regular + grouped)
	25520: Added REST-test for review workflow and pooled review workflow for both engines
	25471: Added queryTasks test for both engines
	25397: Testing getTimers() on both engines
	25368: Using authorityName instead of name for candidate-group + fixed priority WF vs. Task mixup in start-task
	25335: F96: A form control for LIST constraint based decision properties in Activiti tasks exists
	25324: Added correct sources for current 5.3-SNAPSHOT
	25323: Implemented TaskQuery further and added extra test-coverage + delete/cancel WF now deletes History as well 
	25318: The signal() method on ActivitiWorkflowEngine now returns a WorkflowPath if the signal ended the WorkflowInstance.
	25300: Fixed start workflow form for Activiti pooled review and approve process definition
	25294: Implemented signal() method on ActivitiWorkflowEngine. Currently it returns null if the signal() ended the Workflowinstance.
	25199: Implemented getTimers() + fixed some issues with the outcome prop name + upgraded to activiti 5.3
	25179: Added support for wf:outcome property on Activiti tasks. Now ian arbitrary property can be set as the property from which outcomes are read.
	25152: Refactored the WorkflowServiceImplTest to create an AbstractWorkflowServiceImplTest. Extended this base test with Jbpm and Activiti implementations.
	25134: Fixed workflowPath node issue on start-task + Task variables are no longer flushed to process-instance variables
	25131: ALF-6901 start task completion date + taskListeners using ScriptService instead of activiti's built-in JSR-223
	25105: Implemented getWorkflows() and getCompletedWorkflows() methods on ActivitiWorkflowEngine.
	25098: Mandatory properties are now checked in TaskCompleteListener to allow setting of mandatory properties in end-task listeners before the check is performed + review-pooled used person to set as bpm_assignee + removed duplicate messageService in ActivitiWE
	25089: Merged ActivitiTaskComponent and ActivitiWorkflowComponent into a single class, ActivitiWorkflowEngine.
	25048: Implemented getStartTask(String) method on WorkflowService interface. This gets the start task instance for a given workflow instance Id. Also, modified the start task returned by the ActivitiTaskComponent so that it has the correct title.
	25028: Added WorkflowDefinitionGet webscript and test + tested WorkflowInstanceDelete and fixed WorkflowTaskDefinition bug
	25003: Added getStartTask() method to WorkflowService. Implemented for JBPMEngine and ActivitiTaskComponent.
	24996: Added activiti process-definition for pooled review/approve workflow + new version of activiti 5.2 to allow releasing task to pool agian
	24972: Extended TaskInstanceGet REST-test + upgraded activiti lib due to bug in HistoricTaskInstance
	24934: Refactored package assignment/creation so that it is now mainly performed by the WOrkflowPackageComponent rather than the WorkflowComponent or TaskComponent. Implemented correct package behaviour for Activiti workflow engine.
	24926: Extended TaskInstancePut REST-test + added extra logic for ignoring tasks for deleted/canceled WF's
	24895: Added new tests to FormServiceImplTest to check TaskFormProcessor correctly transitions tasks with both workflow engines.
	24888: Updated WorkflowRestApiTest, enhanced testing of getTaskInstances
	24861: Updated the FormServiceImplTest so that it includes tests for the TaskFormProcessor using both workflow engines.
	24851: Made WorkflowRestApiTest abstract and created a subtype for activiti and jbpm
	24832: Added integration test to FormServiceImplTest to check WorkflowFormProcessor works correctly with both Activiti and Jbpm engines.
	24829: ALF-6195 Pooled actors are now available on completed tasks
	24806: Added null check for parameters variable
	24805: Cleaned up WorkflowRestAPITest to remove deprecated field access.
	24797: ALF-6016 start-task now contains variables, upgraded to activiti 5.2-SNAPSHOT
	24796: Removed accidentaly checked-in folder
	24795: Share project "Catalina-virtual" into "https://svn.alfresco.com/repos/enterprise/alfresco/BRANCHES/DEV/ACTIVITI_INTEGRATION2/root"
	24780: Created Activiti Review & Approve workflow.
	24702: ALF-6201 cleaned up WOFactory.createInstance + removed candidate group from adhoc WF (pooled task)
	24693: ALF-6438 implemented getWorkflowById for completed workflows + added unittest for getWorkflowById from running and complete processes
	24686: ALF-6195 added formKey (typeDefinition name) to variables to make available in history + added test for getTaskById() for a completed task
	24642: ALF-6003 + ALF-6195 Introduced mapping of WorkfloTask from HistoricTaskInstance and it's variables
	24565: ALF-6016 tested getting start task by id + added initial test for taskQuery
	24560: ALF-6217 implemented and tested pooled actors using activiti-candidate user/group
	24520: ALF-6003 ALF-6014 tested + various minor improvements + TaskTypeEvaluator matchin pattern adjusted to be able to use workflow-detail form for activiti start-tasks
	24417: ALF-6003, ALF-6014 Added tasklisteners to set default task props + flush variables when task ends + running script in tasklistener (to set task-variables in script based on wf-props)
	24399: Merged BRANCHES/V3.4 to BRANCHES/DEV/ACTIVITI_INTEGRATION2:
   24396: Fix for ALF-6126: TaskTypeEvaluator uses task-name instead of taskType-name for node-type matching
	24396: Fix for ALF-6126: TaskTypeEvaluator uses task-name instead of taskType-name for node-type matching
	24334: ALF-6015 ALF-6016: Completing a task implemented + using task-local variables
	24125: ALF-5995 properties passed when starting workflow are stored
	24111: ALF-5974, ALF-5972 Task-update implemented + capturing company-home, initiator and initiator home implemented and tested
	23891: Fixing failing tests in ActivitiWorkflowComponentTest
	23776: Upgraded activiti to 5.0-SNAPSHOT + Introduced error-handling using messages + initial support for HistoricActivity/ProcessInstances
	23600: Removing unneeded folder that was introduced accidentally when reattaching SVN to eclipse
	23599: 
	23298: 
	23250: Rolling back revisions 23212 to 23113 to fix issue with logging in.
	23212: Trying to fix the problem with logging in.
	23200: Added Form config for the Activiti Adhoc Process. Fixed failing tests in ActivitiWorkflowComponentTest.
	23197: Fixed failing tests in WorkflowServiceeImplTest. Updated Activiti jars in 3rdParty.
	23191: Adding Activiti Ahodc Workflow to Workflow Deployer to demonstrate Activiti Workflow/Task..Component integration with UI.
	23129: Copy Activiti JAR files when building WAR and doing exploded deploy
	23113: Implemented ActivitiTaskComponent.getTaskById()
	23079: Created ActivitiTaskComponent and started to implement various task getter methods.
	22890: Added testStartTask to WorkflowServiceImplTests to test that the start task functionality works as required by the Workflow UI.
	22889: Added testStartTask to WorkflowServiceImplTests to test that the start task functionality works as required by the Workflow UI.
	22888: Added testStartTask to WorkflowServiceImplTests to test that the start task functionality works as required by the Workflow UI.
	22887: Added testStartTask to WorkflowServiceImplTests to test that the start task functionality works as required by the Workflow UI.
	22769: Added more functionality to ActivitiWorkflowComponent.startWorkflow.
	22759: Implemented more methods for getting WorkflowDefinitions on ActivitiWorkflowComponent. Also added more functionality to the startWorkflow method.
	22758: Implemented more methods for getting WorkflowDefinitions on ActivitiWorkflowComponent. Also added more functionality to the startWorkflow method.
	22672: Created ActivitiWorkflowComponent and implemented deployDefinition(), undeployDefinition() and isDefinitionDeployed() methods.
	22659: Replacing Activiti Jars
	22359: Added tests to check rollback of transactions in Activiti.
	22358: Got some simple transaction tests working. These test transaction visibility is working properly and also check that rollbacks work correctly.
	22342: Created a patch to add the Activiti tables in.
	22333: Added some simple tests to check if Activiti works using a DataSource and TransactionManager.
	22332: Updating Activiti to the beta release.
	22286: Added Activiti and its dependencies to 3rd Party libraries. Updated JUnit jar to 4.8. Created package org/alfresco/repo/workflow/activiti and added some simple tests to check Activiti integration.
	21879: Branch to develop support for Activiti workflow engine.
	23264: Creating branch ACTIVITI_INTEGRATION2 to merge HEAD back into the existing ACTIVITI_INTEGGRATION branch.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@25984 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
N Smith
2011-03-02 17:12:35 +00:00
parent 8a87e29067
commit 2980cf9f78
130 changed files with 15410 additions and 1988 deletions

View File

@@ -174,11 +174,11 @@ public class AlfrescoJavaScriptIntegrationTest extends BaseAlfrescoSpringTest
private String fullUser;
private JBPMNode person = null;
public void storeUsers(JBPMNode person)
public void storeUsers(JBPMNode thePerson)
{
fullUser = AuthenticationUtil.getFullyAuthenticatedUser();
runAsUser = AuthenticationUtil.getRunAsUser();
this.person = person;
this.person = thePerson;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -59,18 +59,10 @@ import org.springframework.extensions.surf.util.I18NUtil;
*/
public class JBPMEngineTest extends BaseAlfrescoSpringTest
{
/**
*
*/
private static final String USER3 = "JbpmEngineTestJoe";
/**
*
*/
private static final String USER2 = "JbpmEngineTestJane";
/**
*
*/
private static final String USER1 = "JbpmEngineTestJohn";
private static final String USER2 = "JbpmEngineTestJane";
private static final String USER3 = "JbpmEngineTestJoe";
private WorkflowComponent workflowComponent;
private TaskComponent taskComponent;
private WorkflowPackageComponent packageComponent;
@@ -112,6 +104,11 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
authenticationComponent.setCurrentUser(AuthenticationUtil.getAdminUserName());
}
public void todoTestGetStartTask() throws Exception
{
//TODO Implement
}
public void testGetWorkflowDefinitions()
{
List<WorkflowDefinition> workflowDefs = workflowComponent.getDefinitions();
@@ -124,10 +121,10 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
{
ClassPathResource processDef = new ClassPathResource("jbpmresources/test_processdefinition.xml");
WorkflowDeployment deployment = workflowComponent.deployDefinition(processDef.getInputStream(), MimetypeMap.MIMETYPE_XML);
testWorkflowDef = deployment.definition;
testWorkflowDef = deployment.getDefinition();
assertNotNull(testWorkflowDef);
assertEquals("jbpm$test", testWorkflowDef.name);
assertEquals("2", testWorkflowDef.version);
assertEquals("jbpm$test", testWorkflowDef.getName());
assertEquals("2", testWorkflowDef.getVersion());
}
@@ -135,7 +132,7 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
{
try
{
@SuppressWarnings("unused") WorkflowPath path = workflowComponent.startWorkflow("norfolknchance", null);
workflowComponent.startWorkflow("norfolknchance", null);
fail("Failed to catch invalid definition id");
}
catch(WorkflowException e)
@@ -146,7 +143,7 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
// TODO: Determine why process definition is loaded, even though it doesn't exist
// try
// {
// @SuppressWarnings("unused") WorkflowPosition pos = workflowComponent.startProcess("1000", null);
// workflowComponent.startProcess("1000", null);
// fail("Failed to catch workflow definition id that does not exist");
// }
// catch(WorkflowException e)
@@ -154,30 +151,30 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
// }
WorkflowDefinition workflowDef = getTestDefinition();
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, null);
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.getId(), null);
assertNotNull(path);
assertTrue(path.id.endsWith("-@"));
assertNotNull(path.node);
assertNotNull(path.instance);
assertEquals(workflowDef.id, path.instance.definition.id);
assertTrue(path.getId().endsWith("-@"));
assertNotNull(path.getNode());
assertNotNull(path.getInstance());
assertEquals(workflowDef.getId(), path.getInstance().getDefinition().getId());
}
public void testGetWorkflowById()
{
WorkflowDefinition workflowDef = getTestDefinition();
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, null);
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.getId(), null);
assertNotNull(path);
assertTrue(path.id.endsWith("-@"));
assertNotNull(path.node);
assertNotNull(path.instance);
assertEquals(workflowDef.id, path.instance.definition.id);
WorkflowInstance instance = workflowComponent.getWorkflowById(path.instance.id);
assertTrue(path.getId().endsWith("-@"));
assertNotNull(path.getNode());
assertNotNull(path.getInstance());
assertEquals(workflowDef.getId(), path.getInstance().getDefinition().getId());
WorkflowInstance instance = workflowComponent.getWorkflowById(path.getInstance().getId());
assertNotNull(instance);
assertEquals(path.instance.id, instance.id);
assertEquals(path.getInstance().getId(), instance.getId());
workflowComponent.cancelWorkflow(instance.id);
WorkflowInstance result = workflowComponent.getWorkflowById(instance.id);
workflowComponent.cancelWorkflow(instance.getId());
WorkflowInstance result = workflowComponent.getWorkflowById(instance.getId());
assertNull("The workflow isntance should be null!", result);
}
@@ -196,24 +193,24 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
params.put(QName.createQName("", "NodeRef"), new NodeRef("workspace://1/1001")); // context variable outside of task definition
params.put(ContentModel.PROP_OWNER, AuthenticationUtil.getAdminUserName()); // task assignment
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, params);
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.getId(), params);
assertNotNull(path);
assertTrue(path.id.endsWith("-@"));
assertNotNull(path.node);
assertNotNull(path.instance);
assertEquals(workflowDef.id, path.instance.definition.id);
List<WorkflowTask> tasks1 = workflowComponent.getTasksForWorkflowPath(path.id);
assertTrue(path.getId().endsWith("-@"));
assertNotNull(path.getNode());
assertNotNull(path.getInstance());
assertEquals(workflowDef.getId(), path.getInstance().getDefinition().getId());
List<WorkflowTask> tasks1 = workflowComponent.getTasksForWorkflowPath(path.getId());
assertNotNull(tasks1);
assertEquals(1, tasks1.size());
WorkflowTask task = tasks1.get(0);
assertTrue(task.properties.containsKey(WorkflowModel.PROP_TASK_ID));
assertTrue(task.properties.containsKey(WorkflowModel.PROP_DUE_DATE));
assertTrue(task.properties.containsKey(WorkflowModel.PROP_PRIORITY));
assertTrue(task.properties.containsKey(WorkflowModel.PROP_PERCENT_COMPLETE));
assertTrue(task.properties.containsKey(ContentModel.PROP_OWNER));
assertTrue(task.getProperties().containsKey(WorkflowModel.PROP_TASK_ID));
assertTrue(task.getProperties().containsKey(WorkflowModel.PROP_DUE_DATE));
assertTrue(task.getProperties().containsKey(WorkflowModel.PROP_PRIORITY));
assertTrue(task.getProperties().containsKey(WorkflowModel.PROP_PERCENT_COMPLETE));
assertTrue(task.getProperties().containsKey(ContentModel.PROP_OWNER));
NodeRef initiator = path.instance.initiator;
NodeRef initiator = path.getInstance().getInitiator();
String initiatorUsername = (String)nodeService.getProperty(initiator, ContentModel.PROP_USERNAME);
assertEquals(AuthenticationUtil.getAdminUserName(), initiatorUsername);
}
@@ -233,27 +230,27 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
params.put(QName.createQName("", "NodeRef"), new NodeRef("workspace://1/1001")); // context variable outside of task definition
params.put(ContentModel.PROP_OWNER, AuthenticationUtil.getAdminUserName()); // task assignment
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, params);
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.getId(), params);
assertNotNull(path);
assertTrue(path.id.endsWith("-@"));
assertNotNull(path.node);
assertNotNull(path.instance);
assertEquals(workflowDef.id, path.instance.definition.id);
List<WorkflowTask> tasks1 = workflowComponent.getTasksForWorkflowPath(path.id);
assertTrue(path.getId().endsWith("-@"));
assertNotNull(path.getNode());
assertNotNull(path.getInstance());
assertEquals(workflowDef.getId(), path.getInstance().getDefinition().getId());
List<WorkflowTask> tasks1 = workflowComponent.getTasksForWorkflowPath(path.getId());
assertNotNull(tasks1);
assertEquals(1, tasks1.size());
WorkflowTask task = tasks1.get(0);
assertTrue(task.properties.containsKey(WorkflowModel.PROP_TASK_ID));
assertTrue(task.properties.containsKey(WorkflowModel.PROP_DUE_DATE));
assertTrue(task.properties.containsKey(WorkflowModel.PROP_PRIORITY));
assertTrue(task.properties.containsKey(WorkflowModel.PROP_PERCENT_COMPLETE));
assertTrue(task.properties.containsKey(ContentModel.PROP_OWNER));
assertTrue(task.getProperties().containsKey(WorkflowModel.PROP_TASK_ID));
assertTrue(task.getProperties().containsKey(WorkflowModel.PROP_DUE_DATE));
assertTrue(task.getProperties().containsKey(WorkflowModel.PROP_PRIORITY));
assertTrue(task.getProperties().containsKey(WorkflowModel.PROP_PERCENT_COMPLETE));
assertTrue(task.getProperties().containsKey(ContentModel.PROP_OWNER));
// update with null parameters
try
{
WorkflowTask taskU1 = taskComponent.updateTask(task.id, null, null, null);
WorkflowTask taskU1 = taskComponent.updateTask(task.getId(), null, null, null);
assertNotNull(taskU1);
}
catch(Throwable e)
@@ -264,8 +261,8 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
// update property value
Map<QName, Serializable> updateProperties2 = new HashMap<QName, Serializable>();
updateProperties2.put(WorkflowModel.PROP_PERCENT_COMPLETE, 100);
WorkflowTask taskU2 = taskComponent.updateTask(task.id, updateProperties2, null, null);
assertEquals(100, taskU2.properties.get(WorkflowModel.PROP_PERCENT_COMPLETE));
WorkflowTask taskU2 = taskComponent.updateTask(task.getId(), updateProperties2, null, null);
assertEquals(100, taskU2.getProperties().get(WorkflowModel.PROP_PERCENT_COMPLETE));
// add to assocation
QName assocName = QName.createQName("", "TestAssoc");
@@ -275,9 +272,9 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
toAdd.add(new NodeRef("workspace://1/1003"));
Map<QName, List<NodeRef>> addAssocs = new HashMap<QName, List<NodeRef>>();
addAssocs.put(assocName, toAdd);
WorkflowTask taskU3 = taskComponent.updateTask(task.id, null, addAssocs, null);
assertNotNull(taskU3.properties.get(assocName));
assertEquals(3, ((List<?>)taskU3.properties.get(assocName)).size());
WorkflowTask taskU3 = taskComponent.updateTask(task.getId(), null, addAssocs, null);
assertNotNull(taskU3.getProperties().get(assocName));
assertEquals(3, ((List<?>)taskU3.getProperties().get(assocName)).size());
// add to assocation again
List<NodeRef> toAddAgain = new ArrayList<NodeRef>();
@@ -285,9 +282,9 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
toAddAgain.add(new NodeRef("workspace://1/1005"));
Map<QName, List<NodeRef>> addAssocsAgain = new HashMap<QName, List<NodeRef>>();
addAssocsAgain.put(assocName, toAddAgain);
WorkflowTask taskU4 = taskComponent.updateTask(task.id, null, addAssocsAgain, null);
assertNotNull(taskU4.properties.get(assocName));
assertEquals(5, ((List<?>)taskU4.properties.get(assocName)).size());
WorkflowTask taskU4 = taskComponent.updateTask(task.getId(), null, addAssocsAgain, null);
assertNotNull(taskU4.getProperties().get(assocName));
assertEquals(5, ((List<?>)taskU4.getProperties().get(assocName)).size());
// remove assocation
List<NodeRef> toRemove = new ArrayList<NodeRef>();
@@ -295,23 +292,23 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
toRemove.add(new NodeRef("workspace://1/1003"));
Map<QName, List<NodeRef>> removeAssocs = new HashMap<QName, List<NodeRef>>();
removeAssocs.put(assocName, toRemove);
WorkflowTask taskU5 = taskComponent.updateTask(task.id, null, null, removeAssocs);
assertNotNull(taskU5.properties.get(assocName));
assertEquals(3, ((List<?>)taskU5.properties.get(assocName)).size());
WorkflowTask taskU5 = taskComponent.updateTask(task.getId(), null, null, removeAssocs);
assertNotNull(taskU5.getProperties().get(assocName));
assertEquals(3, ((List<?>)taskU5.getProperties().get(assocName)).size());
}
public void testGetWorkflowInstances()
{
WorkflowDefinition workflowDef = getTestDefinition();
workflowComponent.startWorkflow(workflowDef.id, null);
workflowComponent.startWorkflow(workflowDef.id, null);
List<WorkflowInstance> instances = workflowComponent.getActiveWorkflows(workflowDef.id);
workflowComponent.startWorkflow(workflowDef.getId(), null);
workflowComponent.startWorkflow(workflowDef.getId(), null);
List<WorkflowInstance> instances = workflowComponent.getActiveWorkflows(workflowDef.getId());
assertNotNull(instances);
assertEquals(2, instances.size());
for (WorkflowInstance instance : instances)
{
assertEquals(workflowDef.id, instance.definition.id);
assertEquals(workflowDef.getId(), instance.getDefinition().getId());
}
}
@@ -319,37 +316,37 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
public void testGetPositions()
{
WorkflowDefinition workflowDef = getTestDefinition();
workflowComponent.startWorkflow(workflowDef.id, null);
List<WorkflowInstance> instances = workflowComponent.getActiveWorkflows(workflowDef.id);
workflowComponent.startWorkflow(workflowDef.getId(), null);
List<WorkflowInstance> instances = workflowComponent.getActiveWorkflows(workflowDef.getId());
assertNotNull(instances);
assertEquals(1, instances.size());
List<WorkflowPath> paths = workflowComponent.getWorkflowPaths(instances.get(0).id);
List<WorkflowPath> paths = workflowComponent.getWorkflowPaths(instances.get(0).getId());
assertNotNull(paths);
assertEquals(1, paths.size());
assertEquals(instances.get(0).id, paths.get(0).instance.id);
assertTrue(paths.get(0).id.endsWith("-@"));
assertEquals(instances.get(0).getId(), paths.get(0).getInstance().getId());
assertTrue(paths.get(0).getId().endsWith("-@"));
}
public void testCancelWorkflowInstance() throws Exception
{
WorkflowDefinition workflowDef = getTestDefinition();
workflowComponent.startWorkflow(workflowDef.id, null);
List<WorkflowInstance> instances1 = workflowComponent.getActiveWorkflows(workflowDef.id);
workflowComponent.startWorkflow(workflowDef.getId(), null);
List<WorkflowInstance> instances1 = workflowComponent.getActiveWorkflows(workflowDef.getId());
assertNotNull(instances1);
assertEquals(1, instances1.size());
List<WorkflowTask> tasks = taskComponent.getAssignedTasks(AuthenticationUtil.getAdminUserName(), WorkflowTaskState.IN_PROGRESS);
assertNotNull(tasks);
assertTrue(tasks.size() > 0);
WorkflowInstance cancelledInstance = workflowComponent.cancelWorkflow(instances1.get(0).id);
WorkflowInstance cancelledInstance = workflowComponent.cancelWorkflow(instances1.get(0).getId());
assertNotNull(cancelledInstance);
assertFalse(cancelledInstance.active);
List<WorkflowInstance> instances2 = workflowComponent.getActiveWorkflows(workflowDef.id);
assertFalse(cancelledInstance.isActive());
List<WorkflowInstance> instances2 = workflowComponent.getActiveWorkflows(workflowDef.getId());
assertNotNull(instances2);
assertEquals(0, instances2.size());
List<WorkflowTask> tasks1 = taskComponent.getAssignedTasks(AuthenticationUtil.getAdminUserName(), WorkflowTaskState.IN_PROGRESS);
assertNotNull(tasks1);
tasks1 = filterTasksByWorkflowInstance(tasks1, cancelledInstance.id);
tasks1 = filterTasksByWorkflowInstance(tasks1, cancelledInstance.getId());
assertEquals(0, tasks1.size());
}
@@ -383,7 +380,7 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
WorkflowPath path = workflowComponent.startWorkflow(parallelDef.getId(), parameters);
WorkflowTask startTask = workflowComponent.getTasksForWorkflowPath(path.getId()).get(0);
taskComponent.endTask(startTask.getId(), null);
checkInstanceExists(path.instance.getId(), parallelDef.getId(), true);
checkInstanceExists(path.getInstance().getId(), parallelDef.getId(), true);
// Set all users to reject document.
ParallelReject(USER1);
@@ -428,9 +425,9 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
Map<QName, Serializable> parameters = new HashMap<QName, Serializable>();
parameters.put(QName.createQName(NamespaceService.DEFAULT_URI, "testNode"), rootNodeRef);
WorkflowDefinition workflowDef = getTestDefinition();
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, parameters);
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.getId(), parameters);
assertNotNull(path);
WorkflowPath updatedPath = workflowComponent.signal(path.id, path.node.transitions[1].id);
WorkflowPath updatedPath = workflowComponent.signal(path.getId(), path.getNode().getTransitions()[1].getId());
assertNotNull(updatedPath);
}
@@ -442,22 +439,22 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
parameters.put(QName.createQName(NamespaceService.DEFAULT_URI, "reviewer"), AuthenticationUtil.getAdminUserName());
parameters.put(QName.createQName(NamespaceService.DEFAULT_URI, "testNode"), rootNodeRef);
parameters.put(QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "package"), packageComponent.createPackage(null));
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, parameters);
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.getId(), parameters);
assertNotNull(path);
List<WorkflowTask> tasks = workflowComponent.getTasksForWorkflowPath(path.id);
List<WorkflowTask> tasks = workflowComponent.getTasksForWorkflowPath(path.getId());
assertNotNull(tasks);
assertEquals(1, tasks.size());
WorkflowTask updatedTask = taskComponent.endTask(tasks.get(0).id, path.node.transitions[0].id);
WorkflowTask updatedTask = taskComponent.endTask(tasks.get(0).getId(), path.getNode().getTransitions()[0].getId());
assertNotNull(updatedTask);
List<WorkflowTask> completedTasks = taskComponent.getAssignedTasks(AuthenticationUtil.getAdminUserName(), WorkflowTaskState.COMPLETED);
assertNotNull(completedTasks);
completedTasks = filterTasksByWorkflowInstance(completedTasks, path.instance.id);
completedTasks = filterTasksByWorkflowInstance(completedTasks, path.getInstance().getId());
assertEquals(1, completedTasks.size());
List<WorkflowTask> assignedTasks = taskComponent.getAssignedTasks(AuthenticationUtil.getAdminUserName(), WorkflowTaskState.IN_PROGRESS);
assertNotNull(assignedTasks);
assignedTasks = filterTasksByWorkflowInstance(assignedTasks, path.instance.id);
assignedTasks = filterTasksByWorkflowInstance(assignedTasks, path.getInstance().getId());
assertEquals(1, assignedTasks.size());
assertEquals("review", assignedTasks.get(0).name);
assertEquals("review", assignedTasks.get(0).getName());
}
@@ -471,12 +468,12 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
Map<QName, Serializable> parameters = new HashMap<QName, Serializable>();
parameters.put(QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "assignees"), (Serializable)bpm_assignees);
parameters.put(QName.createQName(NamespaceService.DEFAULT_URI, "testNode"), rootNodeRef);
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, parameters);
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.getId(), parameters);
assertNotNull(path);
List<WorkflowTask> tasks = workflowComponent.getTasksForWorkflowPath(path.id);
List<WorkflowTask> tasks = workflowComponent.getTasksForWorkflowPath(path.getId());
assertNotNull(tasks);
assertEquals(1, tasks.size());
WorkflowTask updatedTask = taskComponent.endTask(tasks.get(0).id, "multi");
WorkflowTask updatedTask = taskComponent.endTask(tasks.get(0).getId(), "multi");
assertNotNull(updatedTask);
}
@@ -488,20 +485,20 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
parameters.put(QName.createQName(NamespaceService.DEFAULT_URI, "reviewer"), AuthenticationUtil.getAdminUserName());
parameters.put(QName.createQName(NamespaceService.DEFAULT_URI, "testNode"), rootNodeRef);
parameters.put(QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "package"), packageComponent.createPackage(null));
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, parameters);
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.getId(), parameters);
assertNotNull(path);
List<WorkflowTask> tasks1 = workflowComponent.getTasksForWorkflowPath(path.id);
List<WorkflowTask> tasks1 = workflowComponent.getTasksForWorkflowPath(path.getId());
assertNotNull(tasks1);
assertEquals(1, tasks1.size());
assertEquals(WorkflowTaskState.IN_PROGRESS, tasks1.get(0).state);
WorkflowTask updatedTask = taskComponent.endTask(tasks1.get(0).id, null);
assertEquals(WorkflowTaskState.IN_PROGRESS, tasks1.get(0).getState());
WorkflowTask updatedTask = taskComponent.endTask(tasks1.get(0).getId(), null);
assertNotNull(updatedTask);
assertEquals(WorkflowTaskState.COMPLETED, updatedTask.state);
assertEquals(WorkflowTaskState.COMPLETED, updatedTask.getState());
List<WorkflowTask> completedTasks = taskComponent.getAssignedTasks(AuthenticationUtil.getAdminUserName(), WorkflowTaskState.COMPLETED);
assertNotNull(completedTasks);
completedTasks = filterTasksByWorkflowInstance(completedTasks, path.instance.id);
completedTasks = filterTasksByWorkflowInstance(completedTasks, path.getInstance().getId());
assertEquals(1, completedTasks.size());
assertEquals(WorkflowTaskState.COMPLETED, completedTasks.get(0).state);
assertEquals(WorkflowTaskState.COMPLETED, completedTasks.get(0).getState());
}
@@ -511,15 +508,15 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
Map<QName, Serializable> parameters = new HashMap<QName, Serializable>();
parameters.put(QName.createQName(NamespaceService.DEFAULT_URI, "reviewer"), AuthenticationUtil.getAdminUserName());
parameters.put(QName.createQName(NamespaceService.DEFAULT_URI, "testNode"), rootNodeRef);
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, parameters);
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.getId(), parameters);
assertNotNull(path);
assertNotNull(path);
List<WorkflowTask> tasks1 = workflowComponent.getTasksForWorkflowPath(path.id);
List<WorkflowTask> tasks1 = workflowComponent.getTasksForWorkflowPath(path.getId());
assertNotNull(tasks1);
assertEquals(1, tasks1.size());
WorkflowTask getTask = taskComponent.getTaskById(tasks1.get(0).id);
WorkflowTask getTask = taskComponent.getTaskById(tasks1.get(0).getId());
assertNotNull(getTask);
assertEquals(getTask.id, tasks1.get(0).id);
assertEquals(getTask.getId(), tasks1.get(0).getId());
}
@@ -530,13 +527,13 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
parameters.put(QName.createQName(NamespaceService.DEFAULT_URI, "reviewer"), AuthenticationUtil.getAdminUserName());
parameters.put(QName.createQName(NamespaceService.DEFAULT_URI, "testNode"), rootNodeRef);
parameters.put(QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "package"), packageComponent.createPackage(null));
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, parameters);
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.getId(), parameters);
assertNotNull(path);
List<WorkflowTask> tasks1 = workflowComponent.getTasksForWorkflowPath(path.id);
List<WorkflowTask> tasks1 = workflowComponent.getTasksForWorkflowPath(path.getId());
assertNotNull(tasks1);
assertEquals(1, tasks1.size());
assertEquals(WorkflowTaskState.IN_PROGRESS, tasks1.get(0).state);
WorkflowTask updatedTask = taskComponent.endTask(tasks1.get(0).id, null);
assertEquals(WorkflowTaskState.IN_PROGRESS, tasks1.get(0).getState());
WorkflowTask updatedTask = taskComponent.endTask(tasks1.get(0).getId(), null);
assertNotNull(updatedTask);
}
@@ -550,17 +547,17 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
WorkflowDeployment deployment = workflowComponent.deployDefinition(processDef.getInputStream(), MimetypeMap.MIMETYPE_XML);
assertNotNull(deployment);
WorkflowDefinition workflowDef = deployment.definition;
WorkflowDefinition workflowDef = deployment.getDefinition();
Map<QName, Serializable> parameters = new HashMap<QName, Serializable>();
parameters.put(QName.createQName(NamespaceService.DEFAULT_URI, "testNode"), rootNodeRef);
parameters.put(QName.createQName(NamespaceService.BPM_MODEL_1_0_URI, "package"), packageComponent.createPackage(null));
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, parameters);
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.getId(), parameters);
assertNotNull(path);
List<WorkflowTask> tasks1 = workflowComponent.getTasksForWorkflowPath(path.id);
List<WorkflowTask> tasks1 = workflowComponent.getTasksForWorkflowPath(path.getId());
assertNotNull(tasks1);
assertEquals(1, tasks1.size());
assertEquals(WorkflowTaskState.IN_PROGRESS, tasks1.get(0).state);
WorkflowTask updatedTask = taskComponent.endTask(tasks1.get(0).id, null);
assertEquals(WorkflowTaskState.IN_PROGRESS, tasks1.get(0).getState());
WorkflowTask updatedTask = taskComponent.endTask(tasks1.get(0).getId(), null);
assertNotNull(updatedTask);
}
@@ -611,7 +608,7 @@ public class JBPMEngineTest extends BaseAlfrescoSpringTest
List<WorkflowTask> filteredTasks = new ArrayList<WorkflowTask>();
for (WorkflowTask task : tasks)
{
if (task.path.instance.id.equals(workflowInstanceId))
if (task.getPath().getInstance().getId().equals(workflowInstanceId))
{
filteredTasks.add(task);
}

View File

@@ -1,442 +0,0 @@
/*
* Copyright (C) 2005-2010 Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/
package org.alfresco.repo.workflow.jbpm;
import static org.mockito.Matchers.*;
import static org.mockito.Mockito.*;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.content.MimetypeMap;
import org.alfresco.repo.i18n.MessageService;
import org.alfresco.repo.tenant.TenantService;
import org.alfresco.repo.workflow.BPMEngineRegistry;
import org.alfresco.repo.workflow.WorkflowModel;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.cmr.dictionary.TypeDefinition;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.cmr.workflow.WorkflowDefinition;
import org.alfresco.service.cmr.workflow.WorkflowDeployment;
import org.alfresco.service.cmr.workflow.WorkflowException;
import org.alfresco.service.cmr.workflow.WorkflowInstance;
import org.alfresco.service.cmr.workflow.WorkflowPath;
import org.alfresco.service.cmr.workflow.WorkflowTask;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.NamespaceServiceMemoryImpl;
import org.alfresco.service.namespace.QName;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.test.AbstractTransactionalSpringContextTests;
import org.springmodules.workflow.jbpm31.JbpmTemplate;
/**
* JBPMEngine Unit Tests.
*
* @author Nick Smith
*/
public class JBPMEngineUnitTest extends AbstractTransactionalSpringContextTests
{
private static final String USER_NAME = "admin";
private static final String TEST_JBPM_ENGINE = "test_jbpm_engine";
private static final NodeRef companyHome = new NodeRef("for://test/home");
private JBPMEngine engine = new JBPMEngine();
private WorkflowDefinition workflowDef;
public void testDeployWorkflow() throws Exception
{
ClassPathResource processDef = new ClassPathResource("jbpmresources/test_processdefinition.xml");
List<WorkflowDefinition> workflowDefs = engine.getDefinitions();
assertFalse(engine.isDefinitionDeployed(processDef.getInputStream(), MimetypeMap.MIMETYPE_XML));
assertNotNull(workflowDefs);
int workflowDefCnt = workflowDefs.size();
deployTestDefinition();
assertTrue(engine.isDefinitionDeployed(processDef.getInputStream(), MimetypeMap.MIMETYPE_XML));
workflowDefs = engine.getDefinitions();
assertNotNull(workflowDefs);
assertEquals(workflowDefCnt+1, workflowDefs.size());
assertNotNull(workflowDef);
assertEquals(TEST_JBPM_ENGINE + "$test", workflowDef.name);
assertEquals("1", workflowDef.version);
deployTestDefinition();
assertTrue(engine.isDefinitionDeployed(processDef.getInputStream(), MimetypeMap.MIMETYPE_XML));
assertEquals("2", workflowDef.version);
}
public void testGetWorkflowInstance() throws Exception
{
deployTestDefinition();
WorkflowPath path = engine.startWorkflow(workflowDef.getId(), null);
checkPath(path);
WorkflowInstance instance = engine.getWorkflowById(path.instance.id);
assertNotNull(instance);
assertEquals(path.instance.id, instance.id);
}
public void testStartWorkflowWithoutPackage() throws Exception
{
try
{
engine.startWorkflow("norfolknchance", null);
fail("Failed to catch invalid definition id");
}
catch (WorkflowException e)
{ // Do nothing here!
}
deployTestDefinition();
WorkflowPath path = engine.startWorkflow(workflowDef.getId(), null);
assertNotNull(path);
assertTrue(path.id.endsWith("-@"));
assertNotNull(path.node);
assertNotNull(path.instance);
assertEquals(workflowDef.getId(), path.instance.definition.id);
}
public void testStartWorkflowParameters() throws Exception
{
Map<QName, Serializable> params = new HashMap<QName, Serializable>();
// protected - shouldn't be written
params.put(WorkflowModel.PROP_TASK_ID, 3);
// task instance field
params.put(WorkflowModel.PROP_DUE_DATE, new Date());
params.put(WorkflowModel.PROP_PRIORITY, 1); // task instance field
params.put(WorkflowModel.PROP_PERCENT_COMPLETE, 10); // context variable
// context variable outside of task definition
params.put(QName.createQName("", "Message"), "Hello World");
// context variable outside of task definition
params.put(QName.createQName("", "Array"), new String[] { "one", "two" });
// context variable outside of task definition
params.put(QName.createQName("", "NodeRef"), new NodeRef("workspace://1/1001"));
params.put(ContentModel.PROP_OWNER, "Owner"); // task assignment
deployTestDefinition();
WorkflowPath path = engine.startWorkflow(workflowDef.id, params);
checkPath(path);
List<WorkflowTask> tasks1 = engine.getTasksForWorkflowPath(path.id);
assertNotNull(tasks1);
assertEquals(1, tasks1.size());
WorkflowTask task = tasks1.get(0);
assertTrue(task.properties.containsKey(WorkflowModel.PROP_TASK_ID));
assertTrue(task.properties.containsKey(WorkflowModel.PROP_DUE_DATE));
assertTrue(task.properties.containsKey(WorkflowModel.PROP_PRIORITY));
assertTrue(task.properties.containsKey(WorkflowModel.PROP_PERCENT_COMPLETE));
assertTrue(task.properties.containsKey(ContentModel.PROP_OWNER));
// NodeRef initiator = path.instance.initiator;
// String initiatorUsername = (String)
// nodeService.getProperty(initiator,
// ContentModel.PROP_USERNAME);
// assertEquals(AuthenticationUtil.getAdminUserName(),
// initiatorUsername);
}
public void testUpdateTask() throws Exception
{
Map<QName, Serializable> params = new HashMap<QName, Serializable>();
// protected - shouldn't be written
params.put(WorkflowModel.PROP_TASK_ID, 3);
// task instance field
params.put(WorkflowModel.PROP_DUE_DATE, new Date());
params.put(WorkflowModel.PROP_PRIORITY, 1); // task instance field
params.put(WorkflowModel.PROP_PERCENT_COMPLETE, 10); // context variable
// context variable outside of task definition
params.put(QName.createQName("", "Message"), "Hello World");
// context variable outside of task definition
params.put(QName.createQName("", "Array"), new String[] { "one", "two" });
// context task assignment
params.put(QName.createQName("", "NodeRef"), new NodeRef("workspace://1/1001"));
params.put(ContentModel.PROP_OWNER, USER_NAME);
deployTestDefinition();
WorkflowPath path = engine.startWorkflow(workflowDef.id, params);
checkPath(path);
List<WorkflowTask> tasks1 = engine.getTasksForWorkflowPath(path.id);
assertNotNull(tasks1);
assertEquals(1, tasks1.size());
WorkflowTask task = tasks1.get(0);
assertTrue(task.properties.containsKey(WorkflowModel.PROP_TASK_ID));
assertTrue(task.properties.containsKey(WorkflowModel.PROP_DUE_DATE));
assertTrue(task.properties.containsKey(WorkflowModel.PROP_PRIORITY));
assertTrue(task.properties.containsKey(WorkflowModel.PROP_PERCENT_COMPLETE));
assertTrue(task.properties.containsKey(ContentModel.PROP_OWNER));
// update with null parameters
try
{
WorkflowTask taskU1 = engine.updateTask(task.id, null, null, null);
assertNotNull(taskU1);
}
catch (Throwable e)
{
fail("Task update failed with null parameters");
}
// update property value
Map<QName, Serializable> updateProperties2 = new HashMap<QName, Serializable>();
updateProperties2.put(WorkflowModel.PROP_PERCENT_COMPLETE, 100);
WorkflowTask taskU2 = engine.updateTask(task.id, updateProperties2, null, null);
assertEquals(100, taskU2.properties.get(WorkflowModel.PROP_PERCENT_COMPLETE));
// add to assocation
QName assocName = QName.createQName("", "TestAssoc");
List<NodeRef> toAdd = new ArrayList<NodeRef>();
toAdd.add(new NodeRef("workspace://1/1001"));
toAdd.add(new NodeRef("workspace://1/1002"));
toAdd.add(new NodeRef("workspace://1/1003"));
Map<QName, List<NodeRef>> addAssocs = new HashMap<QName, List<NodeRef>>();
addAssocs.put(assocName, toAdd);
WorkflowTask taskU3 = engine.updateTask(task.id, null, addAssocs, null);
assertNotNull(taskU3.properties.get(assocName));
Object assoc = taskU3.properties.get(assocName);
assertNotNull(assoc);
assertEquals(3, ((List<?>) assoc).size());
// add to assocation again
List<NodeRef> toAddAgain = new ArrayList<NodeRef>();
toAddAgain.add(new NodeRef("workspace://1/1004"));
toAddAgain.add(new NodeRef("workspace://1/1005"));
Map<QName, List<NodeRef>> addAssocsAgain = new HashMap<QName, List<NodeRef>>();
addAssocsAgain.put(assocName, toAddAgain);
WorkflowTask taskU4 = engine.updateTask(task.id, null, addAssocsAgain, null);
assertNotNull(taskU4.properties.get(assocName));
assoc = taskU4.properties.get(assocName);
assertEquals(5, ((List<?>) assoc).size());
// remove assocation
List<NodeRef> toRemove = new ArrayList<NodeRef>();
toRemove.add(new NodeRef("workspace://1/1002"));
toRemove.add(new NodeRef("workspace://1/1003"));
Map<QName, List<NodeRef>> removeAssocs = new HashMap<QName, List<NodeRef>>();
removeAssocs.put(assocName, toRemove);
WorkflowTask taskU5 = engine.updateTask(task.id, null, null, removeAssocs);
assertNotNull(taskU5.properties.get(assocName));
assoc = taskU5.properties.get(assocName);
assertEquals(3, ((List<?>) assoc).size());
}
public void testGetWorkflowInstances() throws Exception
{
deployTestDefinition();
WorkflowPath path1 = engine.startWorkflow(workflowDef.id, null);
WorkflowPath path2 = engine.startWorkflow(workflowDef.id, null);
List<WorkflowInstance> instances = engine.getActiveWorkflows(workflowDef.id);
assertNotNull(instances);
assertEquals(2, instances.size());
HashSet<String> ids = new HashSet<String>(2);
ids.add(path1.instance.id);
ids.add(path2.instance.id);
for (WorkflowInstance instance : instances)
{
assertEquals(workflowDef.id, instance.definition.id);
assertTrue(ids.contains(instance.id));
}
}
public void testGetPositions() throws Exception
{
deployTestDefinition();
engine.startWorkflow(workflowDef.id, null);
List<WorkflowInstance> instances = engine.getActiveWorkflows(workflowDef.id);
assertNotNull(instances);
assertEquals(1, instances.size());
List<WorkflowPath> paths = engine.getWorkflowPaths(instances.get(0).id);
assertNotNull(paths);
assertEquals(1, paths.size());
assertEquals(instances.get(0).id, paths.get(0).instance.id);
assertTrue(paths.get(0).id.endsWith("-@"));
}
private void checkPath(WorkflowPath path)
{
assertNotNull(path);
assertTrue(path.id.endsWith("-@"));
assertNotNull(path.node);
assertNotNull(path.instance);
assertEquals(workflowDef.id, path.instance.definition.id);
}
/*
* @seeorg.springframework.test.AbstractTransactionalSpringContextTests#
* onSetUpBeforeTransaction()
*/
@Override
protected void onSetUpBeforeTransaction() throws Exception
{
super.onSetUpBeforeTransaction();
// Mock up various services.
NodeService nodeService = mock(NodeService.class);
TenantService tenantService = makeTenantService();
NamespaceService namespaceService = makeNamespaceService();
DictionaryService dictionaryService = makeDictionaryService();
// Add services to ServiceRegistry
ServiceRegistry serviceRegistry = mock(ServiceRegistry.class);
when(serviceRegistry.getNodeService()).thenReturn(nodeService);
when(serviceRegistry.getNamespaceService()).thenReturn(namespaceService);
when(serviceRegistry.getDictionaryService()).thenReturn(dictionaryService);
BPMEngineRegistry engineRegistry = (BPMEngineRegistry) getApplicationContext().getBean(
"test_bpm_engineRegistry");
ConfigurableApplicationContext ctx = getApplicationContext();
JbpmTemplate jbpmTemplate = (JbpmTemplate) ctx.getBean("test_jbpm_template");
// Set up the JBPMEngine.
engine.setJBPMTemplate(jbpmTemplate);
engine.setTenantService(tenantService);
engine.setNodeService(nodeService);
engine.setServiceRegistry(serviceRegistry);
engine.setNamespaceService(namespaceService);
engine.setMessageService(mock(MessageService.class));
engine.setDictionaryService(dictionaryService);
engine.setEngineId(TEST_JBPM_ENGINE);
engine.setBPMEngineRegistry(engineRegistry);
// Need to register JBPMEngine with bean factory so WorflowTaskInstance
// can load it.
ConfigurableApplicationContext appContext = getApplicationContext();
if (!appContext.containsBean(TEST_JBPM_ENGINE))
appContext.getBeanFactory().registerSingleton(TEST_JBPM_ENGINE, engine);
}
@SuppressWarnings("unchecked")
private DictionaryService makeDictionaryService()
{
DictionaryService service = mock(DictionaryService.class);
// DictionaryService.getType(QName) always returns a mock
// TypeDefinition.
TypeDefinition typeDef = mock(TypeDefinition.class);
when(service.getType((QName) any())).thenReturn(typeDef);
// DictionaryService.getAnonymousType(QName, Collection<QName>)
// always returns a mock TypeDefinition
when(service.getAnonymousType((QName) any(),//
(Collection<QName>) any()))//
.thenReturn(typeDef);
return service;
}
// deploy test process definition
private void deployTestDefinition() throws IOException
{
ClassPathResource processDef = new ClassPathResource("jbpmresources/test_processdefinition.xml");
WorkflowDeployment deployment = engine.deployDefinition(processDef.getInputStream(), MimetypeMap.MIMETYPE_XML);
workflowDef = deployment.definition;
assertNotNull(workflowDef);
assertEquals(TEST_JBPM_ENGINE + "$test", workflowDef.name);
}
private NamespaceService makeNamespaceService()
{
NamespaceServiceMemoryImpl namespace = new NamespaceServiceMemoryImpl();
namespace.registerNamespace(NamespaceService.DEFAULT_PREFIX, NamespaceService.DEFAULT_URI);
namespace.registerNamespace("wf", "http://www.alfresco.org/model/bpm/1.0");
namespace.registerNamespace("cm", "http://www.alfresco.org/model/content/1.0");
namespace.registerNamespace("wcmwf", "http://www.alfresco.org/model/wcmworkflow/1.0");
namespace.registerNamespace("imwf", "http://www.alfresco.org/model/workflow/invite/moderated/1.0");
namespace.registerNamespace("inwf", "http://www.alfresco.org/model/workflow/invite/nominated/1.0");
return namespace;
}
private TenantService makeTenantService()
{
TenantService tenantService = mock(TenantService.class);
// Tenant Service.isEnabled() returns true.
when(tenantService.isEnabled()).thenReturn(true);
// TenantService.getRootNode always returns companyHome.
when(tenantService.getRootNode((NodeService) any(),//
(SearchService) any(),//
(NamespaceService) any(),//
anyString(),//
(NodeRef) any()))//
.thenReturn(companyHome);
// Tenant Service.getName(String) will return the input param.
when(tenantService.getName(anyString())).thenAnswer(new Answer<String>()
{
public String answer(InvocationOnMock invocation) throws Throwable
{
return (String) invocation.getArguments()[0];
}
});
when(tenantService.getBaseName(anyString())).thenAnswer(new Answer<String>()
{
public String answer(InvocationOnMock invocation) throws Throwable
{
return (String) invocation.getArguments()[0];
}
});
return tenantService;
}
/*
* @see
* org.springframework.test.AbstractSingleSpringContextTests#getConfigLocations
* ()
*/
@Override
protected String[] getConfigLocations()
{
String[] locations = new String[] {
"classpath:jbpm-test/test-workflow-context.xml", };
return locations;
}
}

View File

@@ -21,6 +21,7 @@ package org.alfresco.repo.workflow.jbpm;
import java.io.Serializable;
import java.util.Date;
import org.alfresco.repo.jscript.ScriptNode;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.QName;
@@ -36,7 +37,7 @@ import org.mozilla.javascript.Scriptable;
*
* @author davidc
*/
public class JBPMNode extends org.alfresco.repo.jscript.ScriptNode
public class JBPMNode extends ScriptNode
{
private static final long serialVersionUID = -826970280203254365L;
@@ -51,8 +52,8 @@ public class JBPMNode extends org.alfresco.repo.jscript.ScriptNode
super(nodeRef, services, null);
}
/* (non-Javadoc)
* @see org.alfresco.repo.jscript.Node#createValueConverter()
/**
* {@inheritDoc}
*/
@Override
protected NodeValueConverter createValueConverter()
@@ -63,7 +64,7 @@ public class JBPMNode extends org.alfresco.repo.jscript.ScriptNode
/**
* Value converter for beanshell.
*/
private class JBPMNodeConverter extends org.alfresco.repo.jscript.ScriptNode.NodeValueConverter
private class JBPMNodeConverter extends NodeValueConverter
{
@Override
public Serializable convertValueForRepo(Serializable value)
@@ -79,11 +80,11 @@ public class JBPMNode extends org.alfresco.repo.jscript.ScriptNode
}
@Override
public Serializable convertValueForScript(ServiceRegistry services, Scriptable scope, QName qname, Serializable value)
public Serializable convertValueForScript(ServiceRegistry serviceRegistry, Scriptable theScope, QName qname, Serializable value)
{
if (value instanceof NodeRef)
{
return new JBPMNode(((NodeRef)value), services);
return new JBPMNode(((NodeRef)value), serviceRegistry);
}
else if (value instanceof Date)
{
@@ -91,7 +92,7 @@ public class JBPMNode extends org.alfresco.repo.jscript.ScriptNode
}
else
{
return super.convertValueForScript(services, scope, qname, value);
return super.convertValueForScript(serviceRegistry, theScope, qname, value);
}
}
}

View File

@@ -0,0 +1,69 @@
/*
* Copyright (C) 2005-2010 Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/
package org.alfresco.repo.workflow.jbpm;
import org.alfresco.repo.workflow.AbstractWorkflowServiceIntegrationTest;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
/**
* Workflow Service Implementation Tests
*
* @author davidc
*/
public class JbpmWorkflowServiceIntegrationTest extends AbstractWorkflowServiceIntegrationTest
{
@Override
protected String getEngine()
{
return "jbpm";
}
@Override
protected String getTestDefinitionPath()
{
return "jbpmresources/test_simple_processdefinition.xml";
}
@Override
protected String getAdhocDefinitionPath()
{
return "alfresco/workflow/adhoc_processdefinition.xml";
}
@Override
protected String getPooledReviewDefinitionPath()
{
return "alfresco/workflow/review_pooled_processdefinition.xml";
}
@Override
protected String getTestTimerDefinitionPath()
{
return "jbpmresources/test_timer.xml";
}
@Override
protected QName getAdhocProcessName() {
return QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "adhoc");
}
}