Merged BRANCHES/DEV/BELARUS/HEAD_2010_07_28 to HEAD:

21459: ALF-3897 (F79) REST API to get a specific task instance

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@21463 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Gavin Cornwell
2010-07-28 15:01:00 +00:00
parent 3d02a82d20
commit 21bab3d746
4 changed files with 127 additions and 0 deletions

View File

@@ -38,6 +38,7 @@ import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.cmr.workflow.WorkflowDefinition;
import org.alfresco.service.cmr.workflow.WorkflowInstance;
import org.alfresco.service.cmr.workflow.WorkflowNode;
import org.alfresco.service.cmr.workflow.WorkflowPath;
import org.alfresco.service.cmr.workflow.WorkflowTask;
@@ -46,6 +47,7 @@ import org.alfresco.service.cmr.workflow.WorkflowTransition;
import org.alfresco.service.namespace.NamespaceException;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
import org.springframework.extensions.surf.util.ISO8601DateFormat;
/**
* @author Nick Smith
@@ -75,6 +77,23 @@ public class WorkflowModelBuilder
public static final String TASK_DEFINITION_TYPE = "type";
public static final String TASK_DEFINITION_NODE = "node";
public static final String TASK_WORKFLOW_INSTANCE = "workflowInstance";
public static final String TASK_WORKFLOW_INSTANCE_ID = "id";
public static final String TASK_WORKFLOW_INSTANCE_URL = "url";
public static final String TASK_WORKFLOW_INSTANCE_NAME = "name";
public static final String TASK_WORKFLOW_INSTANCE_TITLE = "title";
public static final String TASK_WORKFLOW_INSTANCE_DESCRIPTION = "description";
public static final String TASK_WORKFLOW_INSTANCE_IS_ACTIVE = "isActive";
public static final String TASK_WORKFLOW_INSTANCE_START_DATE = "startDate";
public static final String TASK_WORKFLOW_INSTANCE_END_DATE = "endDate";
public static final String TASK_WORKFLOW_INSTANCE_INITIATOR = "initiator";
public static final String TASK_WORKFLOW_INSTANCE_DEFINITION_URL = "definitionUrl";
public static final String TASK_WORKFLOW_INSTANCE_INITIATOR_USERNAME = "userName";
public static final String TASK_WORKFLOW_INSTANCE_INITIATOR_FIRSTNAME = "firstName";
public static final String TASK_WORKFLOW_INSTANCE_INITIATOR_LASTNAME = "lastName";
public static final String TYPE_DEFINITION_NAME = "name";
public static final String TYPE_DEFINITION_TITLE = "title";
public static final String TYPE_DEFINITION_DESCRIPTION = "description";
@@ -147,6 +166,9 @@ public class WorkflowModelBuilder
model.put(TASK_PATH, getUrl(workflowTask, workflowTask.path));
// workflow instance part
model.put(TASK_WORKFLOW_INSTANCE, buildWorkflowInstance(workflowTask.path.instance));
// definition part
model.put(TASK_DEFINITION, buildTaskDefinition(workflowTask.definition, workflowTask));
@@ -265,6 +287,48 @@ public class WorkflowModelBuilder
return model;
}
private Map<String, Object> buildWorkflowInstance(WorkflowInstance workflowInstance)
{
Map<String, Object> model = new HashMap<String, Object>();
model.put(TASK_WORKFLOW_INSTANCE_ID, workflowInstance.id);
model.put(TASK_WORKFLOW_INSTANCE_URL, getUrl(workflowInstance));
model.put(TASK_WORKFLOW_INSTANCE_NAME, workflowInstance.definition.name);
model.put(TASK_WORKFLOW_INSTANCE_TITLE, workflowInstance.definition.title);
model.put(TASK_WORKFLOW_INSTANCE_DESCRIPTION, workflowInstance.definition.description);
model.put(TASK_WORKFLOW_INSTANCE_IS_ACTIVE, workflowInstance.active);
if (workflowInstance.startDate == null)
{
model.put(TASK_WORKFLOW_INSTANCE_START_DATE, workflowInstance.startDate);
}
else
{
model.put(TASK_WORKFLOW_INSTANCE_START_DATE, ISO8601DateFormat.format(workflowInstance.startDate));
}
if (workflowInstance.endDate == null)
{
model.put(TASK_WORKFLOW_INSTANCE_END_DATE, workflowInstance.endDate);
}
else
{
model.put(TASK_WORKFLOW_INSTANCE_END_DATE, ISO8601DateFormat.format(workflowInstance.endDate));
}
if (workflowInstance.initiator == null)
{
model.put(TASK_WORKFLOW_INSTANCE_INITIATOR, null);
}
else
{
model.put(TASK_WORKFLOW_INSTANCE_INITIATOR, getPersonModel(nodeService.getProperty(workflowInstance.initiator, ContentModel.PROP_USERNAME)));
}
model.put(TASK_WORKFLOW_INSTANCE_DEFINITION_URL, getUrl(workflowInstance.definition));
return model;
}
private Map<String, Object> buildTaskDefinition(WorkflowTaskDefinition workflowTaskDefinition, WorkflowTask workflowTask)
{
Map<String, Object> model = new HashMap<String, Object>();
@@ -354,4 +418,9 @@ public class WorkflowModelBuilder
return getUrl(task) + "/paths/" + path.id;
}
private String getUrl(WorkflowInstance workflowInstance)
{
return "api/workflow-instances/" + workflowInstance.id;
}
}

View File

@@ -39,6 +39,7 @@ import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.cmr.workflow.WorkflowDefinition;
import org.alfresco.service.cmr.workflow.WorkflowInstance;
import org.alfresco.service.cmr.workflow.WorkflowNode;
import org.alfresco.service.cmr.workflow.WorkflowPath;
import org.alfresco.service.cmr.workflow.WorkflowTask;
@@ -151,6 +152,12 @@ public class WorkflowModelBuilderTest extends TestCase
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";
@@ -196,6 +203,15 @@ public class WorkflowModelBuilderTest extends TestCase
Map<String, Object> props = (Map<String, Object>) model.get(WorkflowModelBuilder.TASK_PROPERTIES);
assertEquals(workflowTask.properties.size(), props.size());
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));
assertEquals(workflowTask.path.instance.definition.name, workflowInstance.get(WorkflowModelBuilder.TASK_WORKFLOW_INSTANCE_NAME));
assertEquals(workflowTask.path.instance.definition.title, workflowInstance.get(WorkflowModelBuilder.TASK_WORKFLOW_INSTANCE_TITLE));
assertEquals(workflowTask.path.instance.definition.description, workflowInstance.get(WorkflowModelBuilder.TASK_WORKFLOW_INSTANCE_DESCRIPTION));
assertEquals(workflowTask.path.instance.active, workflowInstance.get(WorkflowModelBuilder.TASK_WORKFLOW_INSTANCE_IS_ACTIVE));
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);
assertEquals(workflowTask.definition.id, definition.get(WorkflowModelBuilder.TASK_DEFINITION_ID));

View File

@@ -33,6 +33,7 @@ import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.cmr.workflow.WorkflowDefinition;
import org.alfresco.service.cmr.workflow.WorkflowInstance;
import org.alfresco.service.cmr.workflow.WorkflowNode;
import org.alfresco.service.cmr.workflow.WorkflowPath;
import org.alfresco.service.cmr.workflow.WorkflowService;
@@ -167,7 +168,26 @@ public class WorkflowRestApiTest extends BaseWebScriptTest
JSONObject properties = result.getJSONObject("properties");
assertNotNull(properties);
JSONObject instance = result.getJSONObject("workflowInstance");
WorkflowInstance startInstance = startTask.path.instance;
assertNotNull(instance);
assertEquals(startInstance.id, instance.getString("id"));
assertTrue(instance.has("url"));
assertEquals(startInstance.definition.name, instance.getString("name"));
assertEquals(startInstance.definition.title, instance.getString("title"));
assertEquals(startInstance.definition.description, instance.getString("description"));
assertEquals(startInstance.active, instance.getBoolean("isActive"));
assertTrue(instance.has("startDate"));
JSONObject initiator = instance.getJSONObject("initiator");
assertEquals(USER1, initiator.getString("userName"));
assertEquals(personManager.getFirstName(USER1), initiator.getString("firstName"));
assertEquals(personManager.getLastName(USER1), initiator.getString("lastName"));
JSONObject definition = result.getJSONObject("definition");
WorkflowTaskDefinition startDefinitiont = startTask.definition;