From ee8cc000232a470400e849a35e920769d7995f1b Mon Sep 17 00:00:00 2001 From: Glen Johnson Date: Tue, 15 Jul 2008 20:30:07 +0000 Subject: [PATCH] Person Service REST API call PUT /people/{userName} to update a person's details, including supporting fix for POST /people/ (create person Web Script) using "jobTitle" property on person ScriptNode instead of all lower case "jobtitle" git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@9886 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repository/person/people.post.desc.xml | 2 +- .../alfresco/repository/person/people.post.js | 2 +- .../alfresco/repository/person/person.lib.ftl | 4 +- .../repository/person/person.put.desc.xml | 8 +++ .../alfresco/repository/person/person.put.js | 34 ++++++++++++ .../repository/person/person.put.json.ftl | 2 + .../web/scripts/person/PersonServiceTest.java | 55 ++++++++++++++++++- 7 files changed, 100 insertions(+), 7 deletions(-) create mode 100644 config/alfresco/templates/webscripts/org/alfresco/repository/person/person.put.desc.xml create mode 100644 config/alfresco/templates/webscripts/org/alfresco/repository/person/person.put.js create mode 100644 config/alfresco/templates/webscripts/org/alfresco/repository/person/person.put.json.ftl diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/person/people.post.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/person/people.post.desc.xml index 7c9dd8906b..d9f7f15fd6 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/person/people.post.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/person/people.post.desc.xml @@ -3,6 +3,6 @@ Adds a new person based on the details provided. /api/people - user + admin required \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/person/people.post.js b/config/alfresco/templates/webscripts/org/alfresco/repository/person/people.post.js index 0a30506090..fd84ece1fe 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/person/people.post.js +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/person/people.post.js @@ -23,7 +23,7 @@ function main() person.properties["firstName"] = json.get("firstName"); person.properties["lastName"] = json.get("lastName"); person.properties["organization"] = json.get("organisation"); - person.properties["jobTitle"] = json.get("jobTitle"); + person.properties["jobtitle"] = json.get("jobtitle"); person.properties["email"] = json.get("email"); person.save(); diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.lib.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.lib.ftl index 7041ee0598..57b21ce94a 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.lib.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.lib.ftl @@ -23,9 +23,9 @@ "organisation" : undefined, <#if person.properties.jobtitle??> - "jobTitle" : "${person.properties.jobtitle}", + "jobtitle" : "${person.properties.jobtitle}", <#else> - "jobTitle" : undefined, + "jobtitle" : undefined, <#if person.properties.email??> "email" : "${person.properties.email}" diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.put.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.put.desc.xml new file mode 100644 index 0000000000..a8c274c243 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.put.desc.xml @@ -0,0 +1,8 @@ + + Update Person + Update the details of a person. + /api/people/{userName} + + user + required + \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.put.js b/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.put.js new file mode 100644 index 0000000000..435b34b052 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.put.js @@ -0,0 +1,34 @@ +function main() +{ + // Extract the person's user name from the URL + var userName = url.extension; + var person = people.getPerson(userName); + + // if person is found matching the given user name + // then update that person's details with the details + // provided within the JSON object passed in + if (person != null) + { + // Update the person's details + person.properties["title"] = json.get("title"); + person.properties["firstName"] = json.get("firstName"); + person.properties["lastName"] = json.get("lastName"); + person.properties["organization"] = json.get("organisation"); + person.properties["jobtitle"] = json.get("jobtitle"); + person.properties["email"] = json.get("email"); + person.save(); + + // Put the updated person on the model to pass to the template + model.person = person; + } + // else if no person was found matching the given user name, + // then return HTTP error status "not found" + else + { + status.setCode(status.STATUS_NOT_FOUND, "Person " + userName + + " does not exist"); + return; + } +} + +main(); \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.put.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.put.json.ftl new file mode 100644 index 0000000000..f717672ded --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.put.json.ftl @@ -0,0 +1,2 @@ +<#import "person.lib.ftl" as personLib/> +<@personLib.personJSON person=person/> \ No newline at end of file diff --git a/source/java/org/alfresco/repo/web/scripts/person/PersonServiceTest.java b/source/java/org/alfresco/repo/web/scripts/person/PersonServiceTest.java index 07d0d0326e..ccd9601059 100644 --- a/source/java/org/alfresco/repo/web/scripts/person/PersonServiceTest.java +++ b/source/java/org/alfresco/repo/web/scripts/person/PersonServiceTest.java @@ -33,6 +33,7 @@ import org.alfresco.repo.web.scripts.BaseWebScriptTest; import org.alfresco.service.cmr.security.AuthenticationService; import org.alfresco.service.cmr.security.PersonService; import org.alfresco.util.PropertyMap; +import org.alfresco.web.scripts.Status; import org.apache.commons.lang.RandomStringUtils; import org.json.JSONObject; import org.springframework.mock.web.MockHttpServletResponse; @@ -122,6 +123,27 @@ public class PersonServiceTest extends BaseWebScriptTest this.createdPeople.clear(); } + public void testUpdatePerson() throws Exception + { + // Create a new person + String userName = RandomStringUtils.randomNumeric(6); + createPerson(userName, "myTitle", "myFirstName", "myLastName", "myOrganisation", + "myJobTitle", "firstName.lastName@email.com", "myBio", "images/avatar.jpg", 200); + + // Update the person's details + JSONObject result = updatePerson(userName, "updatedTitle", "updatedFirstName", "updatedLastName", + "updatedOrganisation", "updatedJobTitle", "updatedFN.updatedLN@email.com", "updatedBio", + "images/updatedAvatar.jpg", 200); + + assertEquals(userName, result.get("userName")); + assertEquals("updatedTitle", result.get("title")); + assertEquals("updatedFirstName", result.get("firstName")); + assertEquals("updatedLastName", result.get("lastName")); + assertEquals("updatedOrganisation", result.get("organisation")); + assertEquals("updatedJobTitle", result.get("jobtitle")); + assertEquals("updatedFN.updatedLN@email.com", result.get("email")); + } + public void testCreatePerson() throws Exception { String userName = RandomStringUtils.randomNumeric(6); @@ -134,7 +156,7 @@ public class PersonServiceTest extends BaseWebScriptTest assertEquals("myFirstName", result.get("firstName")); assertEquals("myLastName", result.get("lastName")); assertEquals("myOrganisation", result.get("organisation")); - assertEquals("myJobTitle", result.get("jobTitle")); + assertEquals("myJobTitle", result.get("jobtitle")); assertEquals("firstName.lastName@email.com", result.get("email")); // Check for duplicate names @@ -142,6 +164,33 @@ public class PersonServiceTest extends BaseWebScriptTest "myJobTitle", "myEmail", "myBio", "images/avatar.jpg", 500); } + private JSONObject updatePerson(String userName, String title, String firstName, String lastName, + String organisation, String jobTitle, String email, String bio, String avatarUrl, int expectedStatus) + throws Exception + { + // switch to admin user to create a person + String currentUser = this.authenticationComponent.getCurrentUserName(); + String adminUser = this.authenticationComponent.getSystemUserName(); + this.authenticationComponent.setCurrentUser(adminUser); + + JSONObject person = new JSONObject(); + person.put("userName", userName); + person.put("title", title); + person.put("firstName", firstName); + person.put("lastName", lastName); + person.put("organisation", organisation); + person.put("jobtitle", jobTitle); + person.put("email", email); + + MockHttpServletResponse response = putRequest( + URL_PEOPLE + "/" + userName, expectedStatus, person.toString(), "application/json"); + + // switch back to non-admin user + this.authenticationComponent.setCurrentUser(currentUser); + + return new JSONObject(response.getContentAsString()); + } + private JSONObject createPerson(String userName, String title, String firstName, String lastName, String organisation, String jobTitle, String email, String bio, String avatarUrl, int expectedStatus) throws Exception @@ -157,7 +206,7 @@ public class PersonServiceTest extends BaseWebScriptTest person.put("firstName", firstName); person.put("lastName", lastName); person.put("organisation", organisation); - person.put("jobTitle", jobTitle); + person.put("jobtitle", jobTitle); person.put("email", email); MockHttpServletResponse response = postRequest(URL_PEOPLE, expectedStatus, person.toString(), "application/json"); @@ -187,7 +236,7 @@ public class PersonServiceTest extends BaseWebScriptTest String userName = RandomStringUtils.randomNumeric(6); JSONObject result = createPerson(userName, "myTitle", "myFirstName", "myLastName", "myOrganisation", "myJobTitle", "myEmailAddress", "myBio", "images/avatar.jpg", 200); - response = getRequest(URL_PEOPLE + "/" + userName, 200); + response = getRequest(URL_PEOPLE + "/" + userName, Status.STATUS_OK); } }