package com.qprogramming.tasq.events; import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.MessageSource; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort.Direction; import org.springframework.data.web.PageableDefault; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; 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.ResponseBody; import com.qprogramming.tasq.support.ResultData; import com.qprogramming.tasq.support.Utils; @Controller public class EventsController { private EventsService eventSrv; private MessageSource msg; @Autowired public EventsController(EventsService eventSrv, MessageSource msg) { this.eventSrv = eventSrv; this.msg = msg; } /** * Get list of all tasks watched by currently logged user * * @param model * @return */ @RequestMapping(value = "/events", method = RequestMethod.GET) public String events(Model model) { // List<Event> events = eventSrv.getEvents(); // model.addAttribute("events", events); return "user/events"; } /** * Get list of all tasks watched by currently logged user * * @param model * @return */ @RequestMapping(value = "/listEvents", method = RequestMethod.GET) public @ResponseBody Page<DisplayEvent> eventsPaged(@RequestParam(required = false) String term, @PageableDefault(size = 25, page = 0, sort = "date", direction = Direction.DESC) Pageable p) { Page<Event> events = eventSrv.getEvents(p); List<DisplayEvent> eventList = new ArrayList<DisplayEvent>(); for (Event event : events) { eventList.add(new DisplayEvent(event)); } return new PageImpl<DisplayEvent>(eventList, p, events.getTotalElements()); } /** * Sets event with id as read * * @param id * @return */ @RequestMapping(value = "/events/read", method = RequestMethod.POST) @ResponseBody public ResultData readEvent(@RequestParam(value = "id") Long id) { ResultData result = new ResultData(); Event event = eventSrv.getById(id); event.setUnread(false); eventSrv.save(event); result.code = ResultData.Code.OK; return result; } @RequestMapping(value = "/events/readAll", method = RequestMethod.POST) @ResponseBody public ResultData readAllEvents() { ResultData result = new ResultData(); List<Event> events = eventSrv.getEvents(); events.stream().filter(Event::isUnread).forEach(event -> { event.setUnread(false); eventSrv.save(event); }); result.code = ResultData.Code.OK; result.message = msg.getMessage("events.markAll.success", null, Utils.getCurrentLocale()); return result; } /** * Returns int how many accounts is currently watching task with id * * @param id * @return */ @RequestMapping(value = "/events/delete", method = RequestMethod.POST) @ResponseBody public ResultData deleteEvent(@RequestParam(value = "id") Long id) { ResultData result = new ResultData(); Event event = eventSrv.getById(id); eventSrv.delete(event); result.code = ResultData.Code.OK; return result; } @RequestMapping(value = "/events/deleteAll", method = RequestMethod.POST) @ResponseBody public ResultData deleteAllEvents() { ResultData result = new ResultData(); List<Event> events = eventSrv.getEvents(); eventSrv.delete(events); result.code = ResultData.Code.OK; result.message = msg.getMessage("events.deleteAll.success", null, Utils.getCurrentLocale()); return result; } }