Updated the Workflow Rest API classes to use the getter methods on various Workflow DTOs instead of accessing the public fields.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@21565 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
N Smith
2010-08-03 11:41:28 +00:00
parent 837507b722
commit 90fbffbb58
4 changed files with 208 additions and 157 deletions

View File

@@ -65,7 +65,7 @@ public class TaskInstancePut extends AbstractWorkflowWebscript
String currentUser = authenticationService.getCurrentUserName(); String currentUser = authenticationService.getCurrentUserName();
Serializable owner = workflowTask.properties.get(ContentModel.PROP_OWNER); Serializable owner = workflowTask.getProperties().get(ContentModel.PROP_OWNER);
Serializable initiator = getWorkflowInitiator(workflowTask); Serializable initiator = getWorkflowInitiator(workflowTask);
@@ -150,7 +150,7 @@ public class TaskInstancePut extends AbstractWorkflowWebscript
} }
else else
{ {
value = (Serializable) DefaultTypeConverter.INSTANCE.convert(NodeRef.class, jsonValue.toString().replaceAll("\\\\", "")); value = DefaultTypeConverter.INSTANCE.convert(NodeRef.class, jsonValue.toString().replaceAll("\\\\", ""));
} }
} }
} }

View File

@@ -20,6 +20,7 @@ package org.alfresco.repo.web.scripts.workflow;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
@@ -139,17 +140,17 @@ public class WorkflowModelBuilder
public Map<String, Object> buildSimple(WorkflowTask task, Collection<String> propertyFilters) public Map<String, Object> buildSimple(WorkflowTask task, Collection<String> propertyFilters)
{ {
HashMap<String, Object> model = new HashMap<String, Object>(); HashMap<String, Object> model = new HashMap<String, Object>();
model.put(TASK_ID, task.id); model.put(TASK_ID, task.getId());
model.put(TASK_URL, getUrl(task)); model.put(TASK_URL, getUrl(task));
model.put(TASK_NAME, task.name); model.put(TASK_NAME, task.getName());
model.put(TASK_TITLE, task.title); model.put(TASK_TITLE, task.getTitle());
model.put(TASK_DESCRIPTION, task.description); model.put(TASK_DESCRIPTION, task.getDescription());
model.put(TASK_STATE, task.state.name()); model.put(TASK_STATE, task.getState().name());
model.put(TASK_TYPE_DEFINITION_TITLE, task.definition.metadata.getTitle()); model.put(TASK_TYPE_DEFINITION_TITLE, task.getDefinition().getMetadata().getTitle());
model.put(TASK_IS_POOLED, isPooled(task.properties)); model.put(TASK_IS_POOLED, isPooled(task.getProperties()));
Serializable owner = task.properties.get(ContentModel.PROP_OWNER); Serializable owner = task.getProperties().get(ContentModel.PROP_OWNER);
model.put(TASK_OWNER, getPersonModel((String) owner)); model.put(TASK_OWNER, getPersonModel( owner));
model.put(TASK_PROPERTIES, buildProperties(task, propertyFilters)); model.put(TASK_PROPERTIES, buildProperties(task, propertyFilters));
return model; return model;
@@ -164,7 +165,7 @@ public class WorkflowModelBuilder
{ {
Map<String, Object> model = buildSimple(workflowTask, null); Map<String, Object> model = buildSimple(workflowTask, null);
model.put(TASK_PATH, getUrl(workflowTask, workflowTask.path)); model.put(TASK_PATH, getUrl(workflowTask.getPath()));
// workflow instance part // workflow instance part
model.put(TASK_WORKFLOW_INSTANCE, buildWorkflowInstance(workflowTask.path.instance)); model.put(TASK_WORKFLOW_INSTANCE, buildWorkflowInstance(workflowTask.path.instance));
@@ -185,11 +186,11 @@ public class WorkflowModelBuilder
{ {
HashMap<String, Object> model = new HashMap<String, Object>(); HashMap<String, Object> model = new HashMap<String, Object>();
model.put(WORKFLOW_DEFINITION_ID, workflowDefinition.id); model.put(WORKFLOW_DEFINITION_ID, workflowDefinition.getId());
model.put(WORKFLOW_DEFINITION_URL, getUrl(workflowDefinition)); model.put(WORKFLOW_DEFINITION_URL, getUrl(workflowDefinition));
model.put(WORKFLOW_DEFINITION_NAME, workflowDefinition.name); model.put(WORKFLOW_DEFINITION_NAME, workflowDefinition.getName());
model.put(WORKFLOW_DEFINITION_TITLE, workflowDefinition.title); model.put(WORKFLOW_DEFINITION_TITLE, workflowDefinition.getTitle());
model.put(WORKFLOW_DEFINITION_DESCRIPTION, workflowDefinition.description); model.put(WORKFLOW_DEFINITION_DESCRIPTION, workflowDefinition.getDescription());
return model; return model;
} }
@@ -202,12 +203,13 @@ public class WorkflowModelBuilder
private Map<String, Object> buildProperties(WorkflowTask task, Collection<String> propertyFilters) private Map<String, Object> buildProperties(WorkflowTask task, Collection<String> propertyFilters)
{ {
Map<QName, Serializable> properties = task.properties; Map<QName, Serializable> properties = task.getProperties();
Collection<QName> keys; Collection<QName> keys;
if (propertyFilters == null || propertyFilters.size() == 0) if (propertyFilters == null || propertyFilters.size() == 0)
{ {
Map<QName, PropertyDefinition> propDefs = task.definition.metadata.getProperties(); TypeDefinition taskType = task.getDefinition().getMetadata();
Map<QName, AssociationDefinition> assocDefs = task.definition.metadata.getAssociations(); Map<QName, PropertyDefinition> propDefs = taskType.getProperties();
Map<QName, AssociationDefinition> assocDefs = taskType.getAssociations();
Set<QName> propKeys = properties.keySet(); Set<QName> propKeys = properties.keySet();
keys = new HashSet<QName>(propDefs.size() + assocDefs.size() + propKeys.size()); keys = new HashSet<QName>(propDefs.size() + assocDefs.size() + propKeys.size());
keys.addAll(propDefs.keySet()); keys.addAll(propDefs.keySet());
@@ -357,55 +359,71 @@ public class WorkflowModelBuilder
{ {
Map<String, Object> model = new HashMap<String, Object>(); Map<String, Object> model = new HashMap<String, Object>();
model.put(WORKFLOW_NODE_NAME, workflowNode.name); model.put(WORKFLOW_NODE_NAME, workflowNode.getName());
model.put(WORKFLOW_NODE_TITLE, workflowNode.title); model.put(WORKFLOW_NODE_TITLE, workflowNode.getTitle());
model.put(WORKFLOW_NODE_DESCRIPTION, workflowNode.description); model.put(WORKFLOW_NODE_DESCRIPTION, workflowNode.getDescription());
model.put(WORKFLOW_NODE_IS_TASK_NODE, workflowNode.isTaskNode); model.put(WORKFLOW_NODE_IS_TASK_NODE, workflowNode.isTaskNode());
List<Map<String, Object>> results = new ArrayList<Map<String, Object>>(); List<Map<String, Object>> transitions = new ArrayList<Map<String, Object>>();
List<?> hiddenTransitions = getHiddenTransitions(workflowTask.getProperties());
Object hiddenTransitions = workflowTask.properties.get(WorkflowModel.PROP_HIDDEN_TRANSITIONS); for (WorkflowTransition workflowTransition : workflowNode.getTransitions())
for (WorkflowTransition workflowTransition : workflowNode.transitions)
{ {
Map<String, Object> transitionMap = new HashMap<String, Object>(); Map<String, Object> transitionModel = build(workflowTransition, hiddenTransitions);
transitions.add(transitionModel);
transitionMap.put(WORKFLOW_NODE_TRANSITION_ID, workflowTransition.id);
transitionMap.put(WORKFLOW_NODE_TRANSITION_TITLE, workflowTransition.title);
transitionMap.put(WORKFLOW_NODE_TRANSITION_DESCRIPTION, workflowTransition.description);
transitionMap.put(WORKFLOW_NODE_TRANSITION_IS_DEFAULT, workflowTransition.isDefault);
transitionMap.put(WORKFLOW_NODE_TRANSITION_IS_HIDDEN, (hiddenTransitions == null ? false : hiddenTransitions.toString().contains(workflowTransition.id)));
results.add(transitionMap);
} }
model.put(WORKFLOW_NODE_TRANSITIONS, transitions);
model.put(WORKFLOW_NODE_TRANSITIONS, results);
return model; return model;
} }
// private String getURl(WorkflowPath path) /**
// { * @param properties
// StringBuilder builder = new StringBuilder("api/workflow-instances/"); * @return
// builder.append(path.instance.id); */
// builder.append("/paths/"); private List<?> getHiddenTransitions(Map<QName, Serializable> properties)
// builder.append(path.id); {
// return builder.toString(); Serializable hiddenSer = properties.get(WorkflowModel.PROP_HIDDEN_TRANSITIONS);
// } if(hiddenSer instanceof List<?>)
return (List<?>) hiddenSer;
else if(hiddenSer instanceof String)
{
String hiddenStr = (String) hiddenSer;
return Arrays.asList(hiddenStr.split(","));
}
return null;
}
public Map<String, Object> build(WorkflowTransition workflowTransition, List<?> hiddenTransitions)
{
Map<String, Object> model = new HashMap<String, Object>();
String id = workflowTransition.getId();
model.put(WORKFLOW_NODE_TRANSITION_ID, id);
model.put(WORKFLOW_NODE_TRANSITION_TITLE, workflowTransition.getTitle());
model.put(WORKFLOW_NODE_TRANSITION_DESCRIPTION, workflowTransition.getDescription());
model.put(WORKFLOW_NODE_TRANSITION_IS_DEFAULT, workflowTransition.isDefault);
model.put(WORKFLOW_NODE_TRANSITION_IS_HIDDEN, isHiddenTransition(id, hiddenTransitions));
return model;
}
private boolean isHiddenTransition(String transitionId, List<?> hiddenTransitions)
{
if(hiddenTransitions == null)
return false;
return hiddenTransitions.contains(transitionId);
}
private String getUrl(WorkflowTask task) private String getUrl(WorkflowTask task)
{ {
return "api/task-instances/" + task.id; return "api/task-instances/" + task.getId();
} }
private String getUrl(WorkflowDefinition workflowDefinition) private String getUrl(WorkflowDefinition workflowDefinition)
{ {
return "api/workflow-definitions/" + workflowDefinition.id; return "api/workflow-definitions/" + workflowDefinition.getId();
} }
private String getUrl(WorkflowTaskDefinition workflowTaskDefinition) private String getUrl(WorkflowTaskDefinition workflowTaskDefinition)
{ {
return "api/task-definitions/" + workflowTaskDefinition.id; return "api/task-definitions/" + workflowTaskDefinition.getId();
} }
private String getUrl(TypeDefinition typeDefinition) private String getUrl(TypeDefinition typeDefinition)
@@ -413,14 +431,14 @@ public class WorkflowModelBuilder
return "api/classes/" + typeDefinition.getName().toPrefixString().replace(PREFIX_SEPARATOR, "_"); return "api/classes/" + typeDefinition.getName().toPrefixString().replace(PREFIX_SEPARATOR, "_");
} }
private String getUrl(WorkflowTask task, WorkflowPath path) private String getUrl(WorkflowPath path)
{ {
return getUrl(task) + "/paths/" + path.id; return "api/workflow-paths/" + path.getId();
} }
private String getUrl(WorkflowInstance workflowInstance) private String getUrl(WorkflowInstance workflowInstance)
{ {
return "api/workflow-instances/" + workflowInstance.id; return "api/workflow-instances/" + workflowInstance.getId();
} }
} }

View File

@@ -52,8 +52,8 @@ import org.alfresco.service.namespace.QName;
import org.alfresco.util.ISO8601DateFormat; import org.alfresco.util.ISO8601DateFormat;
/** /**
* @since 3.4
* @author Nick Smith * @author Nick Smith
*
*/ */
public class WorkflowModelBuilderTest extends TestCase public class WorkflowModelBuilderTest extends TestCase
{ {
@@ -71,38 +71,19 @@ public class WorkflowModelBuilderTest extends TestCase
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public void testBuildWorkflowTask() throws Exception public void testBuildWorkflowTask() throws Exception
{ {
WorkflowTask task = new WorkflowTask();
task.definition = new WorkflowTaskDefinition();
task.definition.metadata = mock(TypeDefinition.class);
when(task.definition.metadata.getTitle()).thenReturn("Type Title");
task.description = "Task Desc";
task.id = "testId$1";
task.name = "Task Name";
task.state = WorkflowTaskState.IN_PROGRESS;
task.title = "Task Title";
task.properties = new HashMap<QName, Serializable>();
task.properties.put(ContentModel.PROP_OWNER, userName);
QName testInt = QName.createQName(URI, "int");
task.properties.put(testInt, 5);
QName testBoolean = QName.createQName(URI, "boolean");
task.properties.put(testBoolean, false);
QName testString = QName.createQName(URI, "string");
task.properties.put(testString, "foo bar");
QName testDate = QName.createQName(URI, "date");
Date date = new Date(); Date date = new Date();
task.properties.put(testDate, date); WorkflowTask task = makeTask(date);
Map<String, Object> model = builder.buildSimple(task, null); Map<String, Object> model = builder.buildSimple(task, null);
Object id = model.get(WorkflowModelBuilder.TASK_ID); Object id = model.get(WorkflowModelBuilder.TASK_ID);
assertEquals(task.id, id); assertEquals(task.id, id);
Object url = model.get(WorkflowModelBuilder.TASK_URL); Object url = model.get(WorkflowModelBuilder.TASK_URL);
assertEquals("api/task-instances/" + task.id, url); assertEquals("api/task-instances/" + task.getId(), url);
assertEquals(task.name, model.get(WorkflowModelBuilder.TASK_NAME)); assertEquals(task.getName(), model.get(WorkflowModelBuilder.TASK_NAME));
assertEquals(task.title, model.get(WorkflowModelBuilder.TASK_TITLE)); assertEquals(task.getTitle(), model.get(WorkflowModelBuilder.TASK_TITLE));
assertEquals(task.description, model.get(WorkflowModelBuilder.TASK_DESCRIPTION)); assertEquals(task.getDescription(), model.get(WorkflowModelBuilder.TASK_DESCRIPTION));
assertEquals(task.state.name(), model.get(WorkflowModelBuilder.TASK_STATE)); assertEquals(task.getState().name(), model.get(WorkflowModelBuilder.TASK_STATE));
assertEquals(task.definition.metadata.getTitle(), model.get(WorkflowModelBuilder.TASK_TYPE_DEFINITION_TITLE)); assertEquals(task.getDefinition().getMetadata().getTitle(), model.get(WorkflowModelBuilder.TASK_TYPE_DEFINITION_TITLE));
assertEquals(false, model.get(WorkflowModelBuilder.TASK_IS_POOLED)); assertEquals(false, model.get(WorkflowModelBuilder.TASK_IS_POOLED));
Map<String, Object> owner = (Map<String, Object>) model.get(WorkflowModelBuilder.TASK_OWNER); Map<String, Object> owner = (Map<String, Object>) model.get(WorkflowModelBuilder.TASK_OWNER);
@@ -111,20 +92,20 @@ public class WorkflowModelBuilderTest extends TestCase
assertEquals(lastName, owner.get(WorkflowModelBuilder.PERSON_LAST_NAME)); assertEquals(lastName, owner.get(WorkflowModelBuilder.PERSON_LAST_NAME));
Map<String, Object> props = (Map<String, Object>) model.get(WorkflowModelBuilder.TASK_PROPERTIES); Map<String, Object> props = (Map<String, Object>) model.get(WorkflowModelBuilder.TASK_PROPERTIES);
assertEquals(task.properties.size(), props.size()); assertEquals(task.getProperties().size(), props.size());
assertEquals(5, props.get("test_int")); assertEquals(5, props.get("test_int"));
assertEquals(false, props.get("test_boolean")); assertEquals(false, props.get("test_boolean"));
assertEquals("foo bar", props.get("test_string")); assertEquals("foo bar", props.get("test_string"));
String dateStr = (String) props.get("test_date"); String dateStr = (String) props.get("test_date");
assertEquals(date, ISO8601DateFormat.parse(dateStr)); assertEquals(date, ISO8601DateFormat.parse(dateStr));
task.properties.put(WorkflowModel.ASSOC_POOLED_ACTORS, new ArrayList<NodeRef>(0)); task.getProperties().put(WorkflowModel.ASSOC_POOLED_ACTORS, new ArrayList<NodeRef>(0));
model = builder.buildSimple(task, null); model = builder.buildSimple(task, null);
assertEquals(false, model.get(WorkflowModelBuilder.TASK_IS_POOLED)); assertEquals(false, model.get(WorkflowModelBuilder.TASK_IS_POOLED));
ArrayList<NodeRef> actors = new ArrayList<NodeRef>(1); ArrayList<NodeRef> actors = new ArrayList<NodeRef>(1);
actors.add(person); actors.add(person);
task.properties.put(WorkflowModel.ASSOC_POOLED_ACTORS, actors); task.getProperties().put(WorkflowModel.ASSOC_POOLED_ACTORS, actors);
model = builder.buildSimple(task, null); model = builder.buildSimple(task, null);
assertEquals(true, model.get(WorkflowModelBuilder.TASK_IS_POOLED)); assertEquals(true, model.get(WorkflowModelBuilder.TASK_IS_POOLED));
@@ -143,56 +124,19 @@ public class WorkflowModelBuilderTest extends TestCase
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public void testBuildWorkflowTaskDetailed() throws Exception public void testBuildWorkflowTaskDetailed() throws Exception
{ {
WorkflowTask workflowTask = new WorkflowTask(); Date date = new Date();
workflowTask.id = "testId$1"; WorkflowTask workflowTask = makeTask(date);
workflowTask.name = "Task Name";
workflowTask.title = "Task Title";
workflowTask.description = "The Description";
workflowTask.state = WorkflowTaskState.IN_PROGRESS;
workflowTask.path = new WorkflowPath();
workflowTask.path.id = "pathId$1";
workflowTask.path.instance = new WorkflowInstance();
workflowTask.path.instance.id = "";
workflowTask.path.instance.active = true;
workflowTask.path.instance.startDate = new Date();
workflowTask.path.instance.definition = new WorkflowDefinition(
"The Id", "The Name", "1", "The Title", "The Description", null);
workflowTask.definition = new WorkflowTaskDefinition();
workflowTask.definition.id = "The Definition Id";
workflowTask.definition.metadata = mock(TypeDefinition.class);
when(workflowTask.definition.metadata.getName()).thenReturn(QName.createQName("The Type Name"));
when(workflowTask.definition.metadata.getTitle()).thenReturn("The Type Title");
when(workflowTask.definition.metadata.getDescription()).thenReturn("The Type Description");
WorkflowNode workflowNode = new WorkflowNode();
workflowNode.name = "The Node Name";
workflowNode.title = "The Node Title";
workflowNode.description = "The Node Description";
workflowNode.isTaskNode = true;
WorkflowTransition workflowTransition = new WorkflowTransition();
workflowTransition.id = "The Transition Id";
workflowTransition.title = "The Transition Title";
workflowTransition.description = "The Transition Description";
workflowTransition.isDefault = true;
workflowNode.transitions = new WorkflowTransition[] { workflowTransition };
workflowTask.definition.node = workflowNode;
workflowTask.properties = new HashMap<QName, Serializable>();
workflowTask.properties.put(ContentModel.PROP_OWNER, userName);
Map<String, Object> model = builder.buildDetailed(workflowTask); Map<String, Object> model = builder.buildDetailed(workflowTask);
Object id = model.get(WorkflowModelBuilder.TASK_ID); Object id = model.get(WorkflowModelBuilder.TASK_ID);
assertEquals(workflowTask.id, id); assertEquals(workflowTask.getId(), id);
Object url = model.get(WorkflowModelBuilder.TASK_URL); Object url = model.get(WorkflowModelBuilder.TASK_URL);
assertEquals("api/task-instances/" + workflowTask.id, url); assertEquals("api/task-instances/" + workflowTask.id, url);
assertEquals(workflowTask.name, model.get(WorkflowModelBuilder.TASK_NAME)); assertEquals(workflowTask.getName(), model.get(WorkflowModelBuilder.TASK_NAME));
assertEquals(workflowTask.title, model.get(WorkflowModelBuilder.TASK_TITLE)); assertEquals(workflowTask.getTitle(), model.get(WorkflowModelBuilder.TASK_TITLE));
assertEquals(workflowTask.description, model.get(WorkflowModelBuilder.TASK_DESCRIPTION)); assertEquals(workflowTask.getDescription(), model.get(WorkflowModelBuilder.TASK_DESCRIPTION));
assertEquals(workflowTask.state.name(), model.get(WorkflowModelBuilder.TASK_STATE)); assertEquals(workflowTask.getState().name(), model.get(WorkflowModelBuilder.TASK_STATE));
assertEquals(workflowTask.definition.metadata.getTitle(), model.get(WorkflowModelBuilder.TASK_TYPE_DEFINITION_TITLE));
assertEquals(false, model.get(WorkflowModelBuilder.TASK_IS_POOLED)); assertEquals(false, model.get(WorkflowModelBuilder.TASK_IS_POOLED));
Map<String, Object> owner = (Map<String, Object>) model.get(WorkflowModelBuilder.TASK_OWNER); Map<String, Object> owner = (Map<String, Object>) model.get(WorkflowModelBuilder.TASK_OWNER);
@@ -201,43 +145,49 @@ public class WorkflowModelBuilderTest extends TestCase
assertEquals(lastName, owner.get(WorkflowModelBuilder.PERSON_LAST_NAME)); assertEquals(lastName, owner.get(WorkflowModelBuilder.PERSON_LAST_NAME));
Map<String, Object> props = (Map<String, Object>) model.get(WorkflowModelBuilder.TASK_PROPERTIES); Map<String, Object> props = (Map<String, Object>) model.get(WorkflowModelBuilder.TASK_PROPERTIES);
assertEquals(workflowTask.properties.size(), props.size()); assertEquals(workflowTask.getProperties().size(), props.size());
Map<String, Object> workflowInstance = (Map<String, Object>) model.get(WorkflowModelBuilder.TASK_WORKFLOW_INSTANCE); Map<String, Object> workflowInstance = (Map<String, Object>) model.get(WorkflowModelBuilder.TASK_WORKFLOW_INSTANCE);
assertEquals(workflowTask.path.instance.id, workflowInstance.get(WorkflowModelBuilder.TASK_WORKFLOW_INSTANCE_ID)); WorkflowInstance instance = workflowTask.getPath().getInstance();
assertEquals(workflowTask.path.instance.definition.name, workflowInstance.get(WorkflowModelBuilder.TASK_WORKFLOW_INSTANCE_NAME)); assertEquals(instance.getId(), workflowInstance.get(WorkflowModelBuilder.TASK_WORKFLOW_INSTANCE_ID));
assertEquals(workflowTask.path.instance.definition.title, workflowInstance.get(WorkflowModelBuilder.TASK_WORKFLOW_INSTANCE_TITLE)); assertEquals(instance.isActive(), workflowInstance.get(WorkflowModelBuilder.TASK_WORKFLOW_INSTANCE_IS_ACTIVE));
assertEquals(workflowTask.path.instance.definition.description, workflowInstance.get(WorkflowModelBuilder.TASK_WORKFLOW_INSTANCE_DESCRIPTION)); String startDateStr = ISO8601DateFormat.format(instance.getStartDate());
assertEquals(workflowTask.path.instance.active, workflowInstance.get(WorkflowModelBuilder.TASK_WORKFLOW_INSTANCE_IS_ACTIVE)); assertEquals(startDateStr, workflowInstance.get(WorkflowModelBuilder.TASK_WORKFLOW_INSTANCE_START_DATE));
assertEquals(ISO8601DateFormat.format(workflowTask.path.instance.startDate), workflowInstance.get(WorkflowModelBuilder.TASK_WORKFLOW_INSTANCE_START_DATE));
Map<String, Object> definition = (Map<String, Object>) model.get(WorkflowModelBuilder.TASK_DEFINITION); WorkflowDefinition workflowDef = instance.getDefinition();
assertEquals(workflowDef.getName(), workflowInstance.get(WorkflowModelBuilder.TASK_WORKFLOW_INSTANCE_NAME));
assertEquals(workflowDef.getTitle(), workflowInstance.get(WorkflowModelBuilder.TASK_WORKFLOW_INSTANCE_TITLE));
assertEquals(workflowDef.getDescription(), workflowInstance.get(WorkflowModelBuilder.TASK_WORKFLOW_INSTANCE_DESCRIPTION));
assertEquals(workflowTask.definition.id, definition.get(WorkflowModelBuilder.TASK_DEFINITION_ID)); Map<String, Object> actualDefinition = (Map<String, Object>) model.get(WorkflowModelBuilder.TASK_DEFINITION);
WorkflowTaskDefinition taskDef = workflowTask.getDefinition();
assertEquals(taskDef.getId(), actualDefinition.get(WorkflowModelBuilder.TASK_DEFINITION_ID));
Map<String, Object> type = (Map<String, Object>) definition.get(WorkflowModelBuilder.TASK_DEFINITION_TYPE); Map<String, Object> actualType = (Map<String, Object>) actualDefinition.get(WorkflowModelBuilder.TASK_DEFINITION_TYPE);
TypeDefinition taskType = taskDef.getMetadata();
assertEquals(taskType.getName(), actualType.get(WorkflowModelBuilder.TYPE_DEFINITION_NAME));
assertEquals(taskType.getTitle(), actualType.get(WorkflowModelBuilder.TYPE_DEFINITION_TITLE));
assertEquals(taskType.getDescription(), actualType.get(WorkflowModelBuilder.TYPE_DEFINITION_DESCRIPTION));
assertEquals(workflowTask.definition.metadata.getName(), type.get(WorkflowModelBuilder.TYPE_DEFINITION_NAME)); Map<String, Object> actualNode = (Map<String, Object>) actualDefinition.get(WorkflowModelBuilder.TASK_DEFINITION_NODE);
assertEquals(workflowTask.definition.metadata.getTitle(), type.get(WorkflowModelBuilder.TYPE_DEFINITION_TITLE)); WorkflowNode taskNode = taskDef.getNode();
assertEquals(workflowTask.definition.metadata.getDescription(), type.get(WorkflowModelBuilder.TYPE_DEFINITION_DESCRIPTION)); assertEquals(taskNode.getName(), actualNode.get(WorkflowModelBuilder.WORKFLOW_NODE_NAME));
assertEquals(taskNode.getTitle(), actualNode.get(WorkflowModelBuilder.WORKFLOW_NODE_TITLE));
assertEquals(taskNode.getDescription(), actualNode.get(WorkflowModelBuilder.WORKFLOW_NODE_DESCRIPTION));
assertEquals(taskNode.isTaskNode(), actualNode.get(WorkflowModelBuilder.WORKFLOW_NODE_IS_TASK_NODE));
Map<String, Object> node = (Map<String, Object>) definition.get(WorkflowModelBuilder.TASK_DEFINITION_NODE); List<Map<String, Object>> transitions = (List<Map<String, Object>>) actualNode.get(WorkflowModelBuilder.WORKFLOW_NODE_TRANSITIONS);
assertEquals(workflowTask.definition.node.name, node.get(WorkflowModelBuilder.WORKFLOW_NODE_NAME));
assertEquals(workflowTask.definition.node.title, node.get(WorkflowModelBuilder.WORKFLOW_NODE_TITLE));
assertEquals(workflowTask.definition.node.description, node.get(WorkflowModelBuilder.WORKFLOW_NODE_DESCRIPTION));
assertEquals(workflowTask.definition.node.isTaskNode, node.get(WorkflowModelBuilder.WORKFLOW_NODE_IS_TASK_NODE));
List<Map<String, Object>> transitions = (List<Map<String, Object>>) node.get(WorkflowModelBuilder.WORKFLOW_NODE_TRANSITIONS);
WorkflowTransition[] taskTransitions = taskNode.getTransitions();
int i = 0; int i = 0;
for (Map<String, Object> transition : transitions) for (Map<String, Object> transition : transitions)
{ {
assertEquals(workflowTask.definition.node.transitions[i].id, transition.get(WorkflowModelBuilder.WORKFLOW_NODE_TRANSITION_ID)); WorkflowTransition workflowTransition = taskTransitions[i];
assertEquals(workflowTask.definition.node.transitions[i].title, transition.get(WorkflowModelBuilder.WORKFLOW_NODE_TRANSITION_TITLE)); assertEquals(workflowTransition.getId(), transition.get(WorkflowModelBuilder.WORKFLOW_NODE_TRANSITION_ID));
assertEquals(workflowTask.definition.node.transitions[i].description, transition.get(WorkflowModelBuilder.WORKFLOW_NODE_TRANSITION_DESCRIPTION)); assertEquals(workflowTransition.getTitle(), transition.get(WorkflowModelBuilder.WORKFLOW_NODE_TRANSITION_TITLE));
assertEquals(workflowTask.definition.node.transitions[i].isDefault, transition.get(WorkflowModelBuilder.WORKFLOW_NODE_TRANSITION_IS_DEFAULT)); assertEquals(workflowTransition.getDescription(), transition.get(WorkflowModelBuilder.WORKFLOW_NODE_TRANSITION_DESCRIPTION));
assertEquals(workflowTransition.isDefault(), transition.get(WorkflowModelBuilder.WORKFLOW_NODE_TRANSITION_IS_DEFAULT));
assertEquals(false, transition.get(WorkflowModelBuilder.WORKFLOW_NODE_TRANSITION_IS_HIDDEN)); assertEquals(false, transition.get(WorkflowModelBuilder.WORKFLOW_NODE_TRANSITION_IS_HIDDEN));
i++; i++;
} }
@@ -256,6 +206,89 @@ public class WorkflowModelBuilderTest extends TestCase
assertEquals(workflowDefinition.description, model.get(WorkflowModelBuilder.WORKFLOW_DEFINITION_DESCRIPTION)); assertEquals(workflowDefinition.description, model.get(WorkflowModelBuilder.WORKFLOW_DEFINITION_DESCRIPTION));
} }
private WorkflowNode makeNode()
{
WorkflowNode node = new WorkflowNode();
node.name = "The Node Name";
node.title = "The Node Title";
node.description = "The Node Description";
node.isTaskNode = true;
WorkflowTransition workflowTransition = makeTransition();
node.transitions = new WorkflowTransition[] { workflowTransition };
return node;
}
private WorkflowTransition makeTransition()
{
WorkflowTransition workflowTransition = new WorkflowTransition();
workflowTransition.id = "The Transition Id";
workflowTransition.title = "The Transition Title";
workflowTransition.description = "The Transition Description";
workflowTransition.isDefault = true;
return workflowTransition;
}
private WorkflowTaskDefinition makeTaskDefinition()
{
WorkflowTaskDefinition definition = new WorkflowTaskDefinition();
definition.id = "The Definition Id";
definition.metadata = makeTypeDefinition();
definition.node = makeNode();
return definition;
}
private TypeDefinition makeTypeDefinition()
{
TypeDefinition typeDef = mock(TypeDefinition.class);
when(typeDef.getName()).thenReturn(QName.createQName("The Type Name"));
when(typeDef.getTitle()).thenReturn("The Type Title");
when(typeDef.getDescription()).thenReturn("The Type Description");
return typeDef;
}
private WorkflowPath makePath()
{
WorkflowPath path = new WorkflowPath();
path.id = "pathId$1";
path.instance = new WorkflowInstance();
path.instance.id = "";
path.instance.active = true;
path.instance.startDate = new Date();
path.instance.definition = new WorkflowDefinition(
"The Id", "The Name", "1", "The Title", "The Description", null);
return path;
}
private WorkflowTask makeTask(Date date)
{
WorkflowTask task = new WorkflowTask();
task.description = "Task Desc";
task.id = "testId$1";
task.name = "Task Name";
task.state = WorkflowTaskState.IN_PROGRESS;
task.title = "Task Title";
task.path = makePath();
task.definition = makeTaskDefinition();
task.properties = makeTaskProperties(date);
return task;
}
private HashMap<QName, Serializable> makeTaskProperties(Date date)
{
HashMap<QName, Serializable> properties = new HashMap<QName, Serializable>();
properties.put(ContentModel.PROP_OWNER, userName);
QName testInt = QName.createQName(URI, "int");
properties.put(testInt, 5);
QName testBoolean = QName.createQName(URI, "boolean");
properties.put(testBoolean, false);
QName testString = QName.createQName(URI, "string");
properties.put(testString, "foo bar");
QName testDate = QName.createQName(URI, "date");
properties.put(testDate, date);
return properties;
}
@Override @Override
protected void setUp() throws Exception protected void setUp() throws Exception
{ {

View File

@@ -125,7 +125,7 @@ public class WorkflowRestApiTest extends BaseWebScriptTest
assertEquals(personManager.getFirstName(USER2), owner.getString("firstName")); assertEquals(personManager.getFirstName(USER2), owner.getString("firstName"));
assertEquals(personManager.getLastName(USER2), owner.getString("lastName")); assertEquals(personManager.getLastName(USER2), owner.getString("lastName"));
JSONObject properties = result.getJSONObject("properties"); // JSONObject properties = result.getJSONObject("properties");
//TODO Add more tests to check property filtering and pooled actors. //TODO Add more tests to check property filtering and pooled actors.
} }
@@ -157,7 +157,7 @@ public class WorkflowRestApiTest extends BaseWebScriptTest
assertEquals(startTask.title, result.getString("title")); assertEquals(startTask.title, result.getString("title"));
assertEquals(startTask.description, result.getString("description")); assertEquals(startTask.description, result.getString("description"));
assertEquals(startTask.state.name(), result.getString("state")); assertEquals(startTask.state.name(), result.getString("state"));
assertEquals(URL_TASKS + "/" + startTask.id + "/paths/" + adhocPath.id, result.getString("path")); assertEquals( "api/workflow-paths/" + adhocPath.getId(), result.getString("path"));
assertEquals(false, result.getBoolean("isPooled")); assertEquals(false, result.getBoolean("isPooled"));
JSONObject owner = result.getJSONObject("owner"); JSONObject owner = result.getJSONObject("owner");