Workflow group / pooled tasks support

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@4892 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
David Caruana
2007-01-22 10:34:18 +00:00
parent 0552e16355
commit d771c444a5
7 changed files with 57 additions and 32 deletions

View File

@@ -25,7 +25,7 @@ bpm_businessprocessmodel.property.bpm_priority.description=Priority
bpm_businessprocessmodel.property.bpm_percentComplete.title=Percent Complete bpm_businessprocessmodel.property.bpm_percentComplete.title=Percent Complete
bpm_businessprocessmodel.property.bpm_percentComplete.description=Percent Complete bpm_businessprocessmodel.property.bpm_percentComplete.description=Percent Complete
bpm_businessprocessmodel.association.bpm_pooledActors.title=Pooled Users bpm_businessprocessmodel.association.bpm_pooledActors.title=Pooled Users
bpm_businessprocessmodel.association.bpm_pooledActors.title=The users who may take ownership of the task bpm_businessprocessmodel.association.bpm_pooledActors.title=Pool
# Workflow Task # Workflow Task
bpm_businessprocessmodel.type.bpm_workflowTask.title=Worflow Task bpm_businessprocessmodel.type.bpm_workflowTask.title=Worflow Task

View File

@@ -10,6 +10,8 @@
<imports> <imports>
<!-- Import Alfresco Dictionary Definitions --> <!-- Import Alfresco Dictionary Definitions -->
<import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d" /> <import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d" />
<!-- Import Alfresco System Definitions -->
<import uri="http://www.alfresco.org/model/system/1.0" prefix="sys" />
<!-- Import Alfresco Content Domain Model Definitions --> <!-- Import Alfresco Content Domain Model Definitions -->
<import uri="http://www.alfresco.org/model/content/1.0" prefix="cm" /> <import uri="http://www.alfresco.org/model/content/1.0" prefix="cm" />
<!-- Import User Model Definitions --> <!-- Import User Model Definitions -->
@@ -146,7 +148,8 @@
<many>false</many> <many>false</many>
</source> </source>
<target> <target>
<class>cm:person</class> <!-- For now, this may consists of cm:person or usr:authorityContainer -->
<class>sys:base</class>
<mandatory>false</mandatory> <mandatory>false</mandatory>
<many>true</many> <many>true</many>
</target> </target>

View File

@@ -15,6 +15,7 @@
</bean> </bean>
<bean id="workflowServiceImpl" class="org.alfresco.repo.workflow.WorkflowServiceImpl"> <bean id="workflowServiceImpl" class="org.alfresco.repo.workflow.WorkflowServiceImpl">
<property name="authorityService" ref="authorityService"/>
<property name="BPMEngineRegistry" ref="bpm_engineRegistry"/> <property name="BPMEngineRegistry" ref="bpm_engineRegistry"/>
<property name="workflowPackageComponent" ref="workflowPackageImpl"/> <property name="workflowPackageComponent" ref="workflowPackageImpl"/>
</bean> </bean>
@@ -89,7 +90,6 @@
<property name="namespaceService" ref="namespaceService"/> <property name="namespaceService" ref="namespaceService"/>
<property name="nodeService" ref="nodeService"/> <property name="nodeService" ref="nodeService"/>
<property name="personService" ref="personService"/> <property name="personService" ref="personService"/>
<property name="authorityService" ref="authorityService"/>
<property name="authorityDAO" ref="authorityDAO"/> <property name="authorityDAO" ref="authorityDAO"/>
<property name="serviceRegistry" ref="ServiceRegistry"/> <property name="serviceRegistry" ref="ServiceRegistry"/>
<property name="companyHomeStore"><value>${spaces.store}</value></property> <property name="companyHomeStore"><value>${spaces.store}</value></property>

View File

@@ -221,7 +221,15 @@ public class ActionServiceImpl implements ActionService, RuntimeActionService, A
*/ */
public ActionDefinition getActionDefinition(String name) public ActionDefinition getActionDefinition(String name)
{ {
return this.actionDefinitions.get(name); // get direct access to action definition (i.e. ignoring public flag of executer)
ActionDefinition definition = null;
Object bean = this.applicationContext.getBean(name);
if (bean != null && bean instanceof ActionExecuter)
{
ActionExecuter executer = (ActionExecuter)bean;
definition = executer.getActionDefinition();
}
return definition;
} }
/** /**

View File

@@ -22,8 +22,11 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.security.AuthorityService;
import org.alfresco.service.cmr.security.AuthorityType;
import org.alfresco.service.cmr.workflow.WorkflowDefinition; import org.alfresco.service.cmr.workflow.WorkflowDefinition;
import org.alfresco.service.cmr.workflow.WorkflowDeployment; import org.alfresco.service.cmr.workflow.WorkflowDeployment;
import org.alfresco.service.cmr.workflow.WorkflowException; import org.alfresco.service.cmr.workflow.WorkflowException;
@@ -49,9 +52,20 @@ public class WorkflowServiceImpl implements WorkflowService
private static Log logger = LogFactory.getLog("org.alfresco.repo.workflow"); private static Log logger = LogFactory.getLog("org.alfresco.repo.workflow");
// Dependent services // Dependent services
private AuthorityService authorityService;
private BPMEngineRegistry registry; private BPMEngineRegistry registry;
private WorkflowPackageComponent workflowPackageComponent; private WorkflowPackageComponent workflowPackageComponent;
/**
* Sets the Authority Service
*
* @param authorityService
*/
public void setAuthorityService(AuthorityService authorityService)
{
this.authorityService = authorityService;
}
/** /**
* Sets the BPM Engine Registry * Sets the BPM Engine Registry
@@ -288,10 +302,13 @@ public class WorkflowServiceImpl implements WorkflowService
*/ */
public List<WorkflowTask> getPooledTasks(String authority) public List<WorkflowTask> getPooledTasks(String authority)
{ {
// TODO: Expand authorities to include associated groups (and parent groups) // Expand authorities to include associated groups (and parent groups)
List<String> authorities = new ArrayList<String>(); List<String> authorities = new ArrayList<String>();
authorities.add(authority); authorities.add(authority);
Set<String> parents = authorityService.getContainingAuthorities(AuthorityType.GROUP, authority, false);
authorities.addAll(parents);
// Retrieve pooled tasks for authorities (from each of the registered task components)
List<WorkflowTask> tasks = new ArrayList<WorkflowTask>(10); List<WorkflowTask> tasks = new ArrayList<WorkflowTask>(10);
String[] ids = registry.getTaskComponents(); String[] ids = registry.getTaskComponents();
for (String id: ids) for (String id: ids)

View File

@@ -23,7 +23,6 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@@ -51,7 +50,6 @@ import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter;
import org.alfresco.service.cmr.security.AuthorityService;
import org.alfresco.service.cmr.security.AuthorityType; import org.alfresco.service.cmr.security.AuthorityType;
import org.alfresco.service.cmr.security.PersonService; import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.cmr.workflow.WorkflowDefinition; import org.alfresco.service.cmr.workflow.WorkflowDefinition;
@@ -112,7 +110,6 @@ public class JBPMEngine extends BPMEngine
protected NodeService nodeService; protected NodeService nodeService;
protected ServiceRegistry serviceRegistry; protected ServiceRegistry serviceRegistry;
protected PersonService personService; protected PersonService personService;
protected AuthorityService authorityService;
protected AuthorityDAO authorityDAO; protected AuthorityDAO authorityDAO;
protected JbpmTemplate jbpmTemplate; protected JbpmTemplate jbpmTemplate;
@@ -188,16 +185,6 @@ public class JBPMEngine extends BPMEngine
{ {
this.personService = personService; this.personService = personService;
} }
/**
* Sets the Authority Service
*
* @param authorityService
*/
public void setAuthorityService(AuthorityService authorityService)
{
this.authorityService = authorityService;
}
/** /**
* Sets the Authority DAO * Sets the Authority DAO
@@ -857,17 +844,9 @@ public class JBPMEngine extends BPMEngine
{ {
public List<WorkflowTask> doInJbpm(JbpmContext context) public List<WorkflowTask> doInJbpm(JbpmContext context)
{ {
// flatten authorities to include all parent authorities
Set<String> flattenedAuthorities = new HashSet<String>();
for (String authority : authorities)
{
Set<String> parents = authorityService.getContainingAuthorities(AuthorityType.GROUP, authority, false);
flattenedAuthorities.addAll(parents);
}
// retrieve pooled tasks for all flattened authorities // retrieve pooled tasks for all flattened authorities
TaskMgmtSession taskSession = context.getTaskMgmtSession(); TaskMgmtSession taskSession = context.getTaskMgmtSession();
List<TaskInstance> tasks = taskSession.findPooledTaskInstances(new ArrayList(flattenedAuthorities)); List<TaskInstance> tasks = taskSession.findPooledTaskInstances(authorities);
List<WorkflowTask> workflowTasks = new ArrayList<WorkflowTask>(tasks.size()); List<WorkflowTask> workflowTasks = new ArrayList<WorkflowTask>(tasks.size());
for (TaskInstance task : tasks) for (TaskInstance task : tasks)
{ {
@@ -1406,7 +1385,16 @@ public class JBPMEngine extends BPMEngine
List<NodeRef> pooledNodeRefs = new ArrayList<NodeRef>(pooledActors.size()); List<NodeRef> pooledNodeRefs = new ArrayList<NodeRef>(pooledActors.size());
for (PooledActor pooledActor : (Set<PooledActor>)pooledActors) for (PooledActor pooledActor : (Set<PooledActor>)pooledActors)
{ {
NodeRef pooledNodeRef = mapNameToAuthority(pooledActor.getActorId()); NodeRef pooledNodeRef = null;
String pooledActorId = pooledActor.getActorId();
if (AuthorityType.getAuthorityType(pooledActorId) == AuthorityType.GROUP)
{
pooledNodeRef = mapNameToAuthority(pooledActorId);
}
else
{
pooledNodeRef = mapNameToPerson(pooledActorId);
}
if (pooledNodeRef != null) if (pooledNodeRef != null)
{ {
pooledNodeRefs.add(pooledNodeRef); pooledNodeRefs.add(pooledNodeRef);
@@ -1529,12 +1517,20 @@ public class JBPMEngine extends BPMEngine
int i = 0; int i = 0;
for (JBPMNode actor : actors) for (JBPMNode actor : actors)
{ {
pooledActors[i++] = actor.getName(); if (actor.getType().equals(ContentModel.TYPE_AUTHORITY_CONTAINER))
{
pooledActors[i++] = (String)actor.getProperties().get(ContentModel.PROP_AUTHORITY_NAME);
}
else
{
pooledActors[i++] = actor.getName();
}
} }
} }
else if (value instanceof JBPMNode) else if (value instanceof JBPMNode)
{ {
pooledActors = new String[] {((JBPMNode)value).getName()}; JBPMNode node = (JBPMNode)value;
pooledActors = new String[] {(node.getType().equals(ContentModel.TYPE_AUTHORITY_CONTAINER)) ? (String)node.getProperties().get(ContentModel.PROP_AUTHORITY_NAME) : node.getName()};
} }
else else
{ {

View File

@@ -18,7 +18,8 @@
<task-node name="review"> <task-node name="review">
<task name="wf:reviewTask" swimlane="reviewer"/> <task name="wf:reviewTask" swimlane="reviewer"/>
<transition name="" to="end" /> <transition name="reject" to="end" />
<transition name="approve" to="end" />
</task-node> </task-node>
<node name="parallel"> <node name="parallel">