Merging BRANCHES/V3.2 to HEAD:

19467: ALF-660 Fixed a bug wher
 an exception if no active workflo
 was because WorkflowService.getWo
 should have returned null.
 


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@19491 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
N Smith
2010-03-23 10:34:47 +00:00
parent b04b84d33e
commit 9567794ff2
2 changed files with 54 additions and 42 deletions

View File

@@ -154,7 +154,6 @@ public class JBPMEngine extends BPMEngine
"select timer " + "select timer " +
"from org.jbpm.job.Timer timer " + "from org.jbpm.job.Timer timer " +
"where timer.processInstance = :process "; "where timer.processInstance = :process ";
// Workflow Path Seperators // Workflow Path Seperators
private final static String WORKFLOW_PATH_SEPERATOR = "-"; private final static String WORKFLOW_PATH_SEPERATOR = "-";
@@ -654,7 +653,6 @@ public class JBPMEngine extends BPMEngine
/* (non-Javadoc) /* (non-Javadoc)
* @see org.alfresco.repo.workflow.WorkflowComponent#startWorkflow(java.lang.String, java.util.Map) * @see org.alfresco.repo.workflow.WorkflowComponent#startWorkflow(java.lang.String, java.util.Map)
*/ */
@SuppressWarnings("unchecked")
public WorkflowPath startWorkflow(final String workflowDefinitionId, final Map<QName, Serializable> parameters) public WorkflowPath startWorkflow(final String workflowDefinitionId, final Map<QName, Serializable> parameters)
{ {
try try
@@ -765,7 +763,7 @@ public class JBPMEngine extends BPMEngine
{ {
// retrieve workflow // retrieve workflow
GraphSession graphSession = context.getGraphSession(); GraphSession graphSession = context.getGraphSession();
ProcessInstance processInstance = getProcessInstance(graphSession, workflowId); ProcessInstance processInstance = getProcessInstanceIfExists(graphSession, workflowId);
return processInstance == null ? null : createWorkflowInstance(processInstance); return processInstance == null ? null : createWorkflowInstance(processInstance);
} }
}); });
@@ -776,16 +774,9 @@ public class JBPMEngine extends BPMEngine
} }
} }
/** private ProcessInstance getProcessInstanceIfExists(GraphSession graphSession, String workflowId)
* Gets a jBPM Process Instance
* @param graphSession jBPM graph session
* @param workflowId workflow id
* @return process instance
*/
protected ProcessInstance getProcessInstance(GraphSession graphSession, String workflowId)
{ {
ProcessInstance processInstance = graphSession.getProcessInstance(getJbpmId(workflowId)); ProcessInstance processInstance = graphSession.getProcessInstance(getJbpmId(workflowId));
if ((processInstance != null) && (tenantService.isEnabled())) if ((processInstance != null) && (tenantService.isEnabled()))
{ {
try try
@@ -797,7 +788,18 @@ public class JBPMEngine extends BPMEngine
processInstance = null; processInstance = null;
} }
} }
return processInstance;
}
/**
* Gets a jBPM Process Instance
* @param graphSession jBPM graph session
* @param workflowId workflow id
* @return process instance
*/
protected ProcessInstance getProcessInstance(GraphSession graphSession, String workflowId)
{
ProcessInstance processInstance = getProcessInstanceIfExists(graphSession, workflowId);
if (processInstance == null) if (processInstance == null)
{ {
throw new WorkflowException("Workflow instance '" + workflowId + "' does not exist"); throw new WorkflowException("Workflow instance '" + workflowId + "' does not exist");
@@ -901,7 +903,6 @@ public class JBPMEngine extends BPMEngine
{ {
return (WorkflowInstance) jbpmTemplate.execute(new JbpmCallback() return (WorkflowInstance) jbpmTemplate.execute(new JbpmCallback()
{ {
@SuppressWarnings("unchecked")
public Object doInJbpm(JbpmContext context) public Object doInJbpm(JbpmContext context)
{ {
// retrieve and cancel process instance // retrieve and cancel process instance
@@ -934,7 +935,6 @@ public class JBPMEngine extends BPMEngine
{ {
return (WorkflowInstance) jbpmTemplate.execute(new JbpmCallback() return (WorkflowInstance) jbpmTemplate.execute(new JbpmCallback()
{ {
@SuppressWarnings("unchecked")
public Object doInJbpm(JbpmContext context) public Object doInJbpm(JbpmContext context)
{ {
// retrieve and cancel process instance // retrieve and cancel process instance
@@ -1379,20 +1379,8 @@ public class JBPMEngine extends BPMEngine
createProcessCriteria(variables, query); createProcessCriteria(variables, query);
// retrieve list of processes matching specified variables // retrieve list of processes matching specified variables
List<ProcessInstance> processList = variables.list(); List<?> processList = variables.list();
Object[] processIds = null; Object[] processIds = getProcessIds( processList);
if (processList.size() == 0)
{
processIds = new Object[] { new Long(-1) };
}
else
{
processIds = new Object[processList.size()];
for (int i = 0; i < processList.size(); i++)
{
processIds[i] = processList.get(i).getId();
}
}
// constrain tasks by process list // constrain tasks by process list
process = (process == null) ? task.createCriteria("processInstance") : process; process = (process == null) ? task.createCriteria("processInstance") : process;
@@ -1459,6 +1447,23 @@ public class JBPMEngine extends BPMEngine
return task; return task;
} }
private Object[] getProcessIds(List<?> processList) {
ArrayList<Object> ids = new ArrayList<Object>(processList.size());
if (processList.isEmpty())
{
ids.add(new Long(-1));
}
else
{
for (Object obj : processList)
{
ProcessInstance instance = (ProcessInstance) obj;
ids.add(instance.getId());
}
}
return ids.toArray();
}
/** /**
* Create process-specific query criteria * Create process-specific query criteria
@@ -1553,7 +1558,8 @@ public class JBPMEngine extends BPMEngine
{ {
return (WorkflowTask) jbpmTemplate.execute(new JbpmCallback() return (WorkflowTask) jbpmTemplate.execute(new JbpmCallback()
{ {
public Object doInJbpm(JbpmContext context) @SuppressWarnings("unchecked")
public Object doInJbpm(JbpmContext context)
{ {
// retrieve task // retrieve task
TaskMgmtSession taskSession = context.getTaskMgmtSession(); TaskMgmtSession taskSession = context.getTaskMgmtSession();
@@ -1589,7 +1595,7 @@ public class JBPMEngine extends BPMEngine
} }
else else
{ {
for (NodeRef nodeRef : (List<NodeRef>)toAdd.getValue()) for (NodeRef nodeRef : toAdd.getValue())
{ {
if (!(existingAdd.contains(nodeRef))) if (!(existingAdd.contains(nodeRef)))
{ {
@@ -2080,9 +2086,9 @@ public class JBPMEngine extends BPMEngine
} }
// convert property value // convert property value
if (value instanceof Collection) if (value instanceof Collection<?>)
{ {
value = (Serializable)DefaultTypeConverter.INSTANCE.convert(propDef.getDataType(), (Collection)value); value = (Serializable)DefaultTypeConverter.INSTANCE.convert(propDef.getDataType(), (Collection<?>)value);
} }
else else
{ {
@@ -2132,7 +2138,7 @@ public class JBPMEngine extends BPMEngine
} }
// NOTE: Only use first comment in list // NOTE: Only use first comment in list
final List<Comment> comments = instance.getComments(); final List<?> comments = instance.getComments();
if (comments != null && comments.size() > 0) if (comments != null && comments.size() > 0)
{ {
// remove existing comments // remove existing comments
@@ -2142,8 +2148,9 @@ public class JBPMEngine extends BPMEngine
public Object doInJbpm(JbpmContext context) public Object doInJbpm(JbpmContext context)
{ {
Session session = context.getSession(); Session session = context.getSession();
for (Comment comment : comments) for (Object obj: comments)
{ {
Comment comment = (Comment) obj;
comment.getToken().getComments().remove(comment); comment.getToken().getComments().remove(comment);
session.delete(comment); session.delete(comment);
} }
@@ -2356,13 +2363,13 @@ public class JBPMEngine extends BPMEngine
if (!processContext.hasVariable(workflowPackageName)) if (!processContext.hasVariable(workflowPackageName))
{ {
Serializable packageNodeRef = taskProperties.get(WorkflowModel.ASSOC_PACKAGE); Serializable packageNodeRef = taskProperties.get(WorkflowModel.ASSOC_PACKAGE);
processContext.setVariable(workflowPackageName, convertNodeRefs(packageNodeRef instanceof List, packageNodeRef)); processContext.setVariable(workflowPackageName, convertNodeRefs(packageNodeRef instanceof List<?>, packageNodeRef));
} }
String workflowContextName = mapQNameToName(WorkflowModel.PROP_CONTEXT); String workflowContextName = mapQNameToName(WorkflowModel.PROP_CONTEXT);
if (!processContext.hasVariable(workflowContextName)) if (!processContext.hasVariable(workflowContextName))
{ {
Serializable contextRef = taskProperties.get(WorkflowModel.PROP_CONTEXT); Serializable contextRef = taskProperties.get(WorkflowModel.PROP_CONTEXT);
processContext.setVariable(workflowContextName, convertNodeRefs(contextRef instanceof List, contextRef)); processContext.setVariable(workflowContextName, convertNodeRefs(contextRef instanceof List<?>, contextRef));
} }
} }
@@ -2414,7 +2421,7 @@ public class JBPMEngine extends BPMEngine
if (isMandatory) if (isMandatory)
{ {
Object value = existingValues.get(entry.getKey()); Object value = existingValues.get(entry.getKey());
if (value == null || (value instanceof List && ((List)value).size() == 0)) if (value == null || (value instanceof List<?> && ((List<?>)value).isEmpty()))
{ {
if (missingProps == null) if (missingProps == null)
{ {
@@ -2475,7 +2482,8 @@ public class JBPMEngine extends BPMEngine
* @param value value to convert * @param value value to convert
* @return JBPMNodeList or JBPMNode * @return JBPMNodeList or JBPMNode
*/ */
private Serializable convertNodeRefs(boolean isMany, Serializable value) @SuppressWarnings("unchecked")
private Serializable convertNodeRefs(boolean isMany, Serializable value)
{ {
if (value instanceof NodeRef) if (value instanceof NodeRef)
{ {

View File

@@ -157,7 +157,7 @@ public class JBPMEngineTest extends BaseSpringTest
} }
public void testGetWorkflowInstance() public void testGetWorkflowById()
{ {
WorkflowDefinition workflowDef = getTestDefinition(); WorkflowDefinition workflowDef = getTestDefinition();
WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, null); WorkflowPath path = workflowComponent.startWorkflow(workflowDef.id, null);
@@ -169,6 +169,10 @@ public class JBPMEngineTest extends BaseSpringTest
WorkflowInstance instance = workflowComponent.getWorkflowById(path.instance.id); WorkflowInstance instance = workflowComponent.getWorkflowById(path.instance.id);
assertNotNull(instance); assertNotNull(instance);
assertEquals(path.instance.id, instance.id); assertEquals(path.instance.id, instance.id);
workflowComponent.cancelWorkflow(instance.id);
WorkflowInstance result = workflowComponent.getWorkflowById(instance.id);
assertNull("The workflow isntance should be null!", result);
} }
@@ -267,7 +271,7 @@ public class JBPMEngineTest extends BaseSpringTest
addAssocs.put(assocName, toAdd); addAssocs.put(assocName, toAdd);
WorkflowTask taskU3 = taskComponent.updateTask(task.id, null, addAssocs, null); WorkflowTask taskU3 = taskComponent.updateTask(task.id, null, addAssocs, null);
assertNotNull(taskU3.properties.get(assocName)); assertNotNull(taskU3.properties.get(assocName));
assertEquals(3, ((List<NodeRef>)taskU3.properties.get(assocName)).size()); assertEquals(3, ((List<?>)taskU3.properties.get(assocName)).size());
// add to assocation again // add to assocation again
List<NodeRef> toAddAgain = new ArrayList<NodeRef>(); List<NodeRef> toAddAgain = new ArrayList<NodeRef>();
@@ -277,7 +281,7 @@ public class JBPMEngineTest extends BaseSpringTest
addAssocsAgain.put(assocName, toAddAgain); addAssocsAgain.put(assocName, toAddAgain);
WorkflowTask taskU4 = taskComponent.updateTask(task.id, null, addAssocsAgain, null); WorkflowTask taskU4 = taskComponent.updateTask(task.id, null, addAssocsAgain, null);
assertNotNull(taskU4.properties.get(assocName)); assertNotNull(taskU4.properties.get(assocName));
assertEquals(5, ((List<NodeRef>)taskU4.properties.get(assocName)).size()); assertEquals(5, ((List<?>)taskU4.properties.get(assocName)).size());
// remove assocation // remove assocation
List<NodeRef> toRemove = new ArrayList<NodeRef>(); List<NodeRef> toRemove = new ArrayList<NodeRef>();
@@ -287,7 +291,7 @@ public class JBPMEngineTest extends BaseSpringTest
removeAssocs.put(assocName, toRemove); removeAssocs.put(assocName, toRemove);
WorkflowTask taskU5 = taskComponent.updateTask(task.id, null, null, removeAssocs); WorkflowTask taskU5 = taskComponent.updateTask(task.id, null, null, removeAssocs);
assertNotNull(taskU5.properties.get(assocName)); assertNotNull(taskU5.properties.get(assocName));
assertEquals(3, ((List<NodeRef>)taskU5.properties.get(assocName)).size()); assertEquals(3, ((List<?>)taskU5.properties.get(assocName)).size());
} }