Add delete map rest operation.

This commit is contained in:
Paulo Gustavo Veiga 2012-03-15 01:21:46 -03:00
parent b52da56739
commit 0e3b0754cd
11 changed files with 188 additions and 76 deletions

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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);

View File

@ -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());

View File

@ -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) {
}
}

View File

@ -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<RestMindmap> mindmaps;
private List<RestMindmapInfo> mindmapsInfo;
public RestMindmapList() {
this(Collections.<MindMap>emptyList());
}
public RestMindmapList(@NotNull List<MindMap> mindmaps) {
this.mindmaps = new ArrayList<RestMindmap>();
this.mindmapsInfo = new ArrayList<RestMindmapInfo>();
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<RestMindmap> getMindmaps() {
return mindmaps;
public List<RestMindmapInfo> getMindmapsInfo() {
return mindmapsInfo;
}
public void setMindmaps(List<RestMindmap> mindmaps) {
this.mindmaps = mindmaps;
public void setMindmapsInfo(List<RestMindmapInfo> mindmapsInfo) {
this.mindmapsInfo = mindmapsInfo;
}
}

View File

@ -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<MindMap> search(MindMapCriteria criteria);

View File

@ -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<MindmapUser> 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<MindmapUser> 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());

View File

@ -19,6 +19,7 @@
<property name="classesToBeBound">
<list>
<value>com.wisemapping.rest.model.RestMindmap</value>
<value>com.wisemapping.rest.model.RestMindmapInfo</value>
<value>com.wisemapping.rest.model.RestMindmapList</value>
<value>com.wisemapping.rest.model.RestUser</value>
</list>

View File

@ -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);
}
}

View File

@ -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<RestMindmap> mindmaps = body.getMindmaps();
final List<RestMindmapInfo> 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<RestMindmap> createUserEntity = new HttpEntity<RestMindmap>(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<RestMindmapInfo> createUserEntity = new HttpEntity<RestMindmapInfo>(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<RestMindmap> 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<RestMindmap> 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<RestMindmap> 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 ...