diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/workflow/task.lib.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/workflow/task.lib.ftl index da0a78fa51..7740dfed56 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/workflow/task.lib.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/workflow/task.lib.ftl @@ -11,6 +11,7 @@ "description": "${task.description}", "state": "${task.state}", "typeDefinitionTitle": "${task.typeDefinitionTitle}", + "path": "${task.path}", "isPooled": ${task.isPooled?string}, "owner": <#if task.owner??> @@ -23,10 +24,10 @@ null, "properties": - <@propertiesJSON properties=task.properties /> - <#if detailed>, - "path": "${task.path}", - "workflowInstance": <@workflowInstanceJSON workflowInstance=task.workflowInstance/>, + <@propertiesJSON properties=task.properties />, + "workflowInstance": + <@workflowInstanceJSON workflowInstance=task.workflowInstance/><#if detailed>, + "definition": { "id": "${task.definition.id}", @@ -60,80 +61,79 @@ } } - } + } <#-- Renders a map of properties --> <#macro propertiesJSON properties> <#escape x as jsonUtils.encodeJSONString(x)> - { - <#list properties?keys as key> - "${key}": - <#if properties[key]??> - <#assign val=properties[key]> - <#if val?is_boolean == true> - ${val?string} - <#elseif val?is_number == true> - ${val?c} - <#elseif val?is_sequence> - [ - <#list val as element> - "${element?string}"<#if (element_has_next)>, - - ] - <#else> - "${shortQName(val?string)}" - +{ +<#list properties?keys as key> + "${key}": + <#if properties[key]??> + <#assign val=properties[key]> + <#if val?is_boolean == true> + ${val?string} + <#elseif val?is_number == true> + ${val?c} + <#elseif val?is_sequence> + [ + <#list val as element> + "${element?string}"<#if (element_has_next)>, + + ] <#else> - null + "${shortQName(val?string)}" - <#if (key_has_next)>, - - } + <#else> + null + <#if (key_has_next)>, + +} <#-- Renders a workflow instance. --> <#macro workflowInstanceJSON workflowInstance detailed=false> <#escape x as jsonUtils.encodeJSONString(x)> - { - "id": "${workflowInstance.id}", - "url": "${workflowInstance.url}", - "name": "${workflowInstance.name}", - "title": "${workflowInstance.title}", - "description": "${workflowInstance.description}", - "isActive": ${workflowInstance.isActive?string}, - "startDate": "${workflowInstance.startDate}", - "endDate": <#if workflowInstance.endDate??>"${workflowInstance.endDate}"<#else>null, - "initiator": - <#if workflowInstance.initiator??> - { - "userName": "${workflowInstance.initiator.userName}", - "firstName": "${workflowInstance.initiator.firstName}", - "lastName": "${workflowInstance.initiator.lastName}" - }, - <#else> - null, - - "definitionUrl": "${workflowInstance.definitionUrl}" - <#if detailed>, - "dueDate": <#if workflowInstance.dueDate??>"${workflowInstance.dueDate}"<#else>null, - "priority": <#if workflowInstance.priority??>${workflowInstance.priority?c}<#else>null, - "context": <#if workflowInstance.context??>"${workflowInstance.context}"<#else>null, - "package": "${workflowInstance.package}", - "startTaskInstanceId": "${workflowInstance.startTaskInstanceId}", - "definition": <@worflowDefinitionLib.workflowDefinitionJSON workflowDefinition=workflowInstance.definition detailed=true/> - <#if workflowInstance.tasks??>, - "tasks": - [ - <#list workflowInstance.tasks as task> - <@taskJSON task=task/> - <#if task_has_next>, - - ] - - - } +{ + "id": "${workflowInstance.id}", + "url": "${workflowInstance.url}", + "name": "${workflowInstance.name}", + "title": "${workflowInstance.title}", + "description": "${workflowInstance.description}", + "isActive": ${workflowInstance.isActive?string}, + "startDate": "${workflowInstance.startDate}", + "endDate": <#if workflowInstance.endDate??>"${workflowInstance.endDate}"<#else>null, + "initiator": + <#if workflowInstance.initiator??> + { + "userName": "${workflowInstance.initiator.userName}", + "firstName": "${workflowInstance.initiator.firstName}", + "lastName": "${workflowInstance.initiator.lastName}" + }, + <#else> + null, + + "definitionUrl": "${workflowInstance.definitionUrl}"<#if detailed>, + "dueDate": <#if workflowInstance.dueDate??>"${workflowInstance.dueDate}"<#else>null, + "priority": <#if workflowInstance.priority??>${workflowInstance.priority?c}<#else>null, + "context": <#if workflowInstance.context??>"${workflowInstance.context}"<#else>null, + "package": "${workflowInstance.package}", + "startTaskInstanceId": "${workflowInstance.startTaskInstanceId}", + "definition": + <@worflowDefinitionLib.workflowDefinitionJSON workflowDefinition=workflowInstance.definition detailed=true/> + <#if workflowInstance.tasks??>, + "tasks": + [ + <#list workflowInstance.tasks as task> + <@taskJSON task=task/> + <#if task_has_next>, + + ] + + +} \ No newline at end of file diff --git a/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowModelBuilder.java b/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowModelBuilder.java index 9df8931afa..ae01fabd83 100644 --- a/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowModelBuilder.java +++ b/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowModelBuilder.java @@ -164,12 +164,18 @@ public class WorkflowModelBuilder model.put(TASK_DESCRIPTION, task.getDescription()); model.put(TASK_STATE, task.getState().name()); model.put(TASK_TYPE_DEFINITION_TITLE, task.getDefinition().getMetadata().getTitle()); - + model.put(TASK_PATH, getUrl(task.getPath())); model.put(TASK_IS_POOLED, isPooled(task.getProperties())); + Serializable owner = task.getProperties().get(ContentModel.PROP_OWNER); model.put(TASK_OWNER, getPersonModel( owner)); + // task properties model.put(TASK_PROPERTIES, buildProperties(task, propertyFilters)); + + // workflow instance part + model.put(TASK_WORKFLOW_INSTANCE, buildSimple(task.getPath().getInstance())); + return model; } @@ -182,11 +188,6 @@ public class WorkflowModelBuilder { Map model = buildSimple(workflowTask, null); - model.put(TASK_PATH, getUrl(workflowTask.getPath())); - - // workflow instance part - model.put(TASK_WORKFLOW_INSTANCE, buildSimple(workflowTask.getPath().getInstance())); - // definition part model.put(TASK_DEFINITION, buildTaskDefinition(workflowTask.getDefinition(), workflowTask)); diff --git a/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowModelBuilderTest.java b/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowModelBuilderTest.java index 68ef3ff13b..f0fe02b997 100644 --- a/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowModelBuilderTest.java +++ b/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowModelBuilderTest.java @@ -102,6 +102,14 @@ public class WorkflowModelBuilderTest extends TestCase String dateStr = (String) props.get("test_date"); assertEquals(date, ISO8601DateFormat.parse(dateStr)); + Map workflowInstance = (Map)model.get(WorkflowModelBuilder.TASK_WORKFLOW_INSTANCE); + assertNotNull(workflowInstance); + WorkflowInstance instance = task.getPath().getInstance(); + assertEquals(instance.getId(), workflowInstance.get(WorkflowModelBuilder.TASK_WORKFLOW_INSTANCE_ID)); + assertEquals(instance.isActive(), workflowInstance.get(WorkflowModelBuilder.TASK_WORKFLOW_INSTANCE_IS_ACTIVE)); + String startDateStr = ISO8601DateFormat.format(instance.getStartDate()); + assertEquals(startDateStr, workflowInstance.get(WorkflowModelBuilder.TASK_WORKFLOW_INSTANCE_START_DATE)); + task.getProperties().put(WorkflowModel.ASSOC_POOLED_ACTORS, new ArrayList(0)); model = builder.buildSimple(task, null); assertEquals(false, model.get(WorkflowModelBuilder.TASK_IS_POOLED)); diff --git a/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowRestApiTest.java b/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowRestApiTest.java index d2696df181..d9d811f94f 100644 --- a/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowRestApiTest.java +++ b/source/java/org/alfresco/repo/web/scripts/workflow/WorkflowRestApiTest.java @@ -126,9 +126,13 @@ public class WorkflowRestApiTest extends BaseWebScriptTest assertEquals(personManager.getFirstName(USER2), owner.getString("firstName")); assertEquals(personManager.getLastName(USER2), owner.getString("lastName")); -// JSONObject properties = result.getJSONObject("properties"); + JSONObject properties = result.getJSONObject("properties"); + assertNotNull(properties); - //TODO Add more tests to check property filtering and pooled actors. + JSONObject instance = result.getJSONObject("workflowInstance"); + assertNotNull(instance); + + // TODO: Add more tests to check property filtering and pooled actors. } public void testTaskInstanceGet() throws Exception