Get Collaboration list completed.

This commit is contained in:
Paulo Gustavo Veiga
2012-06-09 22:49:54 -03:00
parent 6c8664ada4
commit aeb0ef0668
26 changed files with 268 additions and 555 deletions

View File

@@ -24,17 +24,15 @@ import com.wisemapping.importer.ImportFormat;
import com.wisemapping.importer.Importer;
import com.wisemapping.importer.ImporterException;
import com.wisemapping.importer.ImporterFactory;
import com.wisemapping.model.Collaboration;
import com.wisemapping.model.MindMap;
import com.wisemapping.model.User;
import com.wisemapping.rest.model.RestMindmap;
import com.wisemapping.rest.model.RestMindmapInfo;
import com.wisemapping.rest.model.RestMindmapList;
import com.wisemapping.model.*;
import com.wisemapping.rest.model.*;
import com.wisemapping.security.Utils;
import com.wisemapping.service.InvalidCollaborationException;
import com.wisemapping.service.MindmapService;
import com.wisemapping.validator.MapInfoValidator;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BeanPropertyBindingResult;
@@ -50,14 +48,14 @@ import java.util.*;
@Controller
public class MindmapController extends BaseController {
@Qualifier("mindmapService")
@Autowired
private MindmapService mindmapService;
@RequestMapping(method = RequestMethod.GET, value = "/maps/{id}", produces = {"application/json", "application/xml", "text/html"})
@ResponseBody
public ModelAndView retrieve(@PathVariable int id) throws IOException {
final User user = com.wisemapping.security.Utils.getUser();
final User user = Utils.getUser();
final MindMap mindMap = mindmapService.getMindmapById(id);
final RestMindmap map = new RestMindmap(mindMap, user);
@@ -70,7 +68,7 @@ public class MindmapController extends BaseController {
final MindMap mindMap = mindmapService.getMindmapById(id);
final Map<String, Object> values = new HashMap<String, Object>();
final User user = com.wisemapping.security.Utils.getUser();
final User user = Utils.getUser();
values.put("mindmap", new RestMindmap(mindMap, user));
values.put("filename", mindMap.getTitle());
return new ModelAndView("transformViewWise", values);
@@ -88,13 +86,13 @@ public class MindmapController extends BaseController {
@RequestMapping(method = RequestMethod.GET, value = "/maps/", produces = {"application/json", "text/html", "application/xml"})
public ModelAndView retrieveList(@RequestParam(required = false) String q) throws IOException {
final User user = com.wisemapping.security.Utils.getUser();
final User user = Utils.getUser();
final MindmapFilter filter = MindmapFilter.parse(q);
final List<Collaboration> collaborations = mindmapService.getCollaborationsBy(user);
final List<Collaboration> mapsByUser = mindmapService.getMindmapUserByUser(user);
final List<MindMap> mindmaps = new ArrayList<MindMap>();
for (Collaboration collaboration : mapsByUser) {
for (Collaboration collaboration : collaborations) {
final MindMap mindmap = collaboration.getMindMap();
if (filter.accept(mindmap, user)) {
mindmaps.add(mindmap);
@@ -107,9 +105,13 @@ public class MindmapController extends BaseController {
@RequestMapping(method = RequestMethod.GET, value = "/maps/{id}/history", produces = {"application/json", "text/html", "application/xml"})
public ModelAndView retrieveHistory(@PathVariable int id) throws IOException {
final User user = com.wisemapping.security.Utils.getUser();
return null;
final MindMap mindMap = mindmapService.getMindmapById(id);
final Set<Collaboration> collaborations = mindMap.getCollaborations();
final RestCollaborationList result = new RestCollaborationList();
for (Collaboration collaboration : collaborations) {
result.addCollaboration(new RestCollaboration(collaboration));
}
return new ModelAndView("collabView", "list", result);
}
@RequestMapping(method = RequestMethod.PUT, value = "/maps/{id}/document", consumes = {"application/xml", "application/json"}, produces = {"application/json", "text/html", "application/xml"})
@@ -203,20 +205,56 @@ public class MindmapController extends BaseController {
@RequestMapping(method = RequestMethod.PUT, value = "/maps/{id}/collabs", consumes = {"application/json", "application/xml"}, produces = {"application/json", "text/html", "application/xml"})
@ResponseStatus(value = HttpStatus.NO_CONTENT)
public void updateCollabs(@PathVariable int id) throws WiseMappingException {
public void updateCollabs(@PathVariable int id, @NotNull @RequestBody RestCollaborationList restCollabs) throws InvalidCollaborationException {
final MindMap mindMap = mindmapService.getMindmapById(id);
final User user = Utils.getUser();
if (!mindMap.getOwner().equals(user)) {
throw new IllegalArgumentException("No enough permissions");
}
// Compare one by one if some of the elements has been changed ....
final Set<Collaboration> collabsToRemove = new HashSet<Collaboration>(mindMap.getCollaborations());
for (RestCollaboration restCollab : restCollabs.getCollaborations()) {
final Collaboration collaboration = mindMap.findCollaborationByEmail(restCollab.getEmail());
if (CollaborationRole.valueOf(restCollab.getRole()) != CollaborationRole.OWNER) {
// Validate role ...
String roleStr = restCollab.getRole();
if (roleStr == null) {
throw new IllegalArgumentException(roleStr + " is not a valid role");
}
final CollaborationRole role = CollaborationRole.valueOf(roleStr.toUpperCase());
mindmapService.addCollaboration(mindMap, restCollab.getEmail(), role);
}
if (collaboration != null) {
collabsToRemove.remove(collaboration);
}
}
// Remove all collaborations that no applies anymore ..
for (final Collaboration collaboration : collabsToRemove) {
mindmapService.removeCollaboration(collaboration);
}
}
@RequestMapping(method = RequestMethod.GET, value = "/maps/{id}/collabs", produces = {"application/json", "text/html", "application/xml"})
public ModelAndView retrieveList(@PathVariable int id) throws IOException {
public ModelAndView retrieveList(@PathVariable int id) {
final MindMap mindMap = mindmapService.getMindmapById(id);
final User user = Utils.getUser();
final Set<Collaboration> collaborations = mindMap.getCollaborations();
final List<RestCollaboration> collabs = new ArrayList<RestCollaboration>();
for (Collaboration collaboration : collaborations) {
collabs.add(new RestCollaboration(collaboration));
}
return new ModelAndView("mapsView", "list", collaborations);
final RestCollaborationList restCollaborationList = new RestCollaborationList();
restCollaborationList.setCollaborations(collabs);
return new ModelAndView("collabsView", "list", restCollaborationList);
}

View File

@@ -1,6 +1,7 @@
package com.wisemapping.rest.model;
import com.wisemapping.model.Collaboration;
import com.wisemapping.model.CollaborationRole;
import org.codehaus.jackson.annotate.JsonAutoDetect;
import org.codehaus.jackson.annotate.JsonIgnore;
@@ -10,7 +11,7 @@ import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "collaborators")
@XmlRootElement(name = "collaboration")
@XmlAccessorType(XmlAccessType.PROPERTY)
@JsonAutoDetect(
fieldVisibility = JsonAutoDetect.Visibility.NONE,
@@ -18,11 +19,13 @@ import javax.xml.bind.annotation.XmlRootElement;
isGetterVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY)
public class RestCollaboration {
@JsonIgnore
private String email;
private String role;
@JsonIgnore
private CollaborationRole role;
public RestCollaboration(@NotNull Collaboration collaboration) {
this.email = collaboration.getCollaborator().getEmail();
this.role = collaboration.getRole().name();
}
public RestCollaboration() {
@@ -32,19 +35,21 @@ public class RestCollaboration {
if (value == null) {
throw new IllegalStateException("role can not be null");
}
// Only check ...
CollaborationRole.valueOf(value.toUpperCase());
role = value;
role = CollaborationRole.valueOf(value.toUpperCase());
}
public String getRole() {
return role.toString().toLowerCase();
return role;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
public void setEmail(@NotNull String email) {
this.email = email;
}
}

View File

@@ -10,9 +10,7 @@ import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.*;
@XmlRootElement(name = "collaboration")
@XmlAccessorType(XmlAccessType.PROPERTY)
@@ -25,7 +23,7 @@ public class RestCollaborationList {
private List<RestCollaboration> collaborations;
public RestCollaborationList() {
collaborations = new ArrayList<RestCollaboration>();
}
public int getCount() {
@@ -36,11 +34,15 @@ public class RestCollaborationList {
}
@XmlElement(name = "collaborate")
@XmlElement(name = "collaborations")
public List<RestCollaboration> getCollaborations() {
return collaborations;
}
public void addCollaboration(@NotNull RestCollaboration collaboration) {
collaborations.add(collaboration);
}
public void setCollaborations(@NotNull List<RestCollaboration> collaborations) {
this.collaborations = collaborations;
}

View File

@@ -39,11 +39,11 @@ public class RestMindmap {
}
public RestMindmap() {
this(new MindMap(), Utils.getUser());
this(new MindMap(), null);
}
public RestMindmap(@NotNull MindMap mindmap, @NotNull Collaborator collaborator) {
public RestMindmap(@NotNull MindMap mindmap, @Nullable Collaborator collaborator) {
this.mindmap = mindmap;
this.collaborator = collaborator;
}
@@ -131,7 +131,8 @@ public class RestMindmap {
}
public String getOwner() {
return mindmap.getOwner().getEmail();
final User owner = mindmap.getOwner();
return owner != null ? owner.getEmail() : null;
}
public void setCreator(String creatorUser) {