ALF-10279 The default transition label is now localisabel. Labels can be set globally, at the workflow level or at the node level.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@31995 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
N Smith
2011-11-15 16:09:02 +00:00
parent f5b08ab073
commit 76be9d0da4
4 changed files with 68 additions and 23 deletions

View File

@@ -195,6 +195,15 @@ public class WorkflowObjectFactory
isTaskNode, transitions);
}
public WorkflowTransition createTransition(String id,
String defaultTitle, String defaultDescription,
boolean isDefault, String... baseLabelKeys)
{
String title = getLabel(baseLabelKeys, TITLE_LABEL, defaultTitle);
String description = getLabel(baseLabelKeys, TITLE_LABEL, defaultDescription);
return new WorkflowTransition(id, title, description, isDefault);
}
public WorkflowTaskDefinition createTaskDefinition(String id, WorkflowNode node, String typeName, boolean isStart)
{
TypeDefinition metaData = getTaskTypeDefinition(typeName, isStart);
@@ -276,6 +285,28 @@ public class WorkflowObjectFactory
String keyBase = displayId.replace(":", "_");
String key = keyBase+ "." + labelKey;
String label = messageService.getMessage(key);
return getDefaultLabel(label, defaults);
}
private String getLabel(String[] locations, String labelKey, String... defaults)
{
String label = null;
int i = 0;
while(label == null && i<locations.length)
{
label = getLabel(locations[i], labelKey);
i++;
}
return getDefaultLabel(label, defaults);
}
/**
* @param label
* @param defaults
* @return
*/
private String getDefaultLabel(String label, String... defaults)
{
int i = 0;
while(label==null && i<defaults.length)
{

View File

@@ -34,6 +34,7 @@ public interface ActivitiConstants
public static final String START_TASK_PREFIX = "start";
public static final String DEFAULT_TRANSITION_NAME = "Next";
public static final String DEFAULT_TRANSITION_DESCRIPTION = "Default Transition";
public static final String START_TASK_PROPERTY_PREFIX = "_start_";
public static final String USER_TASK_NODE_TYPE = "userTask";

View File

@@ -26,6 +26,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.alfresco.repo.workflow.activiti.ActivitiConstants.DEFAULT_TRANSITION_NAME;
import static org.alfresco.repo.workflow.activiti.ActivitiConstants.DEFAULT_TRANSITION_DESCRIPTION;
import org.activiti.engine.FormService;
import org.activiti.engine.HistoryService;
import org.activiti.engine.ProcessEngine;
@@ -65,11 +67,9 @@ import org.alfresco.util.collections.Function;
*/
public class ActivitiTypeConverter
{
/**
* Default transition provided for all Nodes when using Activiti engine.
*/
private static final WorkflowTransition NEXT_TRANSITION = new WorkflowTransition(ActivitiConstants.DEFAULT_TRANSITION_NAME,
ActivitiConstants.DEFAULT_TRANSITION_NAME, "Default Transition", true);
private static final String TRANSITION_SUFFIX= ".transition";
private static final String DEFAULT_TRANSITION_KEY= "bpm_businessprocessmodel.transition";
private final RepositoryService repoService;
private final RuntimeService runtimeService;
@@ -141,26 +141,28 @@ public class ActivitiTypeConverter
ReadOnlyProcessDefinition def = activitiUtil.getDeployedProcessDefinition(defId);
PvmActivity startEvent = def.getInitial();
WorkflowTaskDefinition startTask = getTaskDefinition(startEvent, startTaskName, definition.getKey());
WorkflowTaskDefinition startTask = getTaskDefinition(startEvent, startTaskName, definition.getKey(), true);
return factory.createDefinition(defId,
defName, version, defaultTitle,
null, startTask);
}
public WorkflowTaskDefinition getTaskDefinition(PvmActivity activity, String taskFormKey, String processDefinitionName)
public WorkflowTaskDefinition getTaskDefinition(PvmActivity activity, String taskFormKey, String processKey, boolean isStart)
{
String startId = activity.getId();
String startTitle = (String) activity.getProperty(ActivitiConstants.NODE_NAME);
String startDescription= (String) activity.getProperty(ActivitiConstants.NODE_DESCRIPTION);
String startType = (String) activity.getProperty(ActivitiConstants.NODE_TYPE);
if(taskFormKey == null)
{
taskFormKey = startId;
WorkflowNode node = getNode(activity, processKey, true);
String taskDefId = taskFormKey == null ? node.getName() : taskFormKey;
return factory.createTaskDefinition(taskDefId, node, taskFormKey, isStart);
}
WorkflowNode node = factory.createNode(startId, processDefinitionName, startTitle, startDescription, startType, true, NEXT_TRANSITION);
WorkflowTaskDefinition startTask = factory.createTaskDefinition(taskFormKey, node, taskFormKey, true);
return startTask;
private WorkflowTransition getDefaultTransition(String processDefKey, String nodeId)
{
String processKey = processDefKey + TRANSITION_SUFFIX;
String nodeKey = processDefKey + ".node." + nodeId + TRANSITION_SUFFIX;
String transitionId = DEFAULT_TRANSITION_NAME;
String title = DEFAULT_TRANSITION_NAME;
String description =DEFAULT_TRANSITION_DESCRIPTION;
return factory.createTransition(transitionId, title, description, true, nodeKey, processKey, DEFAULT_TRANSITION_KEY);
}
public WorkflowInstance convert(ProcessInstance instance)
@@ -230,6 +232,17 @@ public class ActivitiTypeConverter
{
String procDefId = activity.getProcessDefinition().getId();
String key = activitiUtil.getProcessDefinition(procDefId).getKey();
return getNode(activity, key, forceIsTaskNode);
}
/**
* @param activity
* @param key
* @param forceIsTaskNode
* @return
*/
private WorkflowNode getNode(PvmActivity activity, String key, boolean forceIsTaskNode)
{
String name = activity.getId();
String defaultTitle = (String) activity.getProperty(ActivitiConstants.NODE_NAME);
String defaultDescription = (String) activity.getProperty(ActivitiConstants.NODE_DESCRIPTION);
@@ -244,8 +257,8 @@ public class ActivitiTypeConverter
{
defaultDescription = name;
}
return factory.createNode(name, key, defaultTitle, defaultDescription, type, isTaskNode, NEXT_TRANSITION);
WorkflowTransition transition = getDefaultTransition(key, name);
return factory.createNode(name, key, defaultTitle, defaultDescription, type, isTaskNode, transition);
}
public WorkflowNode convert(PvmActivity activity)

View File

@@ -587,14 +587,14 @@ public class ActivitiWorkflowEngine extends BPMEngine implements WorkflowEngine
}
// Add start task definition
defs.add(typeConverter.getTaskDefinition(startEvent, startTaskName, processDefinition.getId()));
defs.add(typeConverter.getTaskDefinition(startEvent, startTaskName, processDefinition.getId(), true));
// Now, continue through process, finding all user-tasks
Collection<PvmActivity> taskActivities = findUserTasks(startEvent);
for(PvmActivity act : taskActivities)
{
String formKey = getFormKey(act);
defs.add(typeConverter.getTaskDefinition(act, formKey, processDefinition.getId()));
defs.add(typeConverter.getTaskDefinition(act, formKey, processDefinition.getId(), false));
}
return defs;