package org.ironbrain.dao; import com.google.common.base.Joiner; import org.hibernate.criterion.Restrictions; import org.ironbrain.APIController; import org.ironbrain.Result; import org.ironbrain.SessionData; import org.ironbrain.core.Remind; import org.ironbrain.core.Section; import org.ironbrain.core.Ticket; import org.ironbrain.core.User; import org.ironbrain.utils.HtmlUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; @Repository @SuppressWarnings("unchecked") @Transactional public class RemindDao extends BaseDao { @Autowired APIController api; @Autowired private TicketDao ticketDao; @Autowired private SectionDao sectionDao; @Autowired protected SessionData data; public Remind addRemind(Section section) { return addRemind(section, data.getUserId()); } public Remind addRemind(Section section, int user) { //One ticket if (section.getTicket() != null) { Ticket ticket = ticketDao.getTicket(section.getTicket()); Remind remind = new Remind(); remind.setTicket(section.getTicket()); remind.setUser(user); remind.setLabel(section.getLabel()); remind.setShortText(HtmlUtils.getEscapedShortText(ticket.getQuestions(), 50)); List<String> pathList = new ArrayList<>(); api.getPath(section.getId()).forEach(sec -> { pathList.add(sec.getLabel()); }); pathList.remove(pathList.size() - 1); String path = Joiner.on(" → ").join(pathList); remind.setPath(path); int id = (int) getSess().save(remind); remind.setId(id); return remind; } else { List<Section> children = api.getSections(section.getId()); children.forEach(child -> { addRemind(child.getId(), user); }); return null; } } public Remind get(int id) { Remind remind = (Remind) getSess().get(Remind.class, id); return remind; } public void addRemind(int sectionId, int user) { Section section = api.getSection(sectionId); addRemind(section, user); } public List<Remind> getReminds() { return getReminds(data.getUser()); } public List<Remind> getReminds(User user) { List<Remind> reminds; reminds = getSess().createCriteria(Remind.class) .add(Restrictions.eq("user", user.getId())) .list(); return reminds; } public Result delete(int id) { Remind remind = new Remind(); remind.setId(id); getSess().delete(remind); return Result.getOk(); } public void deleteWithTicketId(Integer ticket) { List<Remind> reminds = getSess().createCriteria(Remind.class) .add(Restrictions.eq("user", data.getUser().getId())) .add(Restrictions.eq("ticket", ticket)) .list(); reminds.forEach(remind -> { getSess().delete(remind); }); } public void addRemindTicket(Integer ticketId) { Section section = sectionDao.getSectionFromTicket(ticketId); addRemind(section, data.getUser().getId()); } }