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 a75db033..bf1d1c2e 100755 --- a/wise-webapp/src/main/java/com/wisemapping/model/Collaborator.java +++ b/wise-webapp/src/main/java/com/wisemapping/model/Collaborator.java @@ -112,10 +112,18 @@ public class Collaborator implements Serializable { public boolean identityEquality(@Nullable Collaborator that) { - if (this == that) return true; - if (that == null) return false; + if (this == that) { + return true; + } + + if (that == null) { + return false; + } + + if (id != that.getId()) { + return false; + } - if (id != that.getId()) return false; return email != null ? email.equals(that.getEmail()) : that.getEmail() == null; } 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 5cf58ef6..9bd4e732 100644 --- a/wise-webapp/src/main/java/com/wisemapping/model/Mindmap.java +++ b/wise-webapp/src/main/java/com/wisemapping/model/Mindmap.java @@ -63,7 +63,7 @@ public class Mindmap implements Serializable { @Column(name = "public") private boolean isPublic; - @OneToMany(mappedBy = "mindMap", orphanRemoval = true, cascade = {CascadeType.ALL}) + @OneToMany(mappedBy = "mindMap", orphanRemoval = true, cascade = {CascadeType.ALL}, fetch = FetchType.LAZY) private Set collaborations = new HashSet<>(); @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE}) @@ -177,15 +177,14 @@ public class Mindmap implements Serializable { return result; } + public boolean isCreator(@NotNull User user) { + return this.getCreator()!=null && this.getCreator().identityEquality(user); + } + public boolean isPublic() { return isPublic; } - //@Todo: This is a hack to overcome some problem with JS EL. For some reason, ${mindmap.public} fails as not supported. - // More research is needed... - public boolean isAccessible() { - return isPublic(); - } public void setPublic(boolean isPublic) { this.isPublic = isPublic; 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 index c919a917..dcf680a2 100644 --- a/wise-webapp/src/main/java/com/wisemapping/rest/model/RestMindmapInfo.java +++ b/wise-webapp/src/main/java/com/wisemapping/rest/model/RestMindmapInfo.java @@ -46,10 +46,10 @@ public class RestMindmapInfo { @JsonIgnore private final Mindmap mindmap; @JsonIgnore - private Set restLabels; + private Set restLabels; @JsonIgnore - private int mapId = -1; + private int mapId = -1; private final Collaborator collaborator; @@ -91,9 +91,9 @@ public class RestMindmapInfo { public Set getLabels() { // Support test deserialization... Set result = this.restLabels; - if(result==null) { + if (result == null) { final User me = Utils.getUser(); - result = mindmap.getLabels(). + result = mindmap.getLabels(). stream() .filter(l -> l.getCreator().equals(me)) .map(RestLabel::new) @@ -107,8 +107,8 @@ public class RestMindmapInfo { } public int getId() { - int result = this.mapId; - if(mapId==-1) { + int result = this.mapId; + if (mapId == -1) { result = mindmap.getId(); } return result; @@ -132,8 +132,17 @@ public class RestMindmapInfo { } public String getRole() { - final Optional collaboration = mindmap.findCollaboration(Utils.getUser()); - return collaboration.map(value -> value.getRole().getLabel()).orElse(ROLE_NONE); + final User user = Utils.getUser(); + String result; + if (mindmap.isCreator(user)) { + // Performance hack. In case that the person is the creator, assume that the role is owner. + // This is to avoid loading all the collaboration maps per map. + result = CollaborationRole.OWNER.getLabel(); + } else { + final Optional collaboration = mindmap.findCollaboration(user); + result = collaboration.map(value -> value.getRole().getLabel()).orElse(ROLE_NONE); + } + return result; } public void setRole(String value) {