package com.qprogramming.tasq.task; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.stream.Collectors; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; 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.bind.annotation.RestController; import com.qprogramming.tasq.agile.AgileService; import com.qprogramming.tasq.agile.DisplaySprint; import com.qprogramming.tasq.agile.Sprint; import com.qprogramming.tasq.projects.Project; import com.qprogramming.tasq.projects.ProjectService; import com.qprogramming.tasq.support.sorters.DisplayTaskSorter; import com.qprogramming.tasq.task.watched.WatchedTask; import com.qprogramming.tasq.task.watched.WatchedTaskService; import com.qprogramming.tasq.task.worklog.DisplayWorkLog; import com.qprogramming.tasq.task.worklog.WorkLogService; @RestController public class TaskRestController { private TaskService taskSrv; private WatchedTaskService watchSrv; private AgileService sprintSrv; private ProjectService projSrv; private WorkLogService wlSrv; @Autowired public TaskRestController(TaskService taskSrv, WatchedTaskService watchSrv, AgileService sprintSrv, ProjectService projSrv, WorkLogService wlSrv) { this.taskSrv = taskSrv; this.watchSrv = watchSrv; this.sprintSrv = sprintSrv; this.projSrv = projSrv; this.wlSrv = wlSrv; } @Transactional @RequestMapping(value = "/task/getSprints", method = RequestMethod.GET) public List<DisplaySprint> getSprints(@RequestParam String taskID) { List<Sprint> result = new LinkedList<Sprint>(); result.addAll(taskSrv.getTaskSprints(taskID)); return sprintSrv.convertToDisplay(result); // return taskSrv.getTaskSprints(taskID); } /** * Returns int how many accounts is currently watching task with id * * @param id * @return */ @RequestMapping(value = "/task/watchersCount", method = RequestMethod.GET) public int watchersCount(@RequestParam(value = "id") String id) { WatchedTask watched = watchSrv.getByTask(id); return watched != null ? watched.getWatchers().size() : 0; } @RequestMapping(value = "/task/getSubTasks", method = RequestMethod.GET) public List<DisplayTask> showSubTasks(@RequestParam String taskID, HttpServletResponse response) { response.setContentType("application/json"); List<Task> allSubTasks = taskSrv.findSubtasks(taskID); List<DisplayTask> result = allSubTasks.stream().map(DisplayTask::new).collect(Collectors.toList()); Collections.sort(result, new DisplayTaskSorter(DisplayTaskSorter.SORTBY.ID, true)); return result; } /** * Returns List of all task for project which paches term criteria * * @param projectID * @param taskID * @param term * @param response * @return */ @RequestMapping(value = "/getTasks", method = RequestMethod.GET) public List<DisplayTask> showTasks(@RequestParam Long projectID, @RequestParam(required = false) String taskID, @RequestParam String term, HttpServletResponse response) { response.setContentType("application/json"); Project project = projSrv.findById(projectID); List<Task> allTasks = taskSrv.findAllByProject(project); if (taskID != null) { Task task = taskSrv.findById(taskID); allTasks.remove(task); } List<DisplayTask> result = new ArrayList<DisplayTask>(); for (Task task : allTasks) { if (term == null) { result.add(new DisplayTask(task)); } else { if (StringUtils.containsIgnoreCase(task.getName(), term) || StringUtils.containsIgnoreCase(task.getId(), term)) { result.add(new DisplayTask(task)); } } } return result; } @RequestMapping(value = "/task/getWorklogs", method = RequestMethod.GET) public List<DisplayWorkLog> getWorklogs(@RequestParam String taskID) { return wlSrv.getTaskDisplayEvents(taskID); } }