From 21b5d8a41fc69b3480e3ca632b7a2cc83536063b Mon Sep 17 00:00:00 2001 From: Frederik Heremans Date: Mon, 16 Apr 2012 10:06:16 +0000 Subject: [PATCH] ALF-13640: fix merged from V4.0-BUGFIX branch git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@35257 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repo/workflow/WorkflowObjectFactory.java | 2 +- .../AbstractActivitiComponentTest.java | 11 ++++ .../activiti/ActivitiTaskComponentTest.java | 63 +++++++++++++++++-- .../properties/ActivitiPropertyConverter.java | 15 +++-- 4 files changed, 82 insertions(+), 9 deletions(-) diff --git a/source/java/org/alfresco/repo/workflow/WorkflowObjectFactory.java b/source/java/org/alfresco/repo/workflow/WorkflowObjectFactory.java index 423dc4cbf7..e499d792da 100644 --- a/source/java/org/alfresco/repo/workflow/WorkflowObjectFactory.java +++ b/source/java/org/alfresco/repo/workflow/WorkflowObjectFactory.java @@ -226,7 +226,7 @@ public class WorkflowObjectFactory String processKey = getProcessKey(defName) + ".task." + name; TypeDefinition metadata = taskDef.getMetadata(); String title = getLabel(processKey, TITLE_LABEL, metadata.getTitle(), defaultTitle, name); - String description = getLabel(processKey, DESC_LABEL, metadata.getDescription(), title, defaultDescription); + String description = getLabel(processKey, DESC_LABEL, metadata.getDescription(), defaultDescription, title); return new WorkflowTask(actualId, taskDef, name, title, description, state, path, properties); diff --git a/source/java/org/alfresco/repo/workflow/activiti/AbstractActivitiComponentTest.java b/source/java/org/alfresco/repo/workflow/activiti/AbstractActivitiComponentTest.java index aaa52b4b3b..4418d51542 100644 --- a/source/java/org/alfresco/repo/workflow/activiti/AbstractActivitiComponentTest.java +++ b/source/java/org/alfresco/repo/workflow/activiti/AbstractActivitiComponentTest.java @@ -389,6 +389,17 @@ public class AbstractActivitiComponentTest return (String) arg; } }); + + when(tenantService.getName(anyString())).thenAnswer(new Answer() + { + public String answer(InvocationOnMock invocation) throws Throwable + { + Object arg= invocation.getArguments()[0]; + return (String) arg; + } + }); + + when(tenantService.getCurrentUserDomain()).thenReturn(""); } @After diff --git a/source/java/org/alfresco/repo/workflow/activiti/ActivitiTaskComponentTest.java b/source/java/org/alfresco/repo/workflow/activiti/ActivitiTaskComponentTest.java index 27baa192ce..b59b987f60 100644 --- a/source/java/org/alfresco/repo/workflow/activiti/ActivitiTaskComponentTest.java +++ b/source/java/org/alfresco/repo/workflow/activiti/ActivitiTaskComponentTest.java @@ -448,13 +448,13 @@ public class ActivitiTaskComponentTest extends AbstractActivitiComponentTest // Test query by process-name taskQuery = createWorkflowTaskQuery(WorkflowTaskState.IN_PROGRESS); - taskQuery.setProcessName(QName.createQName("testTask")); + taskQuery.setWorkflowDefinitionName("testTask"); tasks = workflowEngine.queryTasks(taskQuery); Assert.assertNotNull(tasks); Assert.assertEquals(1, tasks.size()); - taskQuery.setProcessName(QName.createQName("unexistingTaskName")); + taskQuery.setWorkflowDefinitionName("unexistingTaskName"); tasks = workflowEngine.queryTasks(taskQuery); Assert.assertNotNull(tasks); Assert.assertEquals(0, tasks.size()); @@ -635,14 +635,14 @@ public class ActivitiTaskComponentTest extends AbstractActivitiComponentTest // Test query by process-name taskQuery = createWorkflowTaskQuery(WorkflowTaskState.COMPLETED); - taskQuery.setProcessName(QName.createQName("testTask")); + taskQuery.setWorkflowDefinitionName("testTask"); taskQuery.setActive(Boolean.FALSE); tasks = workflowEngine.queryTasks(taskQuery); Assert.assertNotNull(tasks); Assert.assertEquals(1, tasks.size()); - taskQuery.setProcessName(QName.createQName("unexistingTaskName")); + taskQuery.setWorkflowDefinitionName("unexistingTaskName"); tasks = workflowEngine.queryTasks(taskQuery); Assert.assertNotNull(tasks); Assert.assertEquals(0, tasks.size()); @@ -704,6 +704,61 @@ public class ActivitiTaskComponentTest extends AbstractActivitiComponentTest assertEquals(1, tasks.size()); } + @SuppressWarnings("unchecked") + @Test + public void testUpdateTask() { + NodeRef nodeRef = new NodeRef("workspace:///someRef"); + NodeRef anotherRef = new NodeRef("workspace:///anotherRef"); + + QName propQname = QName.createQName("testProp"); + QName nodeRefPropQname = QName.createQName("testAssoc"); + HashMap props = new HashMap(); + + // Start the workflow-path + WorkflowPath path = workflowEngine.startWorkflow(workflowDef.getId(), props); + WorkflowTask startTask = workflowEngine.getStartTask(path.getInstance().getId()); + + // End the start-task + workflowEngine.endTask(startTask.getId(), null); + + // Get the task to update + WorkflowTaskQuery taskQuery = createWorkflowTaskQuery(WorkflowTaskState.IN_PROGRESS); + taskQuery.setProcessId(path.getInstance().getId()); + + List tasks = workflowEngine.queryTasks(taskQuery); + WorkflowTask task = tasks.get(0); + + // Test altering plain properties + props = new HashMap(); + props.put(propQname, "54321"); + workflowEngine.updateTask(task.getId(), props, null, null); + + tasks = workflowEngine.queryTasks(taskQuery); + task = tasks.get(0); + assertEquals("54321", task.getProperties().get(propQname)); + + // Test adding association + HashMap> toAdd = new HashMap>(); + toAdd.put(nodeRefPropQname, Arrays.asList(anotherRef, nodeRef)); + + workflowEngine.updateTask(task.getId(), null, toAdd, null); + + tasks = workflowEngine.queryTasks(taskQuery); + task = tasks.get(0); + assertEquals(2, ((List)task.getProperties().get(nodeRefPropQname)).size()); + + // Test removing association + HashMap> toRemove = new HashMap>(); + toRemove.put(nodeRefPropQname, Arrays.asList(nodeRef)); + + workflowEngine.updateTask(task.getId(), null, null, toRemove); + + tasks = workflowEngine.queryTasks(taskQuery); + task = tasks.get(0); + assertEquals(1, ((List)task.getProperties().get(nodeRefPropQname)).size()); + assertEquals(anotherRef, ((List)task.getProperties().get(nodeRefPropQname)).get(0)); + } + private void checkTaskVariableTaskPresent(WorkflowTaskState state, QName varName, Object varValue, String expectedTask) { diff --git a/source/java/org/alfresco/repo/workflow/activiti/properties/ActivitiPropertyConverter.java b/source/java/org/alfresco/repo/workflow/activiti/properties/ActivitiPropertyConverter.java index 04b777de87..258ec49a57 100644 --- a/source/java/org/alfresco/repo/workflow/activiti/properties/ActivitiPropertyConverter.java +++ b/source/java/org/alfresco/repo/workflow/activiti/properties/ActivitiPropertyConverter.java @@ -385,10 +385,12 @@ public class ActivitiPropertyConverter Serializable existingValue = existingValues.get(WorkflowModel.PROP_PRIORITY); try { - for (ConstraintDefinition constraintDef : priorDef.getConstraints()) - { - constraintDef.getConstraint().evaluate(existingValue); - } + if(priorDef != null) { + for (ConstraintDefinition constraintDef : priorDef.getConstraints()) + { + constraintDef.getConstraint().evaluate(existingValue); + } + } } catch (ConstraintException ce) { @@ -687,6 +689,7 @@ public class ActivitiPropertyConverter if (existingAdd == null) { existingAdd = (List) existingProperties.get(toAdd.getKey()); + newProperties.put(toAdd.getKey(), (Serializable) existingAdd); } // make the additions @@ -718,6 +721,10 @@ public class ActivitiPropertyConverter if (existingRemove == null) { existingRemove = (List) existingProperties.get(toRemove.getKey()); + if(existingRemove != null) { + existingRemove = new ArrayList(existingRemove); + newProperties.put(toRemove.getKey(), (Serializable) existingRemove); + } } // make the subtractions