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:
@@ -22,12 +22,16 @@ import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.alfresco.error.AlfrescoRuntimeException;
|
||||
import org.alfresco.model.ContentModel;
|
||||
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.NodeService;
|
||||
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_URL = "url";
|
||||
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);
|
||||
|
||||
@@ -79,6 +84,7 @@ public class WorkflowModelBuilder
|
||||
public Map<String, Object> buildSimple(WorkflowTask task, Collection<String> propertyFilters)
|
||||
{
|
||||
HashMap<String, Object> model = new HashMap<String, Object>();
|
||||
model.put(TASK_ID, task.id);
|
||||
model.put(TASK_URL, getUrl(task));
|
||||
model.put(TASK_NAME, task.name);
|
||||
model.put(TASK_TITLE, task.title);
|
||||
@@ -88,11 +94,9 @@ public class WorkflowModelBuilder
|
||||
|
||||
model.put(TASK_IS_POOLED, isPooled(task.properties));
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -102,19 +106,33 @@ public class WorkflowModelBuilder
|
||||
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;
|
||||
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
|
||||
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>();
|
||||
for (QName key : keys)
|
||||
{
|
||||
Object value = convertValue(properties.get(key));
|
||||
String preixedKey = key.toPrefixString(namespaceService);
|
||||
String strKey = preixedKey.replace(PREFIX_SEPARATOR, "_");
|
||||
String prefixedKey = key.toPrefixString(namespaceService);
|
||||
String strKey = prefixedKey.replace(PREFIX_SEPARATOR, "_");
|
||||
model.put(strKey, value);
|
||||
}
|
||||
return model;
|
||||
@@ -160,8 +178,12 @@ public class WorkflowModelBuilder
|
||||
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);
|
||||
Map<QName, Serializable> properties = nodeService.getProperties(person);
|
||||
|
||||
|
@@ -88,6 +88,8 @@ public class WorkflowModelBuilderTest extends TestCase
|
||||
task.properties.put(testDate, date);
|
||||
|
||||
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);
|
||||
assertEquals("api/task-instance/"+task.id, url);
|
||||
assertEquals(task.name, model.get(WorkflowModelBuilder.TASK_NAME));
|
||||
|
@@ -66,7 +66,8 @@ public class WorkflowRestApiTest extends BaseWebScriptTest
|
||||
personManager.setUser(USER2);
|
||||
Response response = sendRequest(new GetRequest(URL_TASKS), 200);
|
||||
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");
|
||||
assertNotNull(results);
|
||||
assertTrue(results.length()==0);
|
||||
@@ -88,13 +89,12 @@ public class WorkflowRestApiTest extends BaseWebScriptTest
|
||||
List<WorkflowTask> tasks = workflowService.getAssignedTasks(USER2, WorkflowTaskState.IN_PROGRESS);
|
||||
WorkflowTask task = tasks.get(0);
|
||||
|
||||
Serializable actors = task.properties.get(WorkflowModel.ASSOC_POOLED_ACTORS);
|
||||
System.out.println("Pooled Actors: " + actors);
|
||||
|
||||
personManager.setUser(USER2);
|
||||
response = sendRequest(new GetRequest(URL_TASKS), 200);
|
||||
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");
|
||||
assertNotNull(results);
|
||||
assertTrue(results.length()==tasks.size());
|
||||
@@ -115,12 +115,6 @@ public class WorkflowRestApiTest extends BaseWebScriptTest
|
||||
assertEquals(personManager.getLastName(USER2), owner.getString("lastName"));
|
||||
|
||||
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.
|
||||
}
|
||||
|
Reference in New Issue
Block a user