diff --git a/wise-webapp/src/main/java/com/wisemapping/model/Label.java b/wise-webapp/src/main/java/com/wisemapping/model/Label.java index 22542da0..9592761c 100644 --- a/wise-webapp/src/main/java/com/wisemapping/model/Label.java +++ b/wise-webapp/src/main/java/com/wisemapping/model/Label.java @@ -56,4 +56,24 @@ public class Label { 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; + } } diff --git a/wise-webapp/src/main/java/com/wisemapping/model/LabelMindmap.java b/wise-webapp/src/main/java/com/wisemapping/model/LabelMindmap.java index 0c9aa7e1..b5ec5eae 100644 --- a/wise-webapp/src/main/java/com/wisemapping/model/LabelMindmap.java +++ b/wise-webapp/src/main/java/com/wisemapping/model/LabelMindmap.java @@ -7,6 +7,13 @@ 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; } 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 c158b691..08ce57fe 100644 --- a/wise-webapp/src/main/java/com/wisemapping/model/Mindmap.java +++ b/wise-webapp/src/main/java/com/wisemapping/model/Mindmap.java @@ -318,7 +318,7 @@ 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)) { @@ -327,4 +327,19 @@ public class Mindmap { } 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); + } } diff --git a/wise-webapp/src/main/java/com/wisemapping/rest/LabelController.java b/wise-webapp/src/main/java/com/wisemapping/rest/LabelController.java index 96af9697..8692ead6 100644 --- a/wise-webapp/src/main/java/com/wisemapping/rest/LabelController.java +++ b/wise-webapp/src/main/java/com/wisemapping/rest/LabelController.java @@ -37,9 +37,6 @@ public class LabelController extends BaseController { @Qualifier("labelService") @Autowired private LabelService labelService; - @Qualifier("mindmapService") - @Autowired - private MindmapService mindmapService; @RequestMapping(method = RequestMethod.POST, value = "/labels", consumes = {"application/json"}) @@ -67,28 +64,6 @@ public class LabelController extends BaseController { return new RestLabelList(all); } - @RequestMapping(method = RequestMethod.POST, value = "/labels/maps", consumes = {"application/json"}) - @ResponseStatus(value = HttpStatus.ACCEPTED) - public void linkToMindMaps(@RequestBody RestLabel restLabel, @RequestParam(required = true) String ids, @NotNull HttpServletResponse response) throws WiseMappingException { - int id = restLabel.getId(); - Label label = labelService.getLabelById(id); - if (label == null) { - // create label.. - validate(restLabel); - createLabel(restLabel); - label = restLabel.getDelegated(); - response.setHeader("ResourceId", Integer.toString(label.getId())); - } - for (String mindmapId : ids.split(",")) { - final Mindmap mindmap = mindmapService.findMindmapById(Integer.parseInt(mindmapId)); - if (mindmap == null) { - throw new MapCouldNotFoundException("Map could not be found. Id:" + id); - } - mindmap.addLabel(label); - mindmapService.updateMindmap(mindmap, false); - } - } - @RequestMapping(method = RequestMethod.DELETE, value = "/labels/{id}") @ResponseStatus(value = HttpStatus.NO_CONTENT) public void deleteLabelById(@PathVariable int id) throws WiseMappingException { 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 b97f65e1..3eb5d358 100644 --- a/wise-webapp/src/main/java/com/wisemapping/rest/MindmapController.java +++ b/wise-webapp/src/main/java/com/wisemapping/rest/MindmapController.java @@ -31,11 +31,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; @@ -617,4 +619,32 @@ 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/json"}) + @ResponseStatus(value = HttpStatus.ACCEPTED) + public void addLabel(@RequestBody RestLabel restLabel, @RequestParam(required = true) String ids) throws WiseMappingException { + int labelId = restLabel.getId(); + 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) { + final Label delegated = restLabel.getDelegated(); + delegated.setCreator(Utils.getUser()); + mindmapService.addLabel(mindmap, delegated); + } + } + } + + } diff --git a/wise-webapp/src/main/java/com/wisemapping/service/MindmapService.java b/wise-webapp/src/main/java/com/wisemapping/service/MindmapService.java index a08b132d..d3c616e5 100755 --- a/wise-webapp/src/main/java/com/wisemapping/service/MindmapService.java +++ b/wise-webapp/src/main/java/com/wisemapping/service/MindmapService.java @@ -69,4 +69,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); } 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 2974474d..8e689694 100755 --- a/wise-webapp/src/main/java/com/wisemapping/service/MindmapServiceImpl.java +++ b/wise-webapp/src/main/java/com/wisemapping/service/MindmapServiceImpl.java @@ -87,6 +87,18 @@ public class MindmapServiceImpl mindmapManager.purgeHistory(mapId); } + @Override + public void addLabel(@NotNull Mindmap mindmap, @NotNull final Label label) { + mindmap.addLabel(label); + mindmapManager.saveMindmap(mindmap); + } + + @Override + public void removeLabel(@NotNull Mindmap mindmap, @NotNull Label label) { + mindmap.removeLabel(label); + mindmapManager.saveMindmap(mindmap); + } + @Override public Mindmap getMindmapByTitle(String title, User user) { return mindmapManager.getMindmapByTitle(title, user); diff --git a/wise-webapp/src/main/webapp/js/mindmapList.js b/wise-webapp/src/main/webapp/js/mindmapList.js index a166452f..89149ff3 100644 --- a/wise-webapp/src/main/webapp/js/mindmapList.js +++ b/wise-webapp/src/main/webapp/js/mindmapList.js @@ -257,15 +257,13 @@ $(function () { $(document).on('click', '#createLabelBtn', function () { var mapIds = $('#mindmapListTable').dataTableExt.getSelectedMapsIds(); - var url = mapIds.length == 0 - ? "c/restful/labels" - : "c/restful/labels/maps?ids=" + jQuery.makeArray(mapIds).join(','); - $("#new-folder-dialog-modal").dialogForm({ - url: url, + url: "c/restful/labels", postUpdate: function(data, id) { createLabelItem(data, id); - tagMindmaps(data.id || id, data.title, data.color); + if (mapIds.length > 0) { + linkLabelToMindmap(mapIds, {id: id, title: data.title, color: data.color}); + } } }); } @@ -281,7 +279,6 @@ $(function () { if (labels) { prepareLabelList(labels); - $(document).one('click', '.chooseLabel', function () { var mapIds = $('#mindmapListTable').dataTableExt.getSelectedMapsIds(); @@ -289,15 +286,7 @@ $(function () { var labelId = $(this).attr('value'); var labelName = $(this).text(); var labelColor = $(this).attr('color'); - jQuery.ajax("c/restful/labels/maps?ids=" + jQuery.makeArray(mapIds).join(','), { - type:'POST', - //dataType: "json", - contentType:"application/json; charset=utf-8", - data: JSON.stringify({id: labelId}), - success: function() { - tagMindmaps(labelId, labelName, labelColor); - } - }); + linkLabelToMindmap(mapIds, {id: labelId, title: labelName, color: labelColor}); } } ); @@ -458,11 +447,13 @@ $(function () { $(document).on('click', ".closeTag", function() { var me = $(this); + var mindmapId = me.parents("td").find("a").attr("value"); var data = { - mindmapId: me.parents("td").find("a").attr("value"), - labelId: me.attr("value") + id: me.attr("value"), + title: me.attr("name"), + color: me.css('background-color') }; - jQuery.ajax("c/restful/labels/maps", { + jQuery.ajax("c/restful/labels/maps/" + mindmapId, { async:false, //dataType:'json', comentado momentaneamente, problema con jquery 2.1.0 data:JSON.stringify(data), @@ -510,13 +501,13 @@ function labelTagsAsHtml(labels) { "" + "" + "" + //"" + - "" + "" + "
" + - "
" + - label.title + - '
' + + "
" + + label.title + + '
' + "
" + - "x"+ + "" + + "x"+ "
" @@ -579,3 +570,19 @@ function prepareLabelList(labels) { labelList.append('
  • ') labelList.append(defaultValue); } + +function linkLabelToMindmap(mapIds, label) { + jQuery.ajax("c/restful/labels/maps?ids=" + jQuery.makeArray(mapIds).join(','), { + type: 'POST', + //dataType: "json", + contentType: "application/json; charset=utf-8", + data: JSON.stringify({ + id: label.id, + title: label.title, + color: label.color + }), + success: function () { + tagMindmaps(label.id, label.title, label.color); + } + }); +}