mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-24 17:32:48 +00:00
Workflow Service:
1) Fix bug in retrieving completed tasks for an authority - unfortunately, this is not provided OOTB by jBPM!, so extended in their recommended way 2) Support for creating a Workflow Package (a container of content that's routed through the workflow) - can create a new container or provide an existing one (e.g. a versioned folder, layered folder). Provide appropriate patch for creating workflow system folder in repository etc. 3) Collapsed WorkflowDefinitionComponent into WorkflowComponent interface git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@3522 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -34,7 +34,6 @@ import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||
import org.alfresco.repo.workflow.BPMEngine;
|
||||
import org.alfresco.repo.workflow.TaskComponent;
|
||||
import org.alfresco.repo.workflow.WorkflowComponent;
|
||||
import org.alfresco.repo.workflow.WorkflowDefinitionComponent;
|
||||
import org.alfresco.repo.workflow.WorkflowModel;
|
||||
import org.alfresco.service.ServiceRegistry;
|
||||
import org.alfresco.service.cmr.dictionary.AspectDefinition;
|
||||
@@ -55,6 +54,8 @@ import org.alfresco.service.cmr.workflow.WorkflowTaskDefinition;
|
||||
import org.alfresco.service.cmr.workflow.WorkflowTaskState;
|
||||
import org.alfresco.service.namespace.NamespaceService;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.hibernate.Query;
|
||||
import org.hibernate.Session;
|
||||
import org.hibernate.proxy.HibernateProxy;
|
||||
import org.jbpm.JbpmContext;
|
||||
import org.jbpm.JbpmException;
|
||||
@@ -81,7 +82,7 @@ import org.springmodules.workflow.jbpm31.JbpmTemplate;
|
||||
* @author davidc
|
||||
*/
|
||||
public class JBPMEngine extends BPMEngine
|
||||
implements WorkflowDefinitionComponent, WorkflowComponent, TaskComponent
|
||||
implements WorkflowComponent, TaskComponent
|
||||
{
|
||||
// Implementation dependencies
|
||||
protected DictionaryService dictionaryService;
|
||||
@@ -91,6 +92,16 @@ public class JBPMEngine extends BPMEngine
|
||||
protected PersonService personService;
|
||||
private JbpmTemplate jbpmTemplate;
|
||||
|
||||
// Note: jBPM query which is not provided out-of-the-box
|
||||
// TODO: Check jBPM 3.2 and get this implemented in jBPM
|
||||
private final static String COMPLETED_TASKS_QUERY =
|
||||
"select ti " +
|
||||
"from org.jbpm.taskmgmt.exe.TaskInstance as ti " +
|
||||
"where ti.actorId = :actorId " +
|
||||
"and ti.isOpen = false " +
|
||||
"and ti.end is not null";
|
||||
|
||||
|
||||
/**
|
||||
* Sets the JBPM Template used for accessing JBoss JBPM in the correct context
|
||||
*
|
||||
@@ -528,27 +539,61 @@ public class JBPMEngine extends BPMEngine
|
||||
public List<WorkflowTask> doInJbpm(JbpmContext context)
|
||||
{
|
||||
// retrieve tasks assigned to authority
|
||||
TaskMgmtSession taskSession = context.getTaskMgmtSession();
|
||||
List<TaskInstance> tasks = taskSession.findTaskInstances(authority);
|
||||
List<TaskInstance> tasks;
|
||||
if (state.equals(WorkflowTaskState.IN_PROGRESS))
|
||||
{
|
||||
TaskMgmtSession taskSession = context.getTaskMgmtSession();
|
||||
tasks = taskSession.findTaskInstances(authority);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Note: This method is not implemented by jBPM
|
||||
tasks = findCompletedTaskInstances(context, authority);
|
||||
}
|
||||
|
||||
// convert tasks to appropriate service response format
|
||||
List<WorkflowTask> workflowTasks = new ArrayList<WorkflowTask>(tasks.size());
|
||||
for (TaskInstance task : tasks)
|
||||
{
|
||||
if (getWorkflowTaskState(task).equals(state))
|
||||
{
|
||||
WorkflowTask workflowTask = createWorkflowTask(task);
|
||||
workflowTasks.add(workflowTask);
|
||||
}
|
||||
WorkflowTask workflowTask = createWorkflowTask(task);
|
||||
workflowTasks.add(workflowTask);
|
||||
}
|
||||
return workflowTasks;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the completed task list for the specified actor
|
||||
*
|
||||
* TODO: This method provides a query that's not in JBPM! Look to have JBPM implement this.
|
||||
*
|
||||
* @param jbpmContext the jbpm context
|
||||
* @param actorId the actor to retrieve tasks for
|
||||
* @return the tasks
|
||||
*/
|
||||
private List findCompletedTaskInstances(JbpmContext jbpmContext, String actorId)
|
||||
{
|
||||
List result = null;
|
||||
try
|
||||
{
|
||||
Session session = jbpmContext.getSession();
|
||||
Query query = session.createQuery(COMPLETED_TASKS_QUERY);
|
||||
query.setString("actorId", actorId);
|
||||
result = query.list();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new JbpmException("Couldn't get completed task instances list for actor '" + actorId + "'", e);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
});
|
||||
}
|
||||
catch(JbpmException e)
|
||||
{
|
||||
throw new WorkflowException("Failed to retrieve tasks assigned to authority '" + authority + "'", e);
|
||||
throw new WorkflowException("Failed to retrieve tasks assigned to authority '" + authority + "' in state '" + state + "'", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.alfresco.repo.workflow.TaskComponent#getPooledTasks(java.util.List)
|
||||
*/
|
||||
|
@@ -28,7 +28,6 @@ import org.alfresco.repo.content.MimetypeMap;
|
||||
import org.alfresco.repo.workflow.BPMEngineRegistry;
|
||||
import org.alfresco.repo.workflow.TaskComponent;
|
||||
import org.alfresco.repo.workflow.WorkflowComponent;
|
||||
import org.alfresco.repo.workflow.WorkflowDefinitionComponent;
|
||||
import org.alfresco.repo.workflow.WorkflowModel;
|
||||
import org.alfresco.service.ServiceRegistry;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
@@ -53,7 +52,6 @@ import org.springframework.core.io.ClassPathResource;
|
||||
*/
|
||||
public class JBPMEngineTest extends BaseSpringTest
|
||||
{
|
||||
WorkflowDefinitionComponent workflowDefinitionComponent;
|
||||
WorkflowComponent workflowComponent;
|
||||
TaskComponent taskComponent;
|
||||
WorkflowDefinition testWorkflowDef;
|
||||
@@ -64,18 +62,17 @@ public class JBPMEngineTest extends BaseSpringTest
|
||||
protected void onSetUpInTransaction() throws Exception
|
||||
{
|
||||
BPMEngineRegistry registry = (BPMEngineRegistry)applicationContext.getBean("bpm_engineRegistry");
|
||||
workflowDefinitionComponent = registry.getWorkflowDefinitionComponent("jbpm");
|
||||
workflowComponent = registry.getWorkflowComponent("jbpm");
|
||||
taskComponent = registry.getTaskComponent("jbpm");
|
||||
|
||||
// deploy test process definition
|
||||
ClassPathResource processDef = new ClassPathResource("org/alfresco/repo/workflow/jbpm/test_processdefinition.xml");
|
||||
assertFalse(workflowDefinitionComponent.isDefinitionDeployed(processDef.getInputStream(), MimetypeMap.MIMETYPE_XML));
|
||||
testWorkflowDef = workflowDefinitionComponent.deployDefinition(processDef.getInputStream(), MimetypeMap.MIMETYPE_XML);
|
||||
assertFalse(workflowComponent.isDefinitionDeployed(processDef.getInputStream(), MimetypeMap.MIMETYPE_XML));
|
||||
testWorkflowDef = workflowComponent.deployDefinition(processDef.getInputStream(), MimetypeMap.MIMETYPE_XML);
|
||||
assertNotNull(testWorkflowDef);
|
||||
assertEquals("Test", testWorkflowDef.name);
|
||||
assertEquals("1", testWorkflowDef.version);
|
||||
assertTrue(workflowDefinitionComponent.isDefinitionDeployed(processDef.getInputStream(), MimetypeMap.MIMETYPE_XML));
|
||||
assertTrue(workflowComponent.isDefinitionDeployed(processDef.getInputStream(), MimetypeMap.MIMETYPE_XML));
|
||||
|
||||
// get valid node ref
|
||||
NodeService nodeService = (NodeService)applicationContext.getBean(ServiceRegistry.NODE_SERVICE.getLocalName());
|
||||
@@ -85,7 +82,7 @@ public class JBPMEngineTest extends BaseSpringTest
|
||||
|
||||
public void testGetWorkflowDefinitions()
|
||||
{
|
||||
List<WorkflowDefinition> workflowDefs = workflowDefinitionComponent.getDefinitions();
|
||||
List<WorkflowDefinition> workflowDefs = workflowComponent.getDefinitions();
|
||||
assertNotNull(workflowDefs);
|
||||
assertTrue(workflowDefs.size() > 0);
|
||||
}
|
||||
@@ -94,7 +91,7 @@ public class JBPMEngineTest extends BaseSpringTest
|
||||
public void testDeployWorkflow() throws Exception
|
||||
{
|
||||
ClassPathResource processDef = new ClassPathResource("org/alfresco/repo/workflow/jbpm/test_processdefinition.xml");
|
||||
testWorkflowDef = workflowDefinitionComponent.deployDefinition(processDef.getInputStream(), MimetypeMap.MIMETYPE_XML);
|
||||
testWorkflowDef = workflowComponent.deployDefinition(processDef.getInputStream(), MimetypeMap.MIMETYPE_XML);
|
||||
assertNotNull(testWorkflowDef);
|
||||
assertEquals("Test", testWorkflowDef.name);
|
||||
assertEquals("2", testWorkflowDef.version);
|
||||
@@ -343,8 +340,13 @@ public class JBPMEngineTest extends BaseSpringTest
|
||||
WorkflowTask updatedTask = taskComponent.endTask(tasks1.get(0).id, null);
|
||||
assertNotNull(updatedTask);
|
||||
assertEquals(WorkflowTaskState.COMPLETED, updatedTask.state);
|
||||
List<WorkflowTask> completedTasks = taskComponent.getAssignedTasks("System", WorkflowTaskState.COMPLETED);
|
||||
assertNotNull(completedTasks);
|
||||
assertEquals(1, completedTasks.size());
|
||||
assertEquals(WorkflowTaskState.COMPLETED, completedTasks.get(0).state);
|
||||
}
|
||||
|
||||
|
||||
public void testGetTask()
|
||||
{
|
||||
WorkflowDefinition workflowDef = getTestDefinition();
|
||||
|
Reference in New Issue
Block a user