Get Collaboration list completed.
This commit is contained in:
@@ -1,92 +0,0 @@
|
||||
/*
|
||||
* Copyright [2011] [wisemapping]
|
||||
*
|
||||
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
|
||||
* It is basically the Apache License, Version 2.0 (the "License") plus the
|
||||
* "powered by wisemapping" text requirement on every single page;
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the license at
|
||||
*
|
||||
* http://www.wisemapping.org/license
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.wisemapping.controller;
|
||||
|
||||
import com.wisemapping.model.ColaborationEmail;
|
||||
import com.wisemapping.model.CollaborationRole;
|
||||
import com.wisemapping.model.MindMap;
|
||||
import com.wisemapping.model.User;
|
||||
import com.wisemapping.security.Utils;
|
||||
import com.wisemapping.service.InvalidColaboratorException;
|
||||
import com.wisemapping.view.MindMapBean;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
public class MindmapSharingController extends BaseMultiActionController {
|
||||
private static final String COLABORATOR_ID = "colaboratorId";
|
||||
|
||||
public ModelAndView addCollaborator(HttpServletRequest request, HttpServletResponse response)
|
||||
throws InvalidColaboratorException {
|
||||
logger.info("Sharing Controller: add collaborators action");
|
||||
addColaborator(request, CollaborationRole.EDITOR);
|
||||
return new ModelAndView("closeDialog");
|
||||
}
|
||||
|
||||
public ModelAndView addViewer(HttpServletRequest request, HttpServletResponse response)
|
||||
throws InvalidColaboratorException {
|
||||
logger.info("Sharing Controller: add viewer action");
|
||||
addColaborator(request, CollaborationRole.VIEWER);
|
||||
return new ModelAndView("closeDialog");
|
||||
}
|
||||
|
||||
public ModelAndView removeCollaborator(HttpServletRequest request, HttpServletResponse response) {
|
||||
logger.info("Sharing Controller: remove collaborator action");
|
||||
final MindMap mindmap = removeColaborator(request);
|
||||
return new ModelAndView("mindmapCollaborator", "mindmap", new MindMapBean(mindmap));
|
||||
}
|
||||
|
||||
private MindMap removeColaborator(HttpServletRequest request) {
|
||||
final MindMap mindmap = getMindmapFromRequest(request);
|
||||
final String colaboratorId = request.getParameter(COLABORATOR_ID);
|
||||
long colaborator = Long.parseLong(colaboratorId);
|
||||
getMindmapService().removeCollaboratorFromMindmap(mindmap, colaborator);
|
||||
return mindmap;
|
||||
}
|
||||
|
||||
private String[] getEmailsToAdd(final HttpServletRequest request) {
|
||||
final String[] result;
|
||||
String collaboratorEmails = request.getParameter(MINDMAP_EMAILS_PARAMNAME);
|
||||
if (collaboratorEmails != null && collaboratorEmails.trim().length() > 0) {
|
||||
result = collaboratorEmails.split("\\s*[,|\\;|\\s]\\s*");
|
||||
} else {
|
||||
result = null;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private MindMapBean addColaborator(HttpServletRequest request, CollaborationRole role) throws InvalidColaboratorException {
|
||||
final MindMap mindMap = getMindmapFromRequest(request);
|
||||
User user = Utils.getUser();
|
||||
if (!mindMap.getOwner().equals(user)) {
|
||||
throw new IllegalStateException("No enought right to execute this operation");
|
||||
}
|
||||
|
||||
|
||||
final String[] emails = getEmailsToAdd(request);
|
||||
|
||||
final ColaborationEmail email = new ColaborationEmail();
|
||||
email.setSubject(request.getParameter("subject"));
|
||||
email.setMessage(request.getParameter("message"));
|
||||
getMindmapService().addCollaborators(mindMap, emails, role, email);
|
||||
|
||||
return new MindMapBean(mindMap);
|
||||
}
|
||||
}
|
@@ -19,12 +19,13 @@
|
||||
package com.wisemapping.dao;
|
||||
|
||||
import com.wisemapping.model.*;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface MindmapManager {
|
||||
|
||||
Collaborator getCollaboratorBy(String email);
|
||||
Collaborator getCollaboratorBy(@NotNull String email);
|
||||
|
||||
Collaborator getCollaboratorBy(long id);
|
||||
|
||||
@@ -48,11 +49,11 @@ public interface MindmapManager {
|
||||
|
||||
void updateMindmap(MindMap mindMap, boolean saveHistory);
|
||||
|
||||
void removeCollaborator(Collaborator collaborator);
|
||||
void removeCollaborator(@NotNull Collaborator collaborator);
|
||||
|
||||
void removeMindmap(MindMap mindap);
|
||||
|
||||
void removeMindmapUser(Collaboration collaboration);
|
||||
void removeCollaboration(Collaboration collaboration);
|
||||
|
||||
public List<MindMap> search(MindMapCriteria criteria);
|
||||
|
||||
|
@@ -122,6 +122,7 @@ public class MindmapManagerImpl
|
||||
public List<Collaboration> getMindmapUserByRole(final CollaborationRole collaborationRole) {
|
||||
return getHibernateTemplate().find("from com.wisemapping.model.Collaboration mindmapUser where roleId=?", collaborationRole.ordinal());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collaboration getMindmapUserBy(final int mindmapId, final User user) {
|
||||
final Collaboration result;
|
||||
@@ -138,17 +139,17 @@ public class MindmapManagerImpl
|
||||
|
||||
@Override
|
||||
public void addCollaborator(Collaborator collaborator) {
|
||||
assert collaborator != null : "ADD MINDMAP COLABORATOR: Collaborator is required!";
|
||||
assert collaborator != null : "ADD MINDMAP COLLABORATOR: Collaborator is required!";
|
||||
getHibernateTemplate().save(collaborator);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeMindmapUser(Collaboration collaboration) {
|
||||
public void removeCollaboration(Collaboration collaboration) {
|
||||
getHibernateTemplate().delete(collaboration);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeCollaborator(Collaborator collaborator) {
|
||||
public void removeCollaborator(@NotNull Collaborator collaborator) {
|
||||
getHibernateTemplate().delete(collaborator);
|
||||
}
|
||||
|
||||
|
@@ -36,7 +36,7 @@ public class Collaboration {
|
||||
this.collaborator = collaborator;
|
||||
|
||||
// Guarantee referential integrity
|
||||
mindmap.addMindmapUser(this);
|
||||
mindmap.addCollaboration(this);
|
||||
collaborator.addMindmapUser(this);
|
||||
}
|
||||
|
||||
@@ -60,6 +60,10 @@ public class Collaboration {
|
||||
return role;
|
||||
}
|
||||
|
||||
public void setRole(@NotNull CollaborationRole role) {
|
||||
this.role = role;
|
||||
}
|
||||
|
||||
public boolean isOwner() {
|
||||
return getRole() == CollaborationRole.OWNER;
|
||||
}
|
||||
|
@@ -18,12 +18,12 @@
|
||||
|
||||
package com.wisemapping.model;
|
||||
|
||||
public class ColaborationEmail
|
||||
public class CollaborationEmail
|
||||
{
|
||||
private String subject;
|
||||
private String message;
|
||||
|
||||
public ColaborationEmail(){}
|
||||
public CollaborationEmail(){}
|
||||
|
||||
public String getSubject() {
|
||||
return subject;
|
@@ -20,19 +20,19 @@ package com.wisemapping.model;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class MindmapCollaborationProperties {
|
||||
public class CollaborationProperties {
|
||||
private long id;
|
||||
private boolean starred;
|
||||
private Collaborator collaborator;
|
||||
private MindMap mindmap;
|
||||
|
||||
|
||||
public MindmapCollaborationProperties(@NotNull Collaborator collaborator, @NotNull MindMap mindmap) {
|
||||
public CollaborationProperties(@NotNull Collaborator collaborator, @NotNull MindMap mindmap) {
|
||||
this.collaborator = collaborator;
|
||||
this.mindmap = mindmap;
|
||||
}
|
||||
|
||||
public MindmapCollaborationProperties(){
|
||||
public CollaborationProperties(){
|
||||
|
||||
}
|
||||
|
@@ -20,6 +20,7 @@ package com.wisemapping.model;
|
||||
|
||||
import com.wisemapping.util.ZipUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
@@ -42,7 +43,7 @@ public class MindMap {
|
||||
private String lastModifierUser;
|
||||
|
||||
private Set<Collaboration> collaborations = new HashSet<Collaboration>();
|
||||
private Set<MindmapCollaborationProperties> collaboratorProperties = new HashSet<MindmapCollaborationProperties>();
|
||||
private Set<CollaborationProperties> collaborationProperties = new HashSet<CollaborationProperties>();
|
||||
|
||||
private User owner;
|
||||
private String properties;
|
||||
@@ -55,10 +56,6 @@ public class MindMap {
|
||||
public MindMap() {
|
||||
}
|
||||
|
||||
public MindMap(Set<Collaboration> collaborations) {
|
||||
this.collaborations = collaborations;
|
||||
}
|
||||
|
||||
//~ Methods ..............................................................................................
|
||||
|
||||
public void setXml(byte[] xml) {
|
||||
@@ -119,10 +116,26 @@ public class MindMap {
|
||||
this.collaborations = collaborations;
|
||||
}
|
||||
|
||||
public void addMindmapUser(Collaboration collaboration) {
|
||||
public void addCollaboration(@NotNull Collaboration collaboration) {
|
||||
collaborations.add(collaboration);
|
||||
}
|
||||
|
||||
public void removedCollaboration(@NotNull Collaboration collaboration) {
|
||||
collaborations.add(collaboration);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Collaboration findCollaborationByEmail(@NotNull String email) {
|
||||
Collaboration result = null;
|
||||
for (Collaboration collaboration : collaborations) {
|
||||
if (collaboration.getCollaborator().getEmail().equals(email)) {
|
||||
result = collaboration;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public boolean isPublic() {
|
||||
return isPublic;
|
||||
}
|
||||
@@ -222,18 +235,18 @@ public class MindMap {
|
||||
return owner;
|
||||
}
|
||||
|
||||
public Set<MindmapCollaborationProperties> getCollaboratorProperties() {
|
||||
return collaboratorProperties;
|
||||
public Set<CollaborationProperties> getCollaborationProperties() {
|
||||
return collaborationProperties;
|
||||
}
|
||||
|
||||
public void setCollaboratorProperties(@NotNull Set<MindmapCollaborationProperties> collaboratorProperties) {
|
||||
this.collaboratorProperties = collaboratorProperties;
|
||||
public void setCollaborationProperties(@NotNull Set<CollaborationProperties> collaborationProperties) {
|
||||
this.collaborationProperties = collaborationProperties;
|
||||
}
|
||||
|
||||
private MindmapCollaborationProperties findUserProperty(@NotNull Collaborator collaborator) {
|
||||
final Set<MindmapCollaborationProperties> collaboratorProperties = this.getCollaboratorProperties();
|
||||
MindmapCollaborationProperties result = null;
|
||||
for (MindmapCollaborationProperties collaboratorProperty : collaboratorProperties) {
|
||||
private CollaborationProperties findUserProperty(@NotNull Collaborator collaborator) {
|
||||
final Set<CollaborationProperties> collaborationProp = this.getCollaborationProperties();
|
||||
CollaborationProperties result = null;
|
||||
for (CollaborationProperties collaboratorProperty : collaborationProp) {
|
||||
final Collaborator propCollab = collaboratorProperty.getCollaborator();
|
||||
if (propCollab != null && propCollab.getEmail().equals(collaborator.getEmail())) {
|
||||
result = collaboratorProperty;
|
||||
@@ -244,20 +257,20 @@ public class MindMap {
|
||||
}
|
||||
|
||||
public void setStarred(@NotNull Collaborator collaborator, boolean value) {
|
||||
if(collaborator==null){
|
||||
throw new IllegalStateException("Collaborator can not be null");
|
||||
if (collaborator == null) {
|
||||
throw new IllegalStateException("Collaborator can not be null");
|
||||
}
|
||||
|
||||
MindmapCollaborationProperties collaboratorProperties = this.findUserProperty(collaborator);
|
||||
CollaborationProperties collaboratorProperties = this.findUserProperty(collaborator);
|
||||
if (collaboratorProperties == null) {
|
||||
collaboratorProperties = new MindmapCollaborationProperties(collaborator, this);
|
||||
collaboratorProperties = new CollaborationProperties(collaborator, this);
|
||||
}
|
||||
collaboratorProperties.setStarred(value);
|
||||
this.getCollaboratorProperties().add(collaboratorProperties);
|
||||
this.getCollaborationProperties().add(collaboratorProperties);
|
||||
}
|
||||
|
||||
public boolean isStarred(@NotNull Collaborator collaborator) {
|
||||
final MindmapCollaborationProperties collaboratorProperty = this.findUserProperty(collaborator);
|
||||
final CollaborationProperties collaboratorProperty = this.findUserProperty(collaborator);
|
||||
return collaboratorProperty != null && collaboratorProperty.getStarred();
|
||||
}
|
||||
|
||||
|
@@ -11,6 +11,7 @@ import com.wisemapping.service.MindmapService;
|
||||
import com.wisemapping.view.MindMapBean;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
@@ -26,10 +27,7 @@ public class MindmapController {
|
||||
|
||||
private String baseUrl;
|
||||
|
||||
MindmapController() {
|
||||
|
||||
}
|
||||
|
||||
@Qualifier("mindmapService")
|
||||
@Autowired
|
||||
private MindmapService mindmapService;
|
||||
|
||||
@@ -186,7 +184,7 @@ public class MindmapController {
|
||||
}
|
||||
|
||||
private List<MindMapBean> findMindMapBeanList(@NotNull User user) {
|
||||
final List<Collaboration> userMindmaps = mindmapService.getMindmapUserByUser(user);
|
||||
final List<Collaboration> userMindmaps = mindmapService.getCollaborationsBy(user);
|
||||
|
||||
final List<MindMapBean> mindMapBeans = new ArrayList<MindMapBean>(userMindmaps.size());
|
||||
for (Collaboration mindmap : userMindmaps) {
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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) {
|
||||
|
@@ -18,10 +18,10 @@
|
||||
|
||||
package com.wisemapping.service;
|
||||
|
||||
public class InvalidColaboratorException
|
||||
public class InvalidCollaborationException
|
||||
extends Exception
|
||||
{
|
||||
public InvalidColaboratorException(String msg)
|
||||
public InvalidCollaborationException(String msg)
|
||||
{
|
||||
super(msg);
|
||||
}
|
@@ -35,25 +35,23 @@ public interface MindmapService {
|
||||
|
||||
public MindMap getMindmapByTitle(String title, User user);
|
||||
|
||||
public List<Collaboration> getMindmapUserByUser(User user);
|
||||
public List<Collaboration> getCollaborationsBy(@NotNull User user);
|
||||
|
||||
public void updateMindmap(MindMap mindMap, boolean saveHistory) throws WiseMappingException;
|
||||
|
||||
public void addMindmap(MindMap map, User user) throws WiseMappingException;
|
||||
|
||||
public void addCollaborators(MindMap mindmap, String[] collaboratorEmails, CollaborationRole role, ColaborationEmail email)
|
||||
throws InvalidColaboratorException;
|
||||
public void addCollaboration(@NotNull MindMap mindmap, @NotNull String email, @NotNull CollaborationRole role)
|
||||
throws InvalidCollaborationException;
|
||||
|
||||
public void removeCollaboration(@NotNull Collaboration collaboration);
|
||||
|
||||
public void addTags(MindMap mindmap, String tags);
|
||||
|
||||
public void removeCollaboratorFromMindmap(@NotNull final MindMap mindmap, long colaboratorId);
|
||||
|
||||
public void removeMindmap(@NotNull final MindMap mindmap, @NotNull final User user) throws WiseMappingException;
|
||||
|
||||
public List<MindMap> search(MindMapCriteria criteria);
|
||||
|
||||
public List<MindMap> getPublicMaps(int cant);
|
||||
|
||||
public List<MindMapHistory> getMindMapHistory(int mindmapId);
|
||||
|
||||
public boolean isAllowedToView(User user, MindMap map, CollaborationRole allowedRole);
|
||||
|
@@ -84,18 +84,22 @@ public class MindmapServiceImpl
|
||||
return mindmapManager.getMindmapUserBy(mindmapId, user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MindMap getMindmapByTitle(String title, User user) {
|
||||
return mindmapManager.getMindmapByTitle(title, user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MindMap getMindmapById(int mindmapId) {
|
||||
return mindmapManager.getMindmapById(mindmapId);
|
||||
}
|
||||
|
||||
public List<Collaboration> getMindmapUserByUser(@NotNull User user) {
|
||||
@Override
|
||||
public List<Collaboration> getCollaborationsBy(@NotNull User user) {
|
||||
return mindmapManager.getMindmapUserByCollaborator(user.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateMindmap(MindMap mindMap, boolean saveHistory) throws WiseMappingException {
|
||||
if (mindMap.getTitle() == null || mindMap.getTitle().length() == 0) {
|
||||
throw new WiseMappingException("The tile can not be empty");
|
||||
@@ -104,39 +108,35 @@ public class MindmapServiceImpl
|
||||
mindmapManager.updateMindmap(mindMap, saveHistory);
|
||||
}
|
||||
|
||||
public List<MindMap> getPublicMaps(int cant) {
|
||||
return mindmapManager.search(null, cant);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MindMap> search(MindMapCriteria criteria) {
|
||||
return mindmapManager.search(criteria);
|
||||
}
|
||||
|
||||
public void removeCollaboratorFromMindmap(@NotNull MindMap mindmap, long userId) {
|
||||
@Override
|
||||
public void removeCollaboration(@NotNull Collaboration collaboration) {
|
||||
// remove collaborator association
|
||||
Set<Collaboration> mindmapusers = mindmap.getCollaborations();
|
||||
Collaboration mindmapuserToDelete = null;
|
||||
for (Collaboration mindmapuser : mindmapusers) {
|
||||
if (mindmapuser.getCollaborator().getId() == userId) {
|
||||
mindmapuserToDelete = mindmapuser;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (mindmapuserToDelete != null) {
|
||||
// When you delete an object from hibernate you have to delete it from *all* collections it exists in...
|
||||
mindmapusers.remove(mindmapuserToDelete);
|
||||
mindmapManager.removeMindmapUser(mindmapuserToDelete);
|
||||
}
|
||||
final MindMap mindMap = collaboration.getMindMap();
|
||||
Set<Collaboration> collaborations = mindMap.getCollaborations();
|
||||
|
||||
// When you delete an object from hibernate you have to delete it from *all* collections it exists in...
|
||||
collaborations.remove(collaboration);
|
||||
mindmapManager.removeCollaboration(collaboration);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeMindmap(@NotNull MindMap mindmap, @NotNull User user) throws WiseMappingException {
|
||||
if (mindmap.getOwner().equals(user)) {
|
||||
mindmapManager.removeMindmap(mindmap);
|
||||
} else {
|
||||
this.removeCollaboratorFromMindmap(mindmap, user.getId());
|
||||
final Collaboration collaboration = mindmap.findCollaborationByEmail(user.getEmail());
|
||||
if (collaboration != null) {
|
||||
this.removeCollaboration(collaboration);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addMindmap(@NotNull MindMap map, @NotNull User user) throws WiseMappingException {
|
||||
|
||||
final String title = map.getTitle();
|
||||
@@ -165,29 +165,52 @@ public class MindmapServiceImpl
|
||||
mindmapManager.addMindmap(dbUser, map);
|
||||
}
|
||||
|
||||
public void addCollaborators(MindMap mindmap, String[] collaboratorEmails, CollaborationRole role, ColaborationEmail email)
|
||||
throws InvalidColaboratorException {
|
||||
if (collaboratorEmails != null && collaboratorEmails.length > 0) {
|
||||
final Collaborator owner = mindmap.getOwner();
|
||||
final Set<Collaboration> collaborations = mindmap.getCollaborations();
|
||||
@Override
|
||||
public void addCollaboration(@NotNull MindMap mindmap, @NotNull String email, @NotNull CollaborationRole role)
|
||||
throws InvalidCollaborationException {
|
||||
|
||||
for (String colaboratorEmail : collaboratorEmails) {
|
||||
if (owner.getEmail().equals(colaboratorEmail)) {
|
||||
throw new InvalidColaboratorException("The user " + owner.getEmail() + " is the owner");
|
||||
}
|
||||
Collaboration collaboration = getMindmapUserBy(colaboratorEmail, collaborations);
|
||||
if (collaboration == null) {
|
||||
addCollaborator(colaboratorEmail, role, mindmap, email);
|
||||
} else if (collaboration.getRole() != role) {
|
||||
// If the relationship already exists and the role changed then only update the role
|
||||
collaboration.setRoleId(role.ordinal());
|
||||
mindmapManager.updateMindmap(mindmap, false);
|
||||
}
|
||||
}
|
||||
// Validate
|
||||
final Collaborator owner = mindmap.getOwner();
|
||||
final Set<Collaboration> collaborations = mindmap.getCollaborations();
|
||||
if (owner.getEmail().equals(email)) {
|
||||
throw new InvalidCollaborationException("The user " + owner.getEmail() + " is the owner");
|
||||
}
|
||||
|
||||
Collaboration collaboration = getCollaborationBy(email, collaborations);
|
||||
if (collaboration == null) {
|
||||
final Collaborator collaborator = addCollaborator(email);
|
||||
collaboration = new Collaboration(role, collaborator, mindmap);
|
||||
mindmap.getCollaborations().add(collaboration);
|
||||
mindmapManager.saveMindmap(mindmap);
|
||||
|
||||
// Sent collaboration email ...
|
||||
final Map<String, Object> model = new HashMap<String, Object>();
|
||||
model.put("role", role);
|
||||
model.put("map", mindmap);
|
||||
model.put("message", "message");
|
||||
mailer.sendEmail(mailer.getSiteEmail(), email, "Collaboration", model, "newColaborator.vm");
|
||||
|
||||
} else if (collaboration.getRole() != role) {
|
||||
// If the relationship already exists and the role changed then only update the role
|
||||
collaboration.setRole(role);
|
||||
mindmapManager.updateMindmap(mindmap, false);
|
||||
}
|
||||
}
|
||||
|
||||
public void addTags(MindMap mindmap, String tags) {
|
||||
private Collaborator addCollaborator(String email) {
|
||||
// Add a new collaborator ...
|
||||
Collaborator collaborator = mindmapManager.getCollaboratorBy(email);
|
||||
if (collaborator == null) {
|
||||
collaborator = new Collaborator();
|
||||
collaborator.setEmail(email);
|
||||
collaborator.setCreationDate(Calendar.getInstance());
|
||||
mindmapManager.addCollaborator(collaborator);
|
||||
}
|
||||
return collaborator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addTags(@NotNull MindMap mindmap, String tags) {
|
||||
mindmap.setTags(tags);
|
||||
mindmapManager.updateMindmap(mindmap, false);
|
||||
if (tags != null && tags.length() > 0) {
|
||||
@@ -233,7 +256,7 @@ public class MindmapServiceImpl
|
||||
updateMindmap(map, false);
|
||||
}
|
||||
|
||||
private Collaboration getMindmapUserBy(String email, Set<Collaboration> collaborations) {
|
||||
private Collaboration getCollaborationBy(String email, Set<Collaboration> collaborations) {
|
||||
Collaboration collaboration = null;
|
||||
|
||||
for (Collaboration user : collaborations) {
|
||||
@@ -245,27 +268,6 @@ public class MindmapServiceImpl
|
||||
return collaboration;
|
||||
}
|
||||
|
||||
private void addCollaborator(String colaboratorEmail, CollaborationRole role, MindMap mindmap, ColaborationEmail email) {
|
||||
|
||||
Collaborator collaborator = mindmapManager.getCollaboratorBy(colaboratorEmail);
|
||||
if (collaborator == null) {
|
||||
collaborator = new Collaborator();
|
||||
collaborator.setEmail(colaboratorEmail);
|
||||
collaborator.setCreationDate(Calendar.getInstance());
|
||||
mindmapManager.addCollaborator(collaborator);
|
||||
}
|
||||
|
||||
final Collaboration newCollaboration = new Collaboration(role, collaborator, mindmap);
|
||||
mindmap.getCollaborations().add(newCollaboration);
|
||||
|
||||
mindmapManager.saveMindmap(mindmap);
|
||||
|
||||
final Map<String, Object> model = new HashMap<String, Object>();
|
||||
model.put("role", role);
|
||||
model.put("map", mindmap);
|
||||
model.put("message", email.getMessage());
|
||||
mailer.sendEmail(mailer.getSiteEmail(), colaboratorEmail, email.getSubject(), model, "newColaborator.vm");
|
||||
}
|
||||
|
||||
public void setMindmapManager(MindmapManager mindmapManager) {
|
||||
this.mindmapManager = mindmapManager;
|
||||
|
Reference in New Issue
Block a user