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:
David Caruana
2006-08-22 16:44:58 +00:00
parent aabbd7e00b
commit 6f462eae09
5 changed files with 109 additions and 21 deletions

View File

@@ -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)
{

View File

@@ -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)
{

View File

@@ -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
*