Merge branch 'feature/WISE-15-mindmapListFolderSupport' into develop

This commit is contained in:
Paulo Gustavo Veiga
2014-03-04 16:11:52 -03:00
54 changed files with 3171 additions and 565 deletions

View File

@@ -0,0 +1,26 @@
package com.wisemapping.dao;
import com.wisemapping.model.Label;
import com.wisemapping.model.User;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
public interface LabelManager {
void addLabel(@NotNull final Label label);
void saveLabel(@NotNull final Label label);
@NotNull
List<Label> getAllLabels(@NotNull final User user);
@Nullable
Label getLabelById(int id, @NotNull final User user);
@Nullable
Label getLabelByTitle(@NotNull final String title, @NotNull final User user);
void removeLabel(@NotNull final Label label);
}

View File

@@ -0,0 +1,57 @@
package com.wisemapping.dao;
import com.wisemapping.model.Label;
import com.wisemapping.model.User;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import java.util.List;
public class LabelManagerImpl extends HibernateDaoSupport
implements LabelManager {
@Override
public void addLabel(@NotNull final Label label) {
saveLabel(label);
}
@Override
public void saveLabel(@NotNull final Label label) {
getSession().save(label);
}
@NotNull
@Override
public List<Label> getAllLabels(@NotNull final User user) {
return getHibernateTemplate().find("from com.wisemapping.model.Label wisemapping where creator_id=?", user.getId());
}
@Nullable
@Override
public Label getLabelById(int id, @NotNull final User user) {
List<Label> labels = getHibernateTemplate().find("from com.wisemapping.model.Label wisemapping where id=? and creator=?", new Object[]{id, user});
return getFirst(labels);
}
@Nullable
@Override
public Label getLabelByTitle(@NotNull String title, @NotNull final User user) {
final List<Label> labels = getHibernateTemplate().find("from com.wisemapping.model.Label wisemapping where title=? and creator=?", new Object[]{title, user});
return getFirst(labels);
}
@Override
public void removeLabel(@NotNull Label label) {
getHibernateTemplate().delete(label);
}
@Nullable private Label getFirst(List<Label> labels) {
Label result = null;
if (labels != null && !labels.isEmpty()) {
result = labels.get(0);
}
return result;
}
}

View File

@@ -0,0 +1,19 @@
package com.wisemapping.exceptions;
import org.jetbrains.annotations.NotNull;
public class LabelCouldNotFoundException extends ClientException {
private static final String MSG_KEY = "LABEL_CAN_NOT_BE_FOUND";
public LabelCouldNotFoundException(@NotNull String msg)
{
super(msg,Severity.FATAL);
}
@NotNull
@Override
protected String getMsgBundleKey() {
return MSG_KEY;
}
}

View File

@@ -0,0 +1,20 @@
package com.wisemapping.exceptions;
import org.jetbrains.annotations.NotNull;
public class LabelMindmapRelationshipNotFoundException extends ClientException {
private static final String MSG_KEY = "LABEL_MINDMAP_RELATION_NOT_BE_FOUND";
public LabelMindmapRelationshipNotFoundException(@NotNull String msg)
{
super(msg,Severity.WARNING);
}
@NotNull
@Override
protected String getMsgBundleKey() {
return MSG_KEY;
}
}

View File

@@ -21,6 +21,7 @@ package com.wisemapping.model;
public class Constants {
public static final int MAX_MAP_NAME_LENGTH = 512;
public static final int MAX_LABEL_NAME_LENGTH = 30;
public static final int MAX_MAP_DESCRIPTION_LENGTH = 512;
public static final int MAX_USER_LASTNAME_LENGTH = 255;
public static final int MAX_USER_FIRSTNAME_LENGTH = 255;

View File

@@ -0,0 +1,79 @@
package com.wisemapping.model;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class Label {
//~ Instance fields ......................................................................................
private int id;
@NotNull private String title;
@NotNull private User creator;
@Nullable private Label parent;
@NotNull private String color;
public void setParent(@Nullable Label parent) {
this.parent = parent;
}
@Nullable
public Label getParent() {
return parent;
}
public void setCreator(@NotNull User creator) {
this.creator = creator;
}
@NotNull
public User getCreator() {
return creator;
}
@Nullable
public String getTitle() {
return title;
}
public void setTitle(@NotNull String title) {
this.title = title;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@NotNull
public String getColor() {
return color;
}
public void setColor(@NotNull String color) {
this.color = color;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Label)) return false;
Label label = (Label) o;
return id == label.id && creator.getId() == label.creator.getId()
&& !(parent != null ? !parent.equals(label.parent) : label.parent != null);
}
@Override
public int hashCode() {
int result = id;
result = 31 * result + title.hashCode();
result = 31 * result + creator.hashCode();
result = 31 * result + (parent != null ? parent.hashCode() : 0);
return result;
}
}

View File

@@ -0,0 +1,50 @@
package com.wisemapping.model;
import java.io.Serializable;
public class LabelMindmap implements Serializable{
private int mindmapId;
private int labelId;
public LabelMindmap(int labelId, int mindmapId) {
this.mindmapId = mindmapId;
this.labelId = labelId;
}
public LabelMindmap() {}
public int getMindmapId() {
return mindmapId;
}
public void setMindmapId(int mindmapId) {
this.mindmapId = mindmapId;
}
public int getLabelId() {
return labelId;
}
public void setLabelId(int labelId) {
this.labelId = labelId;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof LabelMindmap)) return false;
LabelMindmap that = (LabelMindmap) o;
return labelId == that.labelId && mindmapId == that.mindmapId;
}
@Override
public int hashCode() {
int result = mindmapId;
result = 31 * result + labelId;
return result;
}
}

View File

@@ -29,6 +29,7 @@ import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Calendar;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
public class Mindmap {
@@ -44,6 +45,7 @@ public class Mindmap {
private User lastEditor;
private Set<Collaboration> collaborations = new HashSet<Collaboration>();
private Set<Label> labels = new LinkedHashSet<>();
private User creator;
private String tags;
@@ -118,6 +120,18 @@ public class Mindmap {
collaborations.add(collaboration);
}
@NotNull public Set<Label> getLabels() {
return labels;
}
public void setLabels(@NotNull final Set<Label> labels) {
this.labels = labels;
}
public void addLabel(@NotNull final Label label) {
this.labels.add(label);
}
@Nullable
public Collaboration findCollaboration(@NotNull Collaborator collaborator) {
Collaboration result = null;
@@ -229,9 +243,6 @@ public class Mindmap {
}
public void setCreator(@NotNull User creator) {
if (creator == null) {
throw new IllegalArgumentException("Owner can not be null");
}
this.creator = creator;
}
@@ -307,4 +318,28 @@ public class Mindmap {
return result;
}
//creo que no se usa mas
public boolean hasLabel(@NotNull final String name) {
for (Label label : this.labels) {
if (label.getTitle().equals(name)) {
return true;
}
}
return false;
}
@Nullable public Label findLabel(int labelId) {
Label result = null;
for (Label label : this.labels) {
if (label.getId() == labelId) {
result = label;
break;
}
}
return result;
}
public void removeLabel(@NotNull final Label label) {
this.labels.remove(label);
}
}

View File

@@ -0,0 +1,96 @@
package com.wisemapping.rest;
import com.wisemapping.exceptions.LabelCouldNotFoundException;
import com.wisemapping.exceptions.MapCouldNotFoundException;
import com.wisemapping.exceptions.WiseMappingException;
import com.wisemapping.model.Label;
import com.wisemapping.model.Mindmap;
import com.wisemapping.model.User;
import com.wisemapping.rest.model.RestLabel;
import com.wisemapping.rest.model.RestLabelList;
import com.wisemapping.rest.model.RestMindmapInfo;
import com.wisemapping.rest.model.RestMindmapList;
import com.wisemapping.security.Utils;
import com.wisemapping.service.LabelService;
import com.wisemapping.service.MindmapService;
import com.wisemapping.validator.LabelValidator;
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;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseStatus;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
@Controller
public class LabelController extends BaseController {
@Qualifier("labelService")
@Autowired
private LabelService labelService;
@RequestMapping(method = RequestMethod.POST, value = "/labels", consumes = {"application/json", "application/xml"})
@ResponseStatus(value = HttpStatus.CREATED)
public void createLabel(@RequestBody RestLabel restLabel, @NotNull HttpServletResponse response, @RequestParam(required = false) String title) throws WiseMappingException {
// Overwrite title if it was specified by parameter.
if (title != null && !title.isEmpty()) {
restLabel.setTitle(title);
}
// Validate ...
validate(restLabel);
final Label label = createLabel(restLabel);
// Return the new created label ...
response.setHeader("Location", "/service/labels/" + label.getId());
response.setHeader("ResourceId", Integer.toString(label.getId()));
}
@RequestMapping(method = RequestMethod.GET, value = "/labels", produces = {"application/json", "application/xml"})
public RestLabelList retrieveList() {
final User user = Utils.getUser();
assert user != null;
final List<Label> all = labelService.getAll(user);
return new RestLabelList(all);
}
@RequestMapping(method = RequestMethod.DELETE, value = "/labels/{id}")
@ResponseStatus(value = HttpStatus.NO_CONTENT)
public void deleteLabelById(@PathVariable int id) throws WiseMappingException {
final User user = Utils.getUser();
final Label label = labelService.getLabelById(id, user);
if (label == null) {
throw new LabelCouldNotFoundException("Label could not be found. Id: " + id);
}
assert user != null;
labelService.removeLabel(label, user);
}
@NotNull private Label createLabel(@NotNull final RestLabel restLabel) throws WiseMappingException {
final Label label = restLabel.getDelegated();
// Add new label ...
final User user = Utils.getUser();
assert user != null;
labelService.addLabel(label, user);
return label;
}
private void validate(@NotNull final RestLabel restLabel) throws ValidationException {
final BindingResult result = new BeanPropertyBindingResult(restLabel, "");
new LabelValidator(labelService).validate(restLabel.getDelegated(), result);
if (result.hasErrors()) {
throw new ValidationException(result);
}
}
}

View File

@@ -20,6 +20,7 @@ package com.wisemapping.rest;
import com.mangofactory.swagger.annotations.ApiIgnore;
import com.wisemapping.exceptions.ImportUnexpectedException;
import com.wisemapping.exceptions.LabelCouldNotFoundException;
import com.wisemapping.exceptions.MapCouldNotFoundException;
import com.wisemapping.exceptions.MultipleSessionsOpenException;
import com.wisemapping.exceptions.SessionExpiredException;
@@ -31,11 +32,13 @@ import com.wisemapping.importer.ImporterFactory;
import com.wisemapping.model.Collaboration;
import com.wisemapping.model.CollaborationProperties;
import com.wisemapping.model.CollaborationRole;
import com.wisemapping.model.Label;
import com.wisemapping.model.MindMapHistory;
import com.wisemapping.model.Mindmap;
import com.wisemapping.model.User;
import com.wisemapping.rest.model.RestCollaboration;
import com.wisemapping.rest.model.RestCollaborationList;
import com.wisemapping.rest.model.RestLabel;
import com.wisemapping.rest.model.RestMindmap;
import com.wisemapping.rest.model.RestMindmapHistory;
import com.wisemapping.rest.model.RestMindmapHistoryList;
@@ -43,6 +46,7 @@ import com.wisemapping.rest.model.RestMindmapInfo;
import com.wisemapping.rest.model.RestMindmapList;
import com.wisemapping.security.Utils;
import com.wisemapping.service.CollaborationException;
import com.wisemapping.service.LabelService;
import com.wisemapping.service.LockInfo;
import com.wisemapping.service.LockManager;
import com.wisemapping.service.MindmapService;
@@ -86,6 +90,10 @@ public class MindmapController extends BaseController {
@Autowired
private MindmapService mindmapService;
@Qualifier("labelService")
@Autowired
private LabelService labelService;
@RequestMapping(method = RequestMethod.GET, value = "/maps/{id}", produces = {"application/json", "application/xml", "text/html"})
@ResponseBody
public RestMindmap retrieve(@PathVariable int id) throws WiseMappingException {
@@ -617,4 +625,37 @@ public class MindmapController extends BaseController {
result.rejectValue(fieldName, "error.not-specified", null, message);
return new ValidationException(result);
}
@RequestMapping(method = RequestMethod.DELETE, value = "/labels/maps/{id}")
@ResponseStatus(value = HttpStatus.NO_CONTENT)
public void removeLabel(@RequestBody RestLabel restLabel, @PathVariable int id) throws WiseMappingException {
final Mindmap mindmap = findMindmapById(id);
final User currentUser = Utils.getUser();
final Label delegated = restLabel.getDelegated();
assert currentUser != null;
delegated.setCreator(currentUser);
mindmapService.removeLabel(mindmap, delegated);
}
@RequestMapping(method = RequestMethod.POST, value = "/labels/maps", consumes = { "application/xml","application/json"})
@ResponseStatus(value = HttpStatus.OK)
public void addLabel(@RequestBody RestLabel restLabel, @RequestParam(required = true) String ids) throws WiseMappingException {
int labelId = restLabel.getId();
final User user = Utils.getUser();
final Label delegated = restLabel.getDelegated();
delegated.setCreator(user);
final Label found = labelService.getLabelById(labelId, user);
if (found == null) {
throw new LabelCouldNotFoundException("Label could not be found. Id: " + labelId);
}
for (String id : ids.split(",")) {
final int mindmapId = Integer.parseInt(id);
final Mindmap mindmap = findMindmapById(mindmapId);
final Label label = mindmap.findLabel(labelId);
if (label == null) {
mindmapService.addLabel(mindmap, delegated);
}
}
}
}

View File

@@ -25,57 +25,77 @@ import com.wisemapping.model.User;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public enum MindmapFilter {
ALL("all") {
public abstract class MindmapFilter {
public static final MindmapFilter ALL = new MindmapFilter("all") {
@Override
public boolean accept(@NotNull Mindmap mindmap, @NotNull User user) {
boolean accept(@NotNull Mindmap mindmap, @NotNull User user) {
return true;
}
},
MY_MAPS("my_maps") {
};
public static final MindmapFilter MY_MAPS = new MindmapFilter("my_maps") {
@Override
boolean accept(@NotNull Mindmap mindmap, @NotNull User user) {
return mindmap.getCreator().identityEquality(user);
}
},
STARRED("starred") {
};
public static final MindmapFilter STARRED = new MindmapFilter("starred") {
@Override
boolean accept(@NotNull Mindmap mindmap, @NotNull User user) {
return mindmap.isStarred(user);
}
},
SHARED_WITH_ME("shared_with_me") {
};
public static final MindmapFilter SHARED_WITH_ME = new MindmapFilter("shared_with_me") {
@Override
boolean accept(@NotNull Mindmap mindmap, @NotNull User user) {
return !MY_MAPS.accept(mindmap, user);
}
},
PUBLIC("public") {
};
public static final MindmapFilter PUBLIC = new MindmapFilter("public") {
@Override
boolean accept(@NotNull Mindmap mindmap, @NotNull User user) {
return mindmap.isPublic();
}
};
private String id;
protected String id;
private static MindmapFilter[] values = {ALL, MY_MAPS, PUBLIC, STARRED, SHARED_WITH_ME};
MindmapFilter(@NotNull String id) {
private MindmapFilter(@NotNull String id) {
this.id = id;
}
static public MindmapFilter parse(@Nullable String valueStr) {
MindmapFilter result = ALL;
final MindmapFilter[] values = MindmapFilter.values();
for (MindmapFilter value : values) {
if (value.id.equals(valueStr)) {
result = value;
break;
static public MindmapFilter parse(@Nullable final String valueStr) {
MindmapFilter result = null;
if (valueStr != null) {
for (MindmapFilter value : MindmapFilter.values) {
if (value.id.equals(valueStr)) {
result = value;
break;
}
}
// valueStr is not a default filter
if (result == null) {
result = new LabelFilter(valueStr);
}
} else {
result = ALL;
}
return result;
}
abstract boolean accept(@NotNull Mindmap mindmap, @NotNull User user);
private static final class LabelFilter extends MindmapFilter {
private LabelFilter(@NotNull String id) {
super(id);
}
@Override
boolean accept(@NotNull Mindmap mindmap, @NotNull User user) {
return mindmap.hasLabel(this.id);
}
}
}

View File

@@ -0,0 +1,76 @@
package com.wisemapping.rest.model;
import com.wisemapping.model.Label;
import org.codehaus.jackson.annotate.JsonAutoDetect;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
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 static org.codehaus.jackson.annotate.JsonAutoDetect.Visibility.NONE;
import static org.codehaus.jackson.annotate.JsonAutoDetect.Visibility.PUBLIC_ONLY;
@XmlRootElement(name = "label")
@XmlAccessorType(XmlAccessType.PROPERTY)
@JsonAutoDetect(
fieldVisibility = NONE,
setterVisibility = PUBLIC_ONLY,
isGetterVisibility = NONE,
getterVisibility = PUBLIC_ONLY
)
@JsonIgnoreProperties(ignoreUnknown = true)
public class RestLabel {
@JsonIgnore
private Label label;
public RestLabel() {
this(new Label());
}
public RestLabel(@NotNull final Label label) {
this.label = label;
}
public void setParent(@NotNull final Label parent) {
this.label.setParent(parent);
}
@Nullable
public Label getParent() {
return this.label.getParent();
}
@Nullable
public String getTitle() {
return this.label.getTitle();
}
public int getId() {
return label.getId();
}
public void setId(int id) {
label.setId(id);
}
public void setTitle(String title) {
label.setTitle(title);
}
public void setColor(@NotNull final String color) {
label.setColor(color);
}
@Nullable public String getColor() {
return label.getColor();
}
@JsonIgnore
public Label getDelegated() {
return label;
}
}

View File

@@ -0,0 +1,40 @@
package com.wisemapping.rest.model;
import com.wisemapping.model.Label;
import org.codehaus.jackson.annotate.JsonAutoDetect;
import org.jetbrains.annotations.NotNull;
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.List;
@XmlRootElement(name = "labels")
@XmlAccessorType(XmlAccessType.PROPERTY)
@JsonAutoDetect(
fieldVisibility = JsonAutoDetect.Visibility.NONE,
getterVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY,
isGetterVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY)
public class RestLabelList {
@NotNull private final List<RestLabel> restLabels;
public RestLabelList(){
this.restLabels = new ArrayList<>();
}
public RestLabelList(@NotNull final List<Label> labels) {
this.restLabels = new ArrayList<>(labels.size());
for (Label label : labels) {
this.restLabels.add(new RestLabel(label));
}
}
@NotNull @XmlElement(name = "label")
public List<RestLabel> getLabels() {
return restLabels;
}
}

View File

@@ -21,6 +21,7 @@ package com.wisemapping.rest.model;
import com.wisemapping.model.Collaboration;
import com.wisemapping.model.Collaborator;
import com.wisemapping.model.Label;
import com.wisemapping.model.Mindmap;
import com.wisemapping.model.User;
import com.wisemapping.security.Utils;
@@ -35,6 +36,9 @@ import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Calendar;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
@XmlRootElement(name = "map")
@XmlAccessorType(XmlAccessType.PROPERTY)
@@ -93,6 +97,13 @@ public class RestMindmapInfo {
public void setTitle(String title) {
mindmap.setTitle(title);
}
public Set<RestLabel> getLabels() {
final Set<RestLabel> result = new LinkedHashSet<>();
for (Label label : mindmap.getLabels()) {
result.add(new RestLabel(label));
}
return result;
}
public int getId() {
return mindmap.getId();

View File

@@ -48,7 +48,7 @@ public class RestMindmapList {
}
public RestMindmapList(@NotNull List<Mindmap> mindmaps, @NotNull Collaborator collaborator) {
this.mindmapsInfo = new ArrayList<RestMindmapInfo>();
this.mindmapsInfo = new ArrayList<>(mindmaps.size());
for (Mindmap mindMap : mindmaps) {
this.mindmapsInfo.add(new RestMindmapInfo(mindMap, collaborator));
}

View File

@@ -0,0 +1,23 @@
package com.wisemapping.service;
import com.wisemapping.exceptions.WiseMappingException;
import com.wisemapping.model.Label;
import com.wisemapping.model.User;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
public interface LabelService {
void addLabel(@NotNull final Label label, @NotNull final User user) throws WiseMappingException;
@NotNull List<Label> getAll(@NotNull final User user);
@Nullable
Label getLabelById(int id, @NotNull final User user);
public Label getLabelByTitle(@NotNull String title, @NotNull final User user);
void removeLabel(@NotNull final Label label, @NotNull final User user) throws WiseMappingException;
}

View File

@@ -0,0 +1,53 @@
package com.wisemapping.service;
import com.wisemapping.dao.LabelManager;
import com.wisemapping.exceptions.WiseMappingException;
import com.wisemapping.model.Label;
import com.wisemapping.model.User;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
public class LabelServiceImpl implements LabelService {
private LabelManager labelManager;
public void setLabelManager(LabelManager labelManager) {
this.labelManager = labelManager;
}
@Override
public void addLabel(@NotNull final Label label, @NotNull final User user) throws WiseMappingException {
label.setCreator(user);
labelManager.addLabel(label);
}
@NotNull
@Override
public List<Label> getAll(@NotNull final User user) {
return labelManager.getAllLabels(user);
}
@Override @Nullable
public Label getLabelById(int id, @NotNull final User user) {
return labelManager.getLabelById(id, user);
}
@Nullable
@Override
public Label getLabelByTitle(@NotNull String title, @NotNull final User user) {
return labelManager.getLabelByTitle(title, user);
}
@Override
public void removeLabel(@NotNull Label label, @NotNull User user) throws WiseMappingException {
if (label.getCreator().equals(user)) {
labelManager.removeLabel(label);
} else {
throw new WiseMappingException("User: "+ user.getFullName() + "has no ownership on label " + label.getTitle());
}
}
}

View File

@@ -67,4 +67,8 @@ public interface MindmapService {
boolean isAdmin(@Nullable User user);
void purgeHistory(int mapId) throws IOException;
void addLabel(@NotNull final Mindmap mindmap, @NotNull final Label label);
void removeLabel(@NotNull final Mindmap mindmap, @NotNull final Label label);
}

View File

@@ -87,6 +87,16 @@ public class MindmapServiceImpl
mindmapManager.purgeHistory(mapId);
}
@Override
public void addLabel(@NotNull Mindmap mindmap, @NotNull final Label label) {
mindmap.addLabel(label);
}
@Override
public void removeLabel(@NotNull Mindmap mindmap, @NotNull Label label) {
mindmap.removeLabel(label);
}
@Override
public Mindmap getMindmapByTitle(String title, User user) {
return mindmapManager.getMindmapByTitle(title, user);

View File

@@ -0,0 +1,54 @@
package com.wisemapping.validator;
import com.wisemapping.model.Constants;
import com.wisemapping.model.Label;
import com.wisemapping.model.User;
import com.wisemapping.service.LabelService;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
public class LabelValidator implements Validator {
private final LabelService service;
public LabelValidator(@NotNull final LabelService service) {
this.service = service;
}
@Override
public boolean supports(Class<?> clazz) {
return clazz.equals(Label.class);
}
@Override
public void validate(@Nullable final Object target, @NotNull final Errors errors) {
final Label label = (Label) target;
if (label == null) {
errors.rejectValue("map", "error.not-specified", null, "Value required.");
} else {
validateLabel(label, errors);
}
}
private void validateLabel(@NotNull final Label label, @NotNull final Errors errors) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "title", Messages.FIELD_REQUIRED);
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "color", Messages.FIELD_REQUIRED);
final String title = label.getTitle();
ValidatorUtils.rejectIfExceeded(
errors,
"title",
"The description must have less than " + Constants.MAX_LABEL_NAME_LENGTH + " characters.",
title,
Constants.MAX_LABEL_NAME_LENGTH);
final User user = com.wisemapping.security.Utils.getUser();
assert user != null;
final Label foundLabel = service.getLabelByTitle(title, user);
if (foundLabel != null) {
errors.rejectValue("title", Messages.LABEL_TITLE_ALREADY_EXISTS);
}
}
}

View File

@@ -24,6 +24,7 @@ public interface Messages {
String FIELD_REQUIRED = "FIELD_REQUIRED";
String IMPORT_MAP_ERROR = "IMPORT_MAP_ERROR";
String MAP_TITLE_ALREADY_EXISTS = "MAP_TITLE_ALREADY_EXISTS";
String LABEL_TITLE_ALREADY_EXISTS = "LABEL_TITLE_ALREADY_EXISTS";
String PASSWORD_MISSMATCH = "PASSWORD_MISSMATCH";
String CAPTCHA_ERROR = "CAPTCHA_ERROR";
String CAPTCHA_LOADING_ERROR = "CAPTCHA_LOADING_ERROR";