From 16e59a0879979a176eb62962269dd51fd21bcbab Mon Sep 17 00:00:00 2001 From: Paulo Gustavo Veiga Date: Wed, 14 Nov 2012 20:17:55 -0300 Subject: [PATCH] Fix collaboration equal issue. --- .../com/wisemapping/model/Collaborator.java | 34 +++++++++++++------ .../java/com/wisemapping/model/Mindmap.java | 10 ++++-- .../wisemapping/rest/MindmapController.java | 2 +- .../com/wisemapping/rest/model/RestUser.java | 3 +- .../security/aop/BaseSecurityAdvice.java | 2 +- .../wisemapping/service/LockManagerImpl.java | 2 +- .../service/MindmapServiceImpl.java | 9 ++--- 7 files changed, 40 insertions(+), 22 deletions(-) diff --git a/wise-webapp/src/main/java/com/wisemapping/model/Collaborator.java b/wise-webapp/src/main/java/com/wisemapping/model/Collaborator.java index bca422de..67a03e81 100755 --- a/wise-webapp/src/main/java/com/wisemapping/model/Collaborator.java +++ b/wise-webapp/src/main/java/com/wisemapping/model/Collaborator.java @@ -19,37 +19,36 @@ package com.wisemapping.model; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.io.Serializable; import java.util.Calendar; -import java.util.Set; import java.util.HashSet; +import java.util.Set; -public class Collaborator implements Serializable { +public class Collaborator implements Serializable { private long id; private String email; private Calendar creationDate; private Set collaborations = new HashSet(); - public Collaborator() {} + public Collaborator() { + } - public Collaborator(Set collaborations) { + public Collaborator(Set collaborations) { this.collaborations = collaborations; } - public void setCollaborations(Set collaborations) - { + public void setCollaborations(Set collaborations) { this.collaborations = collaborations; } - public void addCollaboration(@NotNull Collaboration collaboration) - { - collaborations.add(collaboration); + public void addCollaboration(@NotNull Collaboration collaboration) { + collaborations.add(collaboration); } - public Set getCollaborations() - { + public Set getCollaborations() { return collaborations; } @@ -96,4 +95,17 @@ public class Collaborator implements Serializable { result = 31 * result + (email != null ? email.hashCode() : 0); return result; } + + + public boolean equalCollab(@Nullable Collaborator that) { + if (this == that) return true; + if (that == null) return false; + + if (id != that.id) return false; + if (email != null ? !email.equals(that.email) : that.email != null) return false; + + return true; + + } + } diff --git a/wise-webapp/src/main/java/com/wisemapping/model/Mindmap.java b/wise-webapp/src/main/java/com/wisemapping/model/Mindmap.java index af83c458..9882b220 100644 --- a/wise-webapp/src/main/java/com/wisemapping/model/Mindmap.java +++ b/wise-webapp/src/main/java/com/wisemapping/model/Mindmap.java @@ -28,7 +28,6 @@ import org.jetbrains.annotations.Nullable; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.Calendar; -import java.util.Date; import java.util.HashSet; import java.util.Set; @@ -111,7 +110,14 @@ public class Mindmap { @Nullable public Collaboration findCollaboration(@NotNull Collaborator collaborator) { - return this.findCollaboration(collaborator.getEmail()); + Collaboration result = null; + for (Collaboration collaboration : collaborations) { + if (collaboration.getCollaborator().equalCollab(collaborator)) { + result = collaboration; + break; + } + } + return result; } @Nullable 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 d9edf802..91b22aa0 100644 --- a/wise-webapp/src/main/java/com/wisemapping/rest/MindmapController.java +++ b/wise-webapp/src/main/java/com/wisemapping/rest/MindmapController.java @@ -183,7 +183,7 @@ public class MindmapController extends BaseController { } final LockInfo lockInfo = lockManager.getLockInfo(mindmap); - if (lockInfo.getUser().equals(user)) { + if (lockInfo.getUser().equalCollab(user)) { final boolean outdated = mindmap.getLastModificationTime().getTimeInMillis() > timestamp; if (lockInfo.getSession() == session) { // Timestamp might not be returned to the client. This try to cover this case, ignoring the client timestamp check. diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/model/RestUser.java b/wise-webapp/src/main/java/com/wisemapping/rest/model/RestUser.java index c88402e5..bb520699 100644 --- a/wise-webapp/src/main/java/com/wisemapping/rest/model/RestUser.java +++ b/wise-webapp/src/main/java/com/wisemapping/rest/model/RestUser.java @@ -23,7 +23,6 @@ import com.wisemapping.model.User; import org.codehaus.jackson.annotate.JsonAutoDetect; import org.codehaus.jackson.annotate.JsonIgnore; import org.codehaus.jackson.annotate.JsonIgnoreProperties; -import org.codehaus.jackson.map.annotate.JsonSerialize; import org.jetbrains.annotations.NotNull; import javax.xml.bind.annotation.XmlAccessType; @@ -125,7 +124,7 @@ public class RestUser { } RestUser restUser = (RestUser) o; - return this.getDelegated().equals(restUser.getDelegated()); + return this.getDelegated().equalCollab(restUser.getDelegated()); } @Override diff --git a/wise-webapp/src/main/java/com/wisemapping/security/aop/BaseSecurityAdvice.java b/wise-webapp/src/main/java/com/wisemapping/security/aop/BaseSecurityAdvice.java index 3e8930fe..20e6b1bc 100755 --- a/wise-webapp/src/main/java/com/wisemapping/security/aop/BaseSecurityAdvice.java +++ b/wise-webapp/src/main/java/com/wisemapping/security/aop/BaseSecurityAdvice.java @@ -41,7 +41,7 @@ public abstract class BaseSecurityAdvice { isAllowed = isAllowed(user, ((Integer) argument)); } else if (argument instanceof Collaborator) { // Read operation find on the user are allowed ... - isAllowed = user.equals(argument); + isAllowed = user.equalCollab((Collaborator) argument); } else { throw new IllegalArgumentException("Argument " + argument); } diff --git a/wise-webapp/src/main/java/com/wisemapping/service/LockManagerImpl.java b/wise-webapp/src/main/java/com/wisemapping/service/LockManagerImpl.java index a06c7d2f..a721ff8d 100644 --- a/wise-webapp/src/main/java/com/wisemapping/service/LockManagerImpl.java +++ b/wise-webapp/src/main/java/com/wisemapping/service/LockManagerImpl.java @@ -101,7 +101,7 @@ class LockManagerImpl implements LockManager { public boolean isLockedBy(@NotNull Mindmap mindmap, @NotNull User collaborator) { boolean result = false; final LockInfo lockInfo = this.getLockInfo(mindmap); - if (lockInfo != null && lockInfo.getUser().equals(collaborator)) { + if (lockInfo != null && lockInfo.getUser().equalCollab(collaborator)) { result = true; } return result; 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 8f8d1791..68478eb0 100755 --- a/wise-webapp/src/main/java/com/wisemapping/service/MindmapServiceImpl.java +++ b/wise-webapp/src/main/java/com/wisemapping/service/MindmapServiceImpl.java @@ -114,7 +114,8 @@ public class MindmapServiceImpl final Mindmap mindMap = collaboration.getMindMap(); final Set collaborations = mindMap.getCollaborations(); - if (mindMap.getCreator().getEmail().equals(collaboration.getCollaborator().getEmail())) { + final User creator = mindMap.getCreator(); + if (creator.equalCollab(collaboration.getCollaborator())) { throw new CollaborationException("User is the creator and must have ownership permissions.Creator Email:" + mindMap.getCreator().getEmail() + ",Collaborator:" + collaboration.getCollaborator().getEmail()); } @@ -125,7 +126,7 @@ public class MindmapServiceImpl @Override public void removeMindmap(@NotNull Mindmap mindmap, @NotNull User user) throws WiseMappingException { - if (mindmap.getCreator().equals(user)) { + if (mindmap.getCreator().equalCollab(user)) { mindmapManager.removeMindmap(mindmap); } else { final Collaboration collaboration = mindmap.findCollaboration(user); @@ -264,7 +265,7 @@ public class MindmapServiceImpl @Override public void updateCollaboration(@NotNull Collaborator collaborator, @NotNull Collaboration collaboration) throws WiseMappingException { - if (collaborator.equals(collaboration.getCollaborator())) { + if (collaborator.equalCollab(collaboration.getCollaborator())) { throw new WiseMappingException("No enough permissions for this operation."); } mindmapManager.updateCollaboration(collaboration); @@ -276,7 +277,7 @@ public class MindmapServiceImpl return this.lockManager; } - private Collaboration getCollaborationBy(String email, Set collaborations) { + private Collaboration getCollaborationBy(@NotNull final String email, @NotNull final Set collaborations) { Collaboration collaboration = null; for (Collaboration user : collaborations) {