package com.qprogramming.tasq.task.link;
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.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
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;
@Controller
public class TaskLinkController {
private TaskService taskSrv;
private WorkLogService wlSrv;
private MessageSource msg;
private TaskLinkService linkService;
@Autowired
public TaskLinkController(TaskService taskSrv, WorkLogService wlSrv, MessageSource msg, TaskLinkService linkService) {
this.taskSrv = taskSrv;
this.wlSrv = wlSrv;
this.msg = msg;
this.linkService = linkService;
}
@Transactional
@RequestMapping(value = "/task/link", method = RequestMethod.POST)
public String linkTasks(@RequestParam(value = "taskA") String taskAID,
@RequestParam(value = "taskB") String taskBID,
@RequestParam(value = "link") TaskLinkType linkType,
RedirectAttributes ra, HttpServletRequest request) {
// get tasks
Task taska = taskSrv.findById(taskAID);
Task taskb = taskSrv.findById(taskBID);
TaskLink link = linkService.findLink(taskAID, taskBID, linkType);
String linkTXT = msg.getMessage(linkType.getCode(), null,
Utils.getCurrentLocale());
if (link != null) {
MessageHelper.addErrorAttribute(
ra,
msg.getMessage("task.link.error.linked", new Object[]{
taskAID, linkTXT, taskBID},
Utils.getCurrentLocale()));
return "redirect:" + request.getHeader("Referer");
}
if (linkType.equals(TaskLinkType.BLOCKS)) {
taskb.setState(TaskState.BLOCKED);
taskSrv.save(taskb);
} else if (linkType.equals(TaskLinkType.IS_BLOCKED_BY)) {
taska.setState(TaskState.BLOCKED);
taskSrv.save(taska);
}
linkService.save(new TaskLink(taskAID, taskBID, linkType));
wlSrv.addWorkLogNoTask(taskSrv.printID(taskAID) + " - " + taskSrv.printID(taskBID), taska.getProject(),
LogType.TASK_LINK);
MessageHelper.addSuccessAttribute(
ra,
msg.getMessage("task.link.linked", new Object[]{taskAID,
linkTXT, taskBID}, Utils.getCurrentLocale()));
return "redirect:" + request.getHeader("Referer");
}
@Transactional
@RequestMapping(value = "/task/deletelink", method = RequestMethod.GET)
public String deleteLinks(@RequestParam(value = "taskA") String taskA,
@RequestParam(value = "taskB") String taskB,
@RequestParam(value = "link") TaskLinkType linkType,
RedirectAttributes ra, HttpServletRequest request) {
// get tasks
Task task = taskSrv.findById(taskA);
TaskLink link = linkService.findLink(taskA, taskB, linkType);
String linkTXT = msg.getMessage(linkType.getCode(), null,
Utils.getCurrentLocale());
if (link == null) {
MessageHelper.addErrorAttribute(
ra,
msg.getMessage("task.link.error.notFound", new Object[]{
taskA, linkTXT, taskB}, Utils.getCurrentLocale()));
return "redirect:" + request.getHeader("Referer");
}
linkService.delete(link);
wlSrv.addWorkLogNoTask(taskA + " - " + taskB, task.getProject(),
LogType.TASK_LINK_DEL);
MessageHelper.addSuccessAttribute(
ra,
msg.getMessage("task.link.deleted", new Object[]{taskA,
linkTXT, taskB}, Utils.getCurrentLocale()));
return "redirect:" + request.getHeader("Referer");
}
}