mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
Modified TaskInstancesGet webscript so that it no longer omits properties with a null value. Also added an 'id' property to the task JSON representation.
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@21005 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
<#-- Renders a task instance. -->
|
<#-- Renders a task instance. -->
|
||||||
<#macro taskJSON task >
|
<#macro taskJSON task >
|
||||||
{
|
{
|
||||||
|
"id": "${task.id}",
|
||||||
"url": "${task.url}",
|
"url": "${task.url}",
|
||||||
"name": "${task.name}",
|
"name": "${task.name}",
|
||||||
"title": "${task.title}",
|
"title": "${task.title}",
|
||||||
@@ -8,16 +9,18 @@
|
|||||||
"state": "${task.state}",
|
"state": "${task.state}",
|
||||||
"typeDefinitionTitle": "${task.typeDefinitionTitle}",
|
"typeDefinitionTitle": "${task.typeDefinitionTitle}",
|
||||||
"isPooled": ${task.isPooled?string},
|
"isPooled": ${task.isPooled?string},
|
||||||
|
"owner":
|
||||||
<#if task.owner??>
|
<#if task.owner??>
|
||||||
"owner":
|
{
|
||||||
{
|
"userName": "${task.owner.userName}",
|
||||||
"userName": "${task.owner.userName}",
|
"firstName": "${task.owner.firstName}",
|
||||||
"firstName": "${task.owner.firstName}",
|
"lastName": "${task.owner.lastName}"
|
||||||
"lastName": "${task.owner.lastName}"
|
},
|
||||||
},
|
<#else>
|
||||||
|
null
|
||||||
</#if>
|
</#if>
|
||||||
"properties":
|
"properties":
|
||||||
<@propertiesJSON properties=task.properties />
|
<@propertiesJSON properties=task.properties />
|
||||||
}
|
}
|
||||||
</#macro>
|
</#macro>
|
||||||
|
|
||||||
@@ -25,9 +28,9 @@
|
|||||||
<#macro propertiesJSON properties>
|
<#macro propertiesJSON properties>
|
||||||
{
|
{
|
||||||
<#list properties?keys as key>
|
<#list properties?keys as key>
|
||||||
|
"${key}" :
|
||||||
<#if properties[key]??>
|
<#if properties[key]??>
|
||||||
<#assign val=properties[key]>
|
<#assign val=properties[key]>
|
||||||
"${key}" :
|
|
||||||
<#if val?is_boolean == true>
|
<#if val?is_boolean == true>
|
||||||
${val?string}
|
${val?string}
|
||||||
<#elseif val?is_number == true>
|
<#elseif val?is_number == true>
|
||||||
@@ -41,8 +44,10 @@
|
|||||||
<#else>
|
<#else>
|
||||||
"${jsonUtils.encodeJSONString(shortQName(val?string))}"
|
"${jsonUtils.encodeJSONString(shortQName(val?string))}"
|
||||||
</#if>
|
</#if>
|
||||||
<#if (key_has_next)>,</#if>
|
<#else>
|
||||||
|
null
|
||||||
</#if>
|
</#if>
|
||||||
|
<#if (key_has_next)>,</#if>
|
||||||
</#list>
|
</#list>
|
||||||
}
|
}
|
||||||
</#macro>
|
</#macro>
|
||||||
|
@@ -22,12 +22,16 @@ import java.io.Serializable;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.alfresco.error.AlfrescoRuntimeException;
|
import org.alfresco.error.AlfrescoRuntimeException;
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.repo.workflow.WorkflowModel;
|
import org.alfresco.repo.workflow.WorkflowModel;
|
||||||
|
import org.alfresco.service.cmr.dictionary.AssociationDefinition;
|
||||||
|
import org.alfresco.service.cmr.dictionary.PropertyDefinition;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.cmr.repository.NodeService;
|
import org.alfresco.service.cmr.repository.NodeService;
|
||||||
import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter;
|
import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter;
|
||||||
@@ -56,6 +60,7 @@ public class WorkflowModelBuilder
|
|||||||
public static final String TASK_NAME = "name";
|
public static final String TASK_NAME = "name";
|
||||||
public static final String TASK_URL = "url";
|
public static final String TASK_URL = "url";
|
||||||
public static final String TASK_IS_POOLED = "isPooled";
|
public static final String TASK_IS_POOLED = "isPooled";
|
||||||
|
public static final String TASK_ID = "id";
|
||||||
|
|
||||||
private static final String PREFIX_SEPARATOR = Character.toString(QName.NAMESPACE_PREFIX);
|
private static final String PREFIX_SEPARATOR = Character.toString(QName.NAMESPACE_PREFIX);
|
||||||
|
|
||||||
@@ -79,6 +84,7 @@ 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_URL, getUrl(task));
|
model.put(TASK_URL, getUrl(task));
|
||||||
model.put(TASK_NAME, task.name);
|
model.put(TASK_NAME, task.name);
|
||||||
model.put(TASK_TITLE, task.title);
|
model.put(TASK_TITLE, task.title);
|
||||||
@@ -88,11 +94,9 @@ public class WorkflowModelBuilder
|
|||||||
|
|
||||||
model.put(TASK_IS_POOLED, isPooled(task.properties));
|
model.put(TASK_IS_POOLED, isPooled(task.properties));
|
||||||
Serializable owner = task.properties.get(ContentModel.PROP_OWNER);
|
Serializable owner = task.properties.get(ContentModel.PROP_OWNER);
|
||||||
if (owner != null && owner instanceof String) {
|
model.put(TASK_OWNER, getPersonModel((String) owner));
|
||||||
model.put(TASK_OWNER, getPersonModel((String) owner));
|
|
||||||
}
|
|
||||||
|
|
||||||
model.put(TASK_PROPERTIES, buildProperties(task.properties, propertyFilters));
|
model.put(TASK_PROPERTIES, buildProperties(task, propertyFilters));
|
||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,19 +106,33 @@ public class WorkflowModelBuilder
|
|||||||
return actors!=null && !actors.isEmpty();
|
return actors!=null && !actors.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<String, Object> buildProperties(Map<QName, Serializable> properties, Collection<String> propertyFilters)
|
private Map<String, Object> buildProperties(WorkflowTask task, Collection<String> propertyFilters)
|
||||||
{
|
{
|
||||||
|
Map<QName, Serializable> properties = task.properties;
|
||||||
Collection<QName> keys;
|
Collection<QName> keys;
|
||||||
if (propertyFilters == null || propertyFilters.size() == 0)
|
if (propertyFilters == null || propertyFilters.size() == 0)
|
||||||
keys = properties.keySet();
|
{
|
||||||
|
Map<QName, PropertyDefinition> propDefs = task.definition.metadata.getProperties();
|
||||||
|
Map<QName, AssociationDefinition> assocDefs = task.definition.metadata.getAssociations();
|
||||||
|
Set<QName> propKeys = properties.keySet();
|
||||||
|
keys = new HashSet<QName>(propDefs.size() + assocDefs.size() + propKeys.size());
|
||||||
|
keys.addAll(propDefs.keySet());
|
||||||
|
keys.addAll(assocDefs.keySet());
|
||||||
|
keys.addAll(propKeys);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
keys = buildQNameKeys(propertyFilters);
|
keys = buildQNameKeys(propertyFilters);
|
||||||
|
return buildQNameProperties(properties, keys);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<String, Object> buildQNameProperties(Map<QName, Serializable> properties, Collection<QName> keys)
|
||||||
|
{
|
||||||
Map<String, Object> model = new HashMap<String, Object>();
|
Map<String, Object> model = new HashMap<String, Object>();
|
||||||
for (QName key : keys)
|
for (QName key : keys)
|
||||||
{
|
{
|
||||||
Object value = convertValue(properties.get(key));
|
Object value = convertValue(properties.get(key));
|
||||||
String preixedKey = key.toPrefixString(namespaceService);
|
String prefixedKey = key.toPrefixString(namespaceService);
|
||||||
String strKey = preixedKey.replace(PREFIX_SEPARATOR, "_");
|
String strKey = prefixedKey.replace(PREFIX_SEPARATOR, "_");
|
||||||
model.put(strKey, value);
|
model.put(strKey, value);
|
||||||
}
|
}
|
||||||
return model;
|
return model;
|
||||||
@@ -160,8 +178,12 @@ public class WorkflowModelBuilder
|
|||||||
return qKeys;
|
return qKeys;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<String, Object> getPersonModel(String name)
|
private Map<String, Object> getPersonModel(Serializable nameSer)
|
||||||
{
|
{
|
||||||
|
if (!(nameSer instanceof String))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
String name = (String) nameSer;
|
||||||
NodeRef person = personService.getPerson(name);
|
NodeRef person = personService.getPerson(name);
|
||||||
Map<QName, Serializable> properties = nodeService.getProperties(person);
|
Map<QName, Serializable> properties = nodeService.getProperties(person);
|
||||||
|
|
||||||
|
@@ -88,6 +88,8 @@ public class WorkflowModelBuilderTest extends TestCase
|
|||||||
task.properties.put(testDate, date);
|
task.properties.put(testDate, date);
|
||||||
|
|
||||||
Map<String, Object> model = builder.buildSimple(task, null);
|
Map<String, Object> model = builder.buildSimple(task, null);
|
||||||
|
Object id = model.get(WorkflowModelBuilder.TASK_ID);
|
||||||
|
assertEquals(task.id, id);
|
||||||
Object url = model.get(WorkflowModelBuilder.TASK_URL);
|
Object url = model.get(WorkflowModelBuilder.TASK_URL);
|
||||||
assertEquals("api/task-instance/"+task.id, url);
|
assertEquals("api/task-instance/"+task.id, url);
|
||||||
assertEquals(task.name, model.get(WorkflowModelBuilder.TASK_NAME));
|
assertEquals(task.name, model.get(WorkflowModelBuilder.TASK_NAME));
|
||||||
|
@@ -66,7 +66,8 @@ public class WorkflowRestApiTest extends BaseWebScriptTest
|
|||||||
personManager.setUser(USER2);
|
personManager.setUser(USER2);
|
||||||
Response response = sendRequest(new GetRequest(URL_TASKS), 200);
|
Response response = sendRequest(new GetRequest(URL_TASKS), 200);
|
||||||
assertEquals(Status.STATUS_OK, response.getStatus());
|
assertEquals(Status.STATUS_OK, response.getStatus());
|
||||||
JSONObject json = new JSONObject(response.getContentAsString());
|
String jsonStr = response.getContentAsString();
|
||||||
|
JSONObject json = new JSONObject(jsonStr);
|
||||||
JSONArray results = json.getJSONArray("data");
|
JSONArray results = json.getJSONArray("data");
|
||||||
assertNotNull(results);
|
assertNotNull(results);
|
||||||
assertTrue(results.length()==0);
|
assertTrue(results.length()==0);
|
||||||
@@ -88,13 +89,12 @@ public class WorkflowRestApiTest extends BaseWebScriptTest
|
|||||||
List<WorkflowTask> tasks = workflowService.getAssignedTasks(USER2, WorkflowTaskState.IN_PROGRESS);
|
List<WorkflowTask> tasks = workflowService.getAssignedTasks(USER2, WorkflowTaskState.IN_PROGRESS);
|
||||||
WorkflowTask task = tasks.get(0);
|
WorkflowTask task = tasks.get(0);
|
||||||
|
|
||||||
Serializable actors = task.properties.get(WorkflowModel.ASSOC_POOLED_ACTORS);
|
|
||||||
System.out.println("Pooled Actors: " + actors);
|
|
||||||
|
|
||||||
personManager.setUser(USER2);
|
personManager.setUser(USER2);
|
||||||
response = sendRequest(new GetRequest(URL_TASKS), 200);
|
response = sendRequest(new GetRequest(URL_TASKS), 200);
|
||||||
assertEquals(Status.STATUS_OK, response.getStatus());
|
assertEquals(Status.STATUS_OK, response.getStatus());
|
||||||
json = new JSONObject(response.getContentAsString());
|
jsonStr = response.getContentAsString();
|
||||||
|
System.out.println(jsonStr);
|
||||||
|
json = new JSONObject(jsonStr);
|
||||||
results = json.getJSONArray("data");
|
results = json.getJSONArray("data");
|
||||||
assertNotNull(results);
|
assertNotNull(results);
|
||||||
assertTrue(results.length()==tasks.size());
|
assertTrue(results.length()==tasks.size());
|
||||||
@@ -115,12 +115,6 @@ public class WorkflowRestApiTest extends BaseWebScriptTest
|
|||||||
assertEquals(personManager.getLastName(USER2), owner.getString("lastName"));
|
assertEquals(personManager.getLastName(USER2), owner.getString("lastName"));
|
||||||
|
|
||||||
JSONObject properties = result.getJSONObject("properties");
|
JSONObject properties = result.getJSONObject("properties");
|
||||||
Collection<Serializable> values = task.properties.values();
|
|
||||||
while(values.contains(null))
|
|
||||||
{
|
|
||||||
values.remove(null);
|
|
||||||
}
|
|
||||||
assertEquals(values.size(), properties.length());
|
|
||||||
|
|
||||||
//TODO Add more tests to check property filtering and pooled actors.
|
//TODO Add more tests to check property filtering and pooled actors.
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user