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); 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) public WorkflowTaskDefinition createTaskDefinition(String id, WorkflowNode node, String typeName, boolean isStart)
{ {
TypeDefinition metaData = getTaskTypeDefinition(typeName, isStart); TypeDefinition metaData = getTaskTypeDefinition(typeName, isStart);
@@ -276,6 +285,28 @@ public class WorkflowObjectFactory
String keyBase = displayId.replace(":", "_"); String keyBase = displayId.replace(":", "_");
String key = keyBase+ "." + labelKey; String key = keyBase+ "." + labelKey;
String label = messageService.getMessage(key); 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; int i = 0;
while(label==null && i<defaults.length) 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 START_TASK_PREFIX = "start";
public static final String DEFAULT_TRANSITION_NAME = "Next"; 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 START_TASK_PROPERTY_PREFIX = "_start_";
public static final String USER_TASK_NODE_TYPE = "userTask"; 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.List;
import java.util.Map; 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.FormService;
import org.activiti.engine.HistoryService; import org.activiti.engine.HistoryService;
import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngine;
@@ -65,11 +67,9 @@ import org.alfresco.util.collections.Function;
*/ */
public class ActivitiTypeConverter public class ActivitiTypeConverter
{ {
/** private static final String TRANSITION_SUFFIX= ".transition";
* Default transition provided for all Nodes when using Activiti engine. private static final String DEFAULT_TRANSITION_KEY= "bpm_businessprocessmodel.transition";
*/
private static final WorkflowTransition NEXT_TRANSITION = new WorkflowTransition(ActivitiConstants.DEFAULT_TRANSITION_NAME,
ActivitiConstants.DEFAULT_TRANSITION_NAME, "Default Transition", true);
private final RepositoryService repoService; private final RepositoryService repoService;
private final RuntimeService runtimeService; private final RuntimeService runtimeService;
@@ -141,26 +141,28 @@ public class ActivitiTypeConverter
ReadOnlyProcessDefinition def = activitiUtil.getDeployedProcessDefinition(defId); ReadOnlyProcessDefinition def = activitiUtil.getDeployedProcessDefinition(defId);
PvmActivity startEvent = def.getInitial(); PvmActivity startEvent = def.getInitial();
WorkflowTaskDefinition startTask = getTaskDefinition(startEvent, startTaskName, definition.getKey()); WorkflowTaskDefinition startTask = getTaskDefinition(startEvent, startTaskName, definition.getKey(), true);
return factory.createDefinition(defId, return factory.createDefinition(defId,
defName, version, defaultTitle, defName, version, defaultTitle,
null, startTask); 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(); WorkflowNode node = getNode(activity, processKey, true);
String startTitle = (String) activity.getProperty(ActivitiConstants.NODE_NAME); String taskDefId = taskFormKey == null ? node.getName() : taskFormKey;
String startDescription= (String) activity.getProperty(ActivitiConstants.NODE_DESCRIPTION); return factory.createTaskDefinition(taskDefId, node, taskFormKey, isStart);
String startType = (String) activity.getProperty(ActivitiConstants.NODE_TYPE); }
if(taskFormKey == null)
{ private WorkflowTransition getDefaultTransition(String processDefKey, String nodeId)
taskFormKey = startId; {
} String processKey = processDefKey + TRANSITION_SUFFIX;
WorkflowNode node = factory.createNode(startId, processDefinitionName, startTitle, startDescription, startType, true, NEXT_TRANSITION); String nodeKey = processDefKey + ".node." + nodeId + TRANSITION_SUFFIX;
WorkflowTaskDefinition startTask = factory.createTaskDefinition(taskFormKey, node, taskFormKey, true); String transitionId = DEFAULT_TRANSITION_NAME;
return startTask; 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) public WorkflowInstance convert(ProcessInstance instance)
@@ -230,7 +232,18 @@ public class ActivitiTypeConverter
{ {
String procDefId = activity.getProcessDefinition().getId(); String procDefId = activity.getProcessDefinition().getId();
String key = activitiUtil.getProcessDefinition(procDefId).getKey(); String key = activitiUtil.getProcessDefinition(procDefId).getKey();
String name = activity.getId(); 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 defaultTitle = (String) activity.getProperty(ActivitiConstants.NODE_NAME);
String defaultDescription = (String) activity.getProperty(ActivitiConstants.NODE_DESCRIPTION); String defaultDescription = (String) activity.getProperty(ActivitiConstants.NODE_DESCRIPTION);
String type = (String) activity.getProperty(ActivitiConstants.NODE_TYPE); String type = (String) activity.getProperty(ActivitiConstants.NODE_TYPE);
@@ -244,8 +257,8 @@ public class ActivitiTypeConverter
{ {
defaultDescription = name; defaultDescription = name;
} }
WorkflowTransition transition = getDefaultTransition(key, name);
return factory.createNode(name, key, defaultTitle, defaultDescription, type, isTaskNode, NEXT_TRANSITION); return factory.createNode(name, key, defaultTitle, defaultDescription, type, isTaskNode, transition);
} }
public WorkflowNode convert(PvmActivity activity) public WorkflowNode convert(PvmActivity activity)

View File

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