mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-24 17:32:48 +00:00
Workflow:
- additional task model properties for task action groups - fix issue persisting and retrieving noderef lists in jbpm (as found by Gav) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@3566 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -20,6 +20,7 @@ import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@@ -39,6 +40,7 @@ import org.alfresco.repo.workflow.WorkflowModel;
|
||||
import org.alfresco.service.ServiceRegistry;
|
||||
import org.alfresco.service.cmr.dictionary.AspectDefinition;
|
||||
import org.alfresco.service.cmr.dictionary.AssociationDefinition;
|
||||
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
|
||||
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
||||
import org.alfresco.service.cmr.dictionary.PropertyDefinition;
|
||||
import org.alfresco.service.cmr.dictionary.TypeDefinition;
|
||||
@@ -1131,10 +1133,20 @@ public class JBPMEngine extends BPMEngine
|
||||
}
|
||||
|
||||
// convert property value
|
||||
value = (Serializable)DefaultTypeConverter.INSTANCE.convert(propDef.getDataType(), value);
|
||||
if (value instanceof NodeRef)
|
||||
if (value instanceof Collection)
|
||||
{
|
||||
value = new JBPMNode((NodeRef)value, serviceRegistry);
|
||||
value = (Serializable)DefaultTypeConverter.INSTANCE.convert(propDef.getDataType(), (Collection)value);
|
||||
}
|
||||
else
|
||||
{
|
||||
value = (Serializable)DefaultTypeConverter.INSTANCE.convert(propDef.getDataType(), value);
|
||||
}
|
||||
|
||||
// convert NodeRefs to JBPMNodes
|
||||
DataTypeDefinition dataTypeDef = propDef.getDataType();
|
||||
if (dataTypeDef.getName().equals(DataTypeDefinition.NODE_REF))
|
||||
{
|
||||
value = convertNodeRefs(propDef.isMultiValued(), value);
|
||||
}
|
||||
|
||||
// map property to specific jBPM task instance field
|
||||
@@ -1173,7 +1185,7 @@ public class JBPMEngine extends BPMEngine
|
||||
if (assocDef != null)
|
||||
{
|
||||
// convert association to JBPMNodes
|
||||
value = convertAssociation(assocDef, value);
|
||||
value = convertNodeRefs(assocDef.isTargetMany(), value);
|
||||
|
||||
// map association to specific jBPM task instance field
|
||||
if (key.equals(WorkflowModel.ASSOC_POOLED_ACTORS))
|
||||
@@ -1222,14 +1234,12 @@ public class JBPMEngine extends BPMEngine
|
||||
/**
|
||||
* Convert a Repository association to JBPMNodeList or JBPMNode
|
||||
*
|
||||
* @param assocDef association definition
|
||||
* @param isMany true => force conversion to list
|
||||
* @param value value to convert
|
||||
* @return JBPMNodeList or JBPMNode
|
||||
* @return JBPMNodeList or JBPMNode
|
||||
*/
|
||||
private Serializable convertAssociation(AssociationDefinition assocDef, Serializable value)
|
||||
private Serializable convertNodeRefs(boolean isMany, Serializable value)
|
||||
{
|
||||
boolean isMany = assocDef.isTargetMany();
|
||||
|
||||
if (value instanceof NodeRef)
|
||||
{
|
||||
if (isMany)
|
||||
@@ -1244,8 +1254,7 @@ public class JBPMEngine extends BPMEngine
|
||||
value = new JBPMNode((NodeRef)value, serviceRegistry);
|
||||
}
|
||||
}
|
||||
|
||||
if (value instanceof List)
|
||||
else if (value instanceof List)
|
||||
{
|
||||
if (isMany)
|
||||
{
|
||||
|
@@ -21,7 +21,7 @@ import java.util.List;
|
||||
|
||||
import org.alfresco.service.ServiceRegistry;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.jbpm.context.exe.Converter;
|
||||
import org.jbpm.context.exe.converter.SerializableToByteArrayConverter;
|
||||
import org.springframework.beans.factory.access.BeanFactoryLocator;
|
||||
import org.springframework.beans.factory.access.BeanFactoryReference;
|
||||
import org.springmodules.workflow.jbpm31.JbpmFactoryLocator;
|
||||
@@ -32,7 +32,7 @@ import org.springmodules.workflow.jbpm31.JbpmFactoryLocator;
|
||||
*
|
||||
* @author davidc
|
||||
*/
|
||||
public class NodeListConverter implements Converter
|
||||
public class NodeListConverter extends SerializableToByteArrayConverter
|
||||
{
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
@@ -65,7 +65,7 @@ public class NodeListConverter implements Converter
|
||||
{
|
||||
values.add(node.getNodeRef());
|
||||
}
|
||||
converted = values;
|
||||
converted = super.convert(values);
|
||||
}
|
||||
return converted;
|
||||
}
|
||||
@@ -79,10 +79,10 @@ public class NodeListConverter implements Converter
|
||||
Object reverted = null;
|
||||
if (o != null)
|
||||
{
|
||||
List<NodeRef> nodeRefs = (List<NodeRef>)super.revert(o);
|
||||
BeanFactoryReference factory = jbpmFactoryLocator.useBeanFactory(null);
|
||||
ServiceRegistry serviceRegistry = (ServiceRegistry)factory.getFactory().getBean(ServiceRegistry.SERVICE_REGISTRY);
|
||||
|
||||
List<NodeRef> nodeRefs = (List<NodeRef>)o;
|
||||
JBPMNodeList nodes = new JBPMNodeList();
|
||||
for (NodeRef nodeRef : nodeRefs)
|
||||
{
|
||||
|
@@ -119,6 +119,34 @@ public class ReviewAndApproveTest extends BaseSpringTest
|
||||
assertEquals(reviewDueDate, assignedTasks.get(0).properties.get(WorkflowModel.PROP_DUE_DATE));
|
||||
}
|
||||
|
||||
public void testCompletedItems()
|
||||
{
|
||||
WorkflowDefinition workflowDef = testWorkflowDef;
|
||||
|
||||
List<NodeRef> nodeRefs = new ArrayList<NodeRef>();
|
||||
nodeRefs.add(testNodeRef);
|
||||
nodeRefs.add(testNodeRef);
|
||||
|
||||
Map<QName, Serializable> params = new HashMap<QName, Serializable>();
|
||||
params.put(WorkflowModel.ASSOC_PACKAGE, testNodeRef);
|
||||
params.put(WorkflowModel.PROP_COMPLETED_ITEMS, (Serializable)nodeRefs);
|
||||
Date reviewDueDate = new Date();
|
||||
params.put(QName.createQName("http://www.alfresco.org/model/workflow/1.0", "reviewDueDate"), reviewDueDate);
|
||||
NodeRef reviewer = personService.getPerson("admin");
|
||||
params.put(QName.createQName("http://www.alfresco.org/model/workflow/1.0", "reviewer"), reviewer);
|
||||
|
||||
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, params);
|
||||
assertNotNull(path);
|
||||
List<WorkflowTask> tasks1 = workflowComponent.getTasksForWorkflowPath(path.id);
|
||||
assertNotNull(tasks1);
|
||||
assertEquals(1, tasks1.size());
|
||||
|
||||
WorkflowTask task = tasks1.get(0);
|
||||
assertTrue(task.properties.containsKey(WorkflowModel.PROP_COMPLETED_ITEMS));
|
||||
assertEquals(2, ((List)task.properties.get(WorkflowModel.PROP_COMPLETED_ITEMS)).size());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Filter task list by workflow instance
|
||||
*
|
||||
|
Reference in New Issue
Block a user