From 0e3b0754cdff1e4f2a87a7b3bbc29672ca54995f Mon Sep 17 00:00:00 2001 From: Paulo Gustavo Veiga Date: Thu, 15 Mar 2012 01:21:46 -0300 Subject: [PATCH] Add delete map rest operation. --- .../controller/MindmapController.java | 2 +- .../controller/MindmapSharingController.java | 2 +- .../com/wisemapping/rest/AdminController.java | 2 +- .../wisemapping/rest/MindmapController.java | 26 +++-- .../rest/model/RestMindmapInfo.java | 101 ++++++++++++++++++ .../rest/model/RestMindmapList.java | 18 ++-- .../wisemapping/service/MindmapService.java | 5 +- .../service/MindmapServiceImpl.java | 27 ++--- .../main/webapp/WEB-INF/wisemapping-rest.xml | 1 + .../com/wisemapping/test/model/JsonTest.java | 5 +- .../test/rest/RestMindmapTCase.java | 75 ++++++++----- 11 files changed, 188 insertions(+), 76 deletions(-) create mode 100644 wise-webapp/src/main/java/com/wisemapping/rest/model/RestMindmapInfo.java diff --git a/wise-webapp/src/main/java/com/wisemapping/controller/MindmapController.java b/wise-webapp/src/main/java/com/wisemapping/controller/MindmapController.java index b5a86519..2100726c 100644 --- a/wise-webapp/src/main/java/com/wisemapping/controller/MindmapController.java +++ b/wise-webapp/src/main/java/com/wisemapping/controller/MindmapController.java @@ -89,7 +89,7 @@ public class MindmapController extends BaseMultiActionController { final User user = Utils.getUser(request); final MindMap mindmap = getMindmapFromRequest(request); - getMindmapService().removeColaboratorFromMindmap(mindmap, user.getId()); + getMindmapService().removeCollaboratorFromMindmap(mindmap, user.getId()); return list(request, response); } diff --git a/wise-webapp/src/main/java/com/wisemapping/controller/MindmapSharingController.java b/wise-webapp/src/main/java/com/wisemapping/controller/MindmapSharingController.java index 85258eee..f5932537 100644 --- a/wise-webapp/src/main/java/com/wisemapping/controller/MindmapSharingController.java +++ b/wise-webapp/src/main/java/com/wisemapping/controller/MindmapSharingController.java @@ -57,7 +57,7 @@ public class MindmapSharingController extends BaseMultiActionController { final MindMap mindmap = getMindmapFromRequest(request); final String colaboratorId = request.getParameter(COLABORATOR_ID); long colaborator = Long.parseLong(colaboratorId); - getMindmapService().removeColaboratorFromMindmap(mindmap, colaborator); + getMindmapService().removeCollaboratorFromMindmap(mindmap, colaborator); return mindmap; } diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/AdminController.java b/wise-webapp/src/main/java/com/wisemapping/rest/AdminController.java index b00d277e..8b9e47b3 100644 --- a/wise-webapp/src/main/java/com/wisemapping/rest/AdminController.java +++ b/wise-webapp/src/main/java/com/wisemapping/rest/AdminController.java @@ -103,7 +103,7 @@ public class AdminController extends BaseController { userService.changePassword(user); } - @RequestMapping(method = RequestMethod.DELETE, value = "admin/users/{id}", produces = {"application/json", "text/html", "application/xml"}) + @RequestMapping(method = RequestMethod.DELETE) @ResponseStatus(value = HttpStatus.NO_CONTENT) public void getUserByEmail(@PathVariable long id) throws IOException, WiseMappingException { final User user = userService.getUserBy(id); diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/MindmapController.java b/wise-webapp/src/main/java/com/wisemapping/rest/MindmapController.java index b76876b1..c5e8d13e 100644 --- a/wise-webapp/src/main/java/com/wisemapping/rest/MindmapController.java +++ b/wise-webapp/src/main/java/com/wisemapping/rest/MindmapController.java @@ -25,14 +25,13 @@ import java.util.List; /** * Pendings: - * Change map title - * List with filter - * Clone - * Delete map - * Discard Changed - * Public ? - * Admin operations for get/update - * Check visibility + * Change map title + * List with filter + * Clone + * Discard Changed + * Public ? + * Admin operations for get/update + * Check visibility */ @Controller public class MindmapController extends BaseController { @@ -86,6 +85,15 @@ public class MindmapController extends BaseController { updateMindmap(minor, mindMap, user); } + + @RequestMapping(method = RequestMethod.DELETE, value = "/maps/{id}") + @ResponseStatus(value = HttpStatus.NO_CONTENT) + public void updateMap(@PathVariable int id) throws IOException, WiseMappingException { + final User user = Utils.getUser(); + final MindMap mindmap = mindmapService.getMindmapById(id); + mindmapService.removeMindmap(mindmap, user); + } + @RequestMapping(method = RequestMethod.PUT, value = "/maps/{id}/xml", consumes = {"application/xml"}, produces = {"application/json", "text/html", "application/xml"}) @ResponseStatus(value = HttpStatus.NO_CONTENT) public void updateMapXml(@RequestBody String xml, @PathVariable int id, @RequestParam(required = false) boolean minor) throws IOException, WiseMappingException { @@ -102,7 +110,7 @@ public class MindmapController extends BaseController { updateMindmap(minor, mindMap, user); } - private void updateMindmap(boolean minor, MindMap mindMap, User user) throws WiseMappingException { + private void updateMindmap(boolean minor, @NotNull final MindMap mindMap, @NotNull final User user) throws WiseMappingException { final Calendar now = Calendar.getInstance(); mindMap.setLastModificationTime(now); mindMap.setLastModifierUser(user.getUsername()); diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/model/RestMindmapInfo.java b/wise-webapp/src/main/java/com/wisemapping/rest/model/RestMindmapInfo.java new file mode 100644 index 00000000..72e60135 --- /dev/null +++ b/wise-webapp/src/main/java/com/wisemapping/rest/model/RestMindmapInfo.java @@ -0,0 +1,101 @@ +package com.wisemapping.rest.model; + + +import com.wisemapping.model.MindMap; +import com.wisemapping.model.User; +import org.codehaus.jackson.annotate.*; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import java.io.IOException; +import java.util.Calendar; +import java.util.Date; + +@XmlRootElement(name = "map") +@XmlAccessorType(XmlAccessType.PROPERTY) +@JsonAutoDetect( + fieldVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY, + isGetterVisibility = JsonAutoDetect.Visibility.NONE, + getterVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY +) +@JsonIgnoreProperties(ignoreUnknown = true) +public class RestMindmapInfo { + + @JsonIgnore + private MindMap mindmap; + + public RestMindmapInfo() { + this(new MindMap()); + + } + + public RestMindmapInfo(@NotNull MindMap mindmap) { + this.mindmap = mindmap; + } + + public Calendar getCreationTime() { + return mindmap.getCreationTime(); + } + + public String getDescription() { + return mindmap.getDescription(); + } + + public String getTags() { + return mindmap.getTags(); + } + + public String getTitle() { + return mindmap.getTitle(); + } + + public int getId() { + return mindmap.getId(); + } + + public String getCreator() { + return mindmap.getCreator(); + } + + public String getLastModifierUser() { + return mindmap.getLastModifierUser(); + } + + public Date getLastModificationDate() { + return mindmap.getLastModificationDate(); + } + + public boolean isPublic() { + return mindmap.isPublic(); + } + + public void setId(int id) { + mindmap.setId(id); + } + + public void setTitle(String title) { + mindmap.setTitle(title); + } + + public void setTags(String tags) { + mindmap.setTags(tags); + } + + public void setDescription(String description) { + mindmap.setDescription(description); + } + + public void setCreator(String creatorUser) { + + } + + public void setLastModificationTime(Calendar lastModificationTime) { + } + + public void setLastModifierUser(String lastModifierUser) { + } +} diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/model/RestMindmapList.java b/wise-webapp/src/main/java/com/wisemapping/rest/model/RestMindmapList.java index c110070b..6f3fc348 100644 --- a/wise-webapp/src/main/java/com/wisemapping/rest/model/RestMindmapList.java +++ b/wise-webapp/src/main/java/com/wisemapping/rest/model/RestMindmapList.java @@ -3,9 +3,7 @@ package com.wisemapping.rest.model; import com.wisemapping.model.MindMap; import org.codehaus.jackson.annotate.JsonAutoDetect; -import org.codehaus.jackson.annotate.JsonIgnore; import org.jetbrains.annotations.NotNull; -import org.springframework.util.CollectionUtils; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; @@ -24,21 +22,21 @@ import java.util.List; isGetterVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY) public class RestMindmapList { - private List mindmaps; + private List mindmapsInfo; public RestMindmapList() { this(Collections.emptyList()); } public RestMindmapList(@NotNull List mindmaps) { - this.mindmaps = new ArrayList(); + this.mindmapsInfo = new ArrayList(); for (MindMap mindMap : mindmaps) { - this.mindmaps.add(new RestMindmap(mindMap)); + this.mindmapsInfo.add(new RestMindmapInfo(mindMap)); } } public int getCount() { - return this.mindmaps.size(); + return this.mindmapsInfo.size(); } public void setCount(int count) { @@ -46,11 +44,11 @@ public class RestMindmapList { } @XmlElement(name = "map") - public List getMindmaps() { - return mindmaps; + public List getMindmapsInfo() { + return mindmapsInfo; } - public void setMindmaps(List mindmaps) { - this.mindmaps = mindmaps; + public void setMindmapsInfo(List mindmapsInfo) { + this.mindmapsInfo = mindmapsInfo; } } diff --git a/wise-webapp/src/main/java/com/wisemapping/service/MindmapService.java b/wise-webapp/src/main/java/com/wisemapping/service/MindmapService.java index a8c24e33..6209bcbf 100755 --- a/wise-webapp/src/main/java/com/wisemapping/service/MindmapService.java +++ b/wise-webapp/src/main/java/com/wisemapping/service/MindmapService.java @@ -20,6 +20,7 @@ package com.wisemapping.service; import com.wisemapping.model.*; import com.wisemapping.exceptions.WiseMappingException; +import org.jetbrains.annotations.NotNull; import java.util.List; import java.io.IOException; @@ -45,9 +46,9 @@ public interface MindmapService { public void addTags(MindMap mindmap, String tags); - public void removeColaboratorFromMindmap(MindMap mindmap, long colaboratorId); + public void removeCollaboratorFromMindmap(@NotNull final MindMap mindmap, long colaboratorId); - public void removeMindmap(MindMap mindmap, User user) throws WiseMappingException; + public void removeMindmap(@NotNull final MindMap mindmap, @NotNull final User user) throws WiseMappingException; public List search(MindMapCriteria criteria); diff --git a/wise-webapp/src/main/java/com/wisemapping/service/MindmapServiceImpl.java b/wise-webapp/src/main/java/com/wisemapping/service/MindmapServiceImpl.java index ee8841d3..d6e1a367 100755 --- a/wise-webapp/src/main/java/com/wisemapping/service/MindmapServiceImpl.java +++ b/wise-webapp/src/main/java/com/wisemapping/service/MindmapServiceImpl.java @@ -113,26 +113,13 @@ public class MindmapServiceImpl return mindmapManager.search(criteria); } - public void removeColaboratorFromMindmap(MindMap mindmap, long colaboratorId) { + public void removeCollaboratorFromMindmap(@NotNull MindMap mindmap, long userId) { // remove colaborator association Set mindmapusers = mindmap.getMindmapUsers(); MindmapUser mindmapuserToDelete = null; for (MindmapUser mindmapuser : mindmapusers) { - if (mindmapuser.getCollaborator().getId() == colaboratorId) { + if (mindmapuser.getCollaborator().getId() == userId) { mindmapuserToDelete = mindmapuser; - //@TODO evaluar si el colaborador no tiene mas asociaciones si hay que eliminarlo, por ahora NO -// final List otherAsociations = mindmapManager.getMindmapUserByCollaborator(colaboratorId); -// if (otherAsociations != null) -// { -// -// final User user = userService.getUserBy(colaboratorId); -// // Is not a User -// if (user == null) -// { -// final Collaborator col = mindmapManager.getCollaboratorBy(colaboratorId); -// mindmapManager.removeCollaborator(col); -// } -// } break; } } @@ -143,12 +130,11 @@ public class MindmapServiceImpl } } - public void removeMindmap(MindMap mindmap, User user) throws WiseMappingException { + public void removeMindmap(@NotNull MindMap mindmap, @NotNull User user) throws WiseMappingException { if (mindmap.getOwner().equals(user)) { - mindmapManager.removeMindmap(mindmap); } else { - this.removeColaboratorFromMindmap(mindmap, user.getId()); + this.removeCollaboratorFromMindmap(mindmap, user.getId()); } } @@ -160,7 +146,7 @@ public class MindmapServiceImpl throw new IllegalArgumentException("The tile can not be empty"); } - if (user==null) { + if (user == null) { throw new IllegalArgumentException("User can not be null"); } @@ -227,8 +213,7 @@ public class MindmapServiceImpl final MindMap savedWelcome = getMindmapById(Constants.WELCOME_MAP_ID); // Is there a welcomed map configured ? - if(savedWelcome!=null) - { + if (savedWelcome != null) { final MindMap welcomeMap = new MindMap(); welcomeMap.setTitle(savedWelcome.getTitle() + " " + user.getFirstname()); welcomeMap.setDescription(savedWelcome.getDescription()); diff --git a/wise-webapp/src/main/webapp/WEB-INF/wisemapping-rest.xml b/wise-webapp/src/main/webapp/WEB-INF/wisemapping-rest.xml index 1980c44f..52e6ba3e 100644 --- a/wise-webapp/src/main/webapp/WEB-INF/wisemapping-rest.xml +++ b/wise-webapp/src/main/webapp/WEB-INF/wisemapping-rest.xml @@ -19,6 +19,7 @@ com.wisemapping.rest.model.RestMindmap + com.wisemapping.rest.model.RestMindmapInfo com.wisemapping.rest.model.RestMindmapList com.wisemapping.rest.model.RestUser diff --git a/wise-webapp/src/test/java/com/wisemapping/test/model/JsonTest.java b/wise-webapp/src/test/java/com/wisemapping/test/model/JsonTest.java index a70755f5..e19df354 100644 --- a/wise-webapp/src/test/java/com/wisemapping/test/model/JsonTest.java +++ b/wise-webapp/src/test/java/com/wisemapping/test/model/JsonTest.java @@ -2,8 +2,8 @@ package com.wisemapping.test.model; import com.wisemapping.rest.model.RestMindmap; +import com.wisemapping.rest.model.RestMindmapInfo; import com.wisemapping.rest.model.RestUser; -import org.codehaus.jackson.map.DeserializationConfig; import org.codehaus.jackson.map.ObjectMapper; import org.testng.annotations.Test; @@ -20,8 +20,5 @@ public class JsonTest { String userJson = "{\"username\":\"admin\",\"email\":\"admin@wisemapping.org\",\"tags\":[],\"creationDate\":1329706800000,\"firstname\":\"Wise\",\"lastname\":\"test\",\"password\":\"test\"}"; final RestUser restUser = mapper.readValue(userJson, RestUser.class); - } - - } diff --git a/wise-webapp/src/test/java/com/wisemapping/test/rest/RestMindmapTCase.java b/wise-webapp/src/test/java/com/wisemapping/test/rest/RestMindmapTCase.java index 4ebe61f9..b7084b13 100644 --- a/wise-webapp/src/test/java/com/wisemapping/test/rest/RestMindmapTCase.java +++ b/wise-webapp/src/test/java/com/wisemapping/test/rest/RestMindmapTCase.java @@ -1,17 +1,16 @@ package com.wisemapping.test.rest; +import com.wisemapping.rest.model.RestMindmapInfo; import com.wisemapping.rest.model.RestMindmap; import com.wisemapping.rest.model.RestMindmapList; import com.wisemapping.rest.model.RestUser; -import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.springframework.http.*; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.security.crypto.codec.Base64; import org.springframework.web.client.RestTemplate; import org.testng.annotations.BeforeClass; -import org.testng.annotations.BeforeSuite; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; @@ -25,12 +24,11 @@ import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; - @Test public class RestMindmapTCase { private String userEmail = "admin@wisemapping.com"; - private static final String HOST_PORT = "http://127.0.0.1:8080"; + private static final String HOST_PORT = "http://localhost:8080"; private static final String BASE_REST_URL = HOST_PORT + "/service"; @BeforeClass @@ -58,11 +56,11 @@ public class RestMindmapTCase { // Validate that the two maps are there ... final RestMindmapList body = response.getBody(); - final List mindmaps = body.getMindmaps(); + final List mindmaps = body.getMindmapsInfo(); boolean found1 = false; boolean found2 = false; - for (RestMindmap mindmap : mindmaps) { + for (RestMindmapInfo mindmap : mindmaps) { if (mindmap.getTitle().equals(title1)) { found1 = true; } @@ -74,31 +72,50 @@ public class RestMindmapTCase { } - private URI addNewMap(HttpHeaders requestHeaders, RestTemplate templateRest, String title) { - final RestMindmap restMindmap = new RestMindmap(); - restMindmap.setTitle(title); - restMindmap.setDescription("My Map Desc"); - // Create a new map ... - HttpEntity createUserEntity = new HttpEntity(restMindmap, requestHeaders); - return templateRest.postForLocation(BASE_REST_URL + "/maps", createUserEntity); - - - } - - @Test(dataProvider = "ContentType-Provider-Function") - public void createMap(final @NotNull MediaType mediaType) { // Configure media types ... + public void deleteMap(final @NotNull MediaType mediaType) { // Configure media types ... final HttpHeaders requestHeaders = createHeaders(mediaType); final RestTemplate templateRest = createTemplate(); // Create a sample map ... - final String title = "My Map " + mediaType.toString(); + final String title1 = "Map to delete - " + mediaType.toString(); + final URI resourceLocation = addNewMap(requestHeaders, templateRest, title1); + + // Now remove it ... + templateRest.delete(HOST_PORT + resourceLocation.toString()); + + // Check that has been removed ... + try { + findMap(requestHeaders, templateRest, resourceLocation); + fail("Map could not be removed:" + resourceLocation); + } catch (Exception e) { + } + } + + private URI addNewMap(HttpHeaders requestHeaders, RestTemplate templateRest, String title) { + final RestMindmapInfo restMindmap = new RestMindmapInfo(); + restMindmap.setTitle(title); + restMindmap.setDescription("My Map Desc"); + + // Create a new map ... + HttpEntity createUserEntity = new HttpEntity(restMindmap, requestHeaders); + return templateRest.postForLocation(BASE_REST_URL + "/maps", createUserEntity); + } + + @Test(dataProvider = "ContentType-Provider-Function") + public void discardChange(final @NotNull MediaType mediaType) { // Configure media types ... + final HttpHeaders requestHeaders = createHeaders(mediaType); + final RestTemplate templateRest = createTemplate(); + + // Create a sample map ... + final String title = "Add map to discard " + mediaType.toString(); final URI resourceLocation = addNewMap(requestHeaders, templateRest, title); - // Check that the map has been created ... - final HttpEntity findMapEntity = new HttpEntity(requestHeaders); - final ResponseEntity response = templateRest.exchange(HOST_PORT + resourceLocation.toString(), HttpMethod.GET, findMapEntity, RestMindmap.class); - assertEquals(response.getBody().getTitle(), title); + // Update with "minor" flag ... + + // Revert the change ... + + // Check that the map is the } @Test(dataProvider = "ContentType-Provider-Function") @@ -118,11 +135,15 @@ public class RestMindmapTCase { templateRest.put(resourceUrl + "/xml", updateEntity); // Check that the map has been updated ... - final HttpEntity findMapEntity = new HttpEntity(requestHeaders); - final ResponseEntity response = templateRest.exchange(HOST_PORT + resourceLocation.toString(), HttpMethod.GET, findMapEntity, RestMindmap.class); - assertEquals(response.getBody().getXml(), newXmlContent); + final RestMindmap response = findMap(requestHeaders, templateRest, resourceLocation); + assertEquals(response.getXml(), newXmlContent); } + private RestMindmap findMap(HttpHeaders requestHeaders, RestTemplate templateRest, URI resourceLocation) { + final HttpEntity findMapEntity = new HttpEntity(requestHeaders); + final ResponseEntity response = templateRest.exchange(HOST_PORT + resourceLocation.toString(), HttpMethod.GET, findMapEntity, RestMindmap.class); + return response.getBody(); + } @Test(dataProvider = "ContentType-Provider-Function") public void updateMap(final @NotNull MediaType mediaType) throws IOException { // Configure media types ...