diff --git a/source/java/org/alfresco/rest/api/People.java b/source/java/org/alfresco/rest/api/People.java index 28620181c3..025bbb79df 100644 --- a/source/java/org/alfresco/rest/api/People.java +++ b/source/java/org/alfresco/rest/api/People.java @@ -34,7 +34,8 @@ import org.alfresco.service.cmr.security.NoSuchPersonException; public interface People { String DEFAULT_USER = "-me-"; - + String PARAM_INCLUDE_ASPECTNAMES = "aspectNames"; + String PARAM_INCLUDE_PROPERTIES = "properties"; String PARAM_FIRST_NAME = "firstName"; String PARAM_LAST_NAME = "lastName"; String PARAM_ID = "id"; diff --git a/source/java/org/alfresco/rest/api/impl/PeopleImpl.java b/source/java/org/alfresco/rest/api/impl/PeopleImpl.java index 457112a4c8..355ec2f46a 100644 --- a/source/java/org/alfresco/rest/api/impl/PeopleImpl.java +++ b/source/java/org/alfresco/rest/api/impl/PeopleImpl.java @@ -297,7 +297,10 @@ public class PeopleImpl implements People public Person getPerson(String personId) { personId = validatePerson(personId); - Person person = getPersonWithProperties(personId); + List include = Arrays.asList( + PARAM_INCLUDE_ASPECTNAMES, + PARAM_INCLUDE_PROPERTIES); + Person person = getPersonWithProperties(personId, include); return person; } @@ -322,7 +325,7 @@ public class PeopleImpl implements People public Person get(int index) { PersonService.PersonInfo personInfo = page.get(index); - Person person = getPersonWithProperties(personInfo.getUserName()); + Person person = getPersonWithProperties(personInfo.getUserName(), parameters.getInclude()); return person; } @@ -360,7 +363,7 @@ public class PeopleImpl implements People return sortProps; } - private Person getPersonWithProperties(String personId) + private Person getPersonWithProperties(String personId, List include) { Person person = null; NodeRef personNode = personService.getPerson(personId, false); @@ -384,12 +387,18 @@ public class PeopleImpl implements People nodeProps.remove(Person.PROP_PERSON_DESCRIPTION); // Expose properties - Map custProps = new HashMap<>(); - custProps.putAll(nodes.mapFromNodeProperties(nodeProps, new ArrayList<>(), new HashMap<>(), EXCLUDED_PROPS)); - person.setProperties(custProps); - // Expose aspect names - Set aspects = nodeService.getAspects(personNode); - person.setAspectNames(nodes.mapFromNodeAspects(aspects, EXCLUDED_ASPECTS)); + if (include.contains(PARAM_INCLUDE_PROPERTIES)) + { + Map custProps = new HashMap<>(); + custProps.putAll(nodes.mapFromNodeProperties(nodeProps, new ArrayList<>(), new HashMap<>(), EXCLUDED_PROPS)); + person.setProperties(custProps); + } + if (include.contains(PARAM_INCLUDE_ASPECTNAMES)) + { + // Expose aspect names + Set aspects = nodeService.getAspects(personNode); + person.setAspectNames(nodes.mapFromNodeAspects(aspects, EXCLUDED_ASPECTS)); + } // get avatar information if (hasAvatar(personNode)) diff --git a/source/test-java/org/alfresco/rest/api/tests/TestPeople.java b/source/test-java/org/alfresco/rest/api/tests/TestPeople.java index 774094bf2b..253d18b921 100644 --- a/source/test-java/org/alfresco/rest/api/tests/TestPeople.java +++ b/source/test-java/org/alfresco/rest/api/tests/TestPeople.java @@ -120,12 +120,12 @@ public class TestPeople extends EnterpriseTestApi return network; } - @Test - public void testPeople() throws Exception - { - final String person1 = account1PersonIt.next(); - final String person2 = account1PersonIt.next(); - final String person3 = account2PersonIt.next(); + @Test + public void testGetPerson() throws Exception + { + final String person1 = account1PersonIt.next(); + final String person2 = account1PersonIt.next(); + final String person3 = account2PersonIt.next(); // Test Case cloud-2192 // should be able to see oneself @@ -1022,8 +1022,13 @@ public class TestPeople extends EnterpriseTestApi { params.put("orderBy", sortColumn + " " + (asc ? "ASC" : "DESC")); } + + return listPeople(createParams(paging, params), statusCode); + } - HttpResponse response = people.getAll("people", null, null, null, createParams(paging, params), "Failed to get people", statusCode); + private PublicApiClient.ListResponse listPeople(Map parameters, int expectedStatusCode) throws PublicApiException + { + HttpResponse response = people.getAll("people", null, null, null, parameters, "Failed to get people", expectedStatusCode); JSONObject jsonList = (JSONObject) response.getJsonResponse().get("list"); if (jsonList == null) { @@ -1033,6 +1038,32 @@ public class TestPeople extends EnterpriseTestApi return Person.parsePeople(response.getJsonResponse()); } + @Test + public void testListPeopleWithAspectNamesAndProperties() throws PublicApiException + { + initializeContextForGetPeople(); + + // Are aspectNames and properties left absent when not required? + { + PublicApiClient.ListResponse resp = listPeople(Collections.emptyMap(), 200); + assertNull(resp.getList().get(0).getAspectNames()); + assertNull(resp.getList().get(0).getProperties()); + } + + // Are aspectNames and properties populated when requested? + { + Map parameters = Collections.singletonMap("include", "aspectNames,properties"); + PublicApiClient.ListResponse resp = listPeople(parameters, 200); + Person alice = resp.getList().stream(). + filter(p -> p.getUserName().equals("alice@"+account4.getId())) + .findFirst().get(); + assertNotNull(alice.getAspectNames()); + assertTrue(alice.getAspectNames().contains("cm:titled")); + assertNotNull(alice.getProperties()); + assertEquals("Alice through the REST API", alice.getProperties().get("cm:title")); + } + } + /** * Tests the capability to sort and paginate the list of people orderBy = * firstName ASC skip = 1, count = 3 @@ -1232,6 +1263,7 @@ public class TestPeople extends EnterpriseTestApi personAlice.setEmail("alison.smith@example.com"); personAlice.setPassword("password"); personAlice.setEnabled(true); + personAlice.setProperties(Collections.singletonMap("cm:title", "Alice through the REST API")); people.create(personAlice); publicApiClient.setRequestContext(new RequestContext(account4.getId(), account4Admin, "admin"));