/** * */ package com.qprogramming.tasq.task.comments; import com.qprogramming.tasq.account.Account; import com.qprogramming.tasq.support.Utils; import com.qprogramming.tasq.support.web.MessageHelper; import com.qprogramming.tasq.task.Task; import com.qprogramming.tasq.task.TaskService; import com.qprogramming.tasq.task.TaskState; import com.qprogramming.tasq.task.worklog.LogType; import com.qprogramming.tasq.task.worklog.WorkLogService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.MessageSource; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PathVariable; 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.servlet.mvc.support.RedirectAttributes; import javax.servlet.http.HttpServletRequest; import java.util.Locale; @Controller public class CommentsController { private CommentService commentSrv; private TaskService taskSrv; private WorkLogService wlSrv; private MessageSource msg; @Autowired public CommentsController(CommentService commSrv, TaskService taskSrv, WorkLogService wlSrv, MessageSource msg) { this.commentSrv = commSrv; this.taskSrv = taskSrv; this.wlSrv = wlSrv; this.msg = msg; } @Transactional @RequestMapping(value = "/task/{id}/comments", method = RequestMethod.POST) public ResponseEntity<?> getComments(@PathVariable(value = "id") String id) { Task task = taskSrv.findById(id); if (task == null) { return ResponseEntity.badRequest().body(msg.getMessage("task.notexists", null, Utils.getCurrentLocale())); } return ResponseEntity.ok(commentSrv.findByTaskIdOrderByDateDesc(id)); } @Transactional @RequestMapping(value = "/task/comment", method = RequestMethod.POST) public String addComment(@RequestParam(value = "task_id") String id, @RequestParam(value = "message") String message, HttpServletRequest request, RedirectAttributes ra) { Utils.setHttpRequest(request); Account currAccount = Utils.getCurrentAccount(); Locale locale = Utils.getCurrentLocale(); Task task = taskSrv.findById(id); if (commentSrv.commentMessageValid(message, ra)) { task.addComment(commentSrv.addComment(message, currAccount, task)); taskSrv.save(task); // search for watchers and send notifications MessageHelper.addSuccessAttribute(ra, msg.getMessage("comment.added", null, locale)); } return "redirect:" + request.getHeader("Referer"); } @RequestMapping(value = "/task/{taskId}/{taskSubId}/comment/delete", method = RequestMethod.GET) public String deleteComment(@PathVariable String taskId, @PathVariable String taskSubId, @RequestParam(value = "id") Long id, HttpServletRequest request, RedirectAttributes ra) { return deleteComment(taskSrv.createSubId(taskId, taskSubId), id, request, ra); } @RequestMapping(value = "/task/{taskId}/comment/delete", method = RequestMethod.GET) public String deleteComment(@PathVariable String taskId, @RequestParam(value = "id") Long id, HttpServletRequest request, RedirectAttributes ra) { Utils.setHttpRequest(request); Locale locale = Utils.getCurrentLocale(); Task task = taskSrv.findById(taskId); Comment comment = commentSrv.findById(id); if (comment == null || !comment.getAuthor().equals(Utils.getCurrentAccount())) { MessageHelper.addErrorAttribute(ra, msg.getMessage("main.generalError", null, locale)); } else { comment.setMessage(null); comment.setDate_edited(null); commentSrv.save(comment); MessageHelper.addSuccessAttribute(ra, msg.getMessage("comment.deleted", null, locale)); } return "redirect:" + request.getHeader("Referer"); } @RequestMapping(value = "/task/comment/edit", method = RequestMethod.POST) public String editComment(@RequestParam(value = "task_id") String taskId, @RequestParam(value = "comment_id") Long id, @RequestParam(value = "message") String message, HttpServletRequest request, RedirectAttributes ra) { Utils.setHttpRequest(request); Locale locale = Utils.getCurrentLocale(); Task task = taskSrv.findById(taskId); if (commentSrv.editComment(id, message, ra)) { MessageHelper.addSuccessAttribute(ra, msg.getMessage("comment.edited", null, locale)); } return "redirect:" + request.getHeader("Referer"); } }