package fi.otavanopisto.pyramus.rest.controller; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.ejb.Stateless; import javax.enterprise.context.Dependent; import javax.inject.Inject; import fi.otavanopisto.pyramus.dao.base.TagDAO; import fi.otavanopisto.pyramus.dao.students.StudentGroupDAO; import fi.otavanopisto.pyramus.dao.students.StudentGroupStudentDAO; import fi.otavanopisto.pyramus.dao.students.StudentGroupUserDAO; import fi.otavanopisto.pyramus.domainmodel.base.Tag; import fi.otavanopisto.pyramus.domainmodel.students.Student; import fi.otavanopisto.pyramus.domainmodel.students.StudentGroup; import fi.otavanopisto.pyramus.domainmodel.students.StudentGroupStudent; import fi.otavanopisto.pyramus.domainmodel.students.StudentGroupUser; import fi.otavanopisto.pyramus.domainmodel.users.StaffMember; import fi.otavanopisto.pyramus.domainmodel.users.User; @Dependent @Stateless public class StudentGroupController { @Inject private StudentGroupDAO studentGroupDAO; @Inject private StudentGroupStudentDAO studentGroupStudentDAO; @Inject private StudentGroupUserDAO studentGroupUserDAO; @Inject private TagDAO tagDAO; public StudentGroup createStudentGroup(String name, String description, Date beginDate, User user) { return createStudentGroup(name, description, beginDate, user, Boolean.FALSE); } public StudentGroup createStudentGroup(String name, String description, Date beginDate, User user, Boolean guidanceGroup) { StudentGroup studentGroup = studentGroupDAO.create(name, description, beginDate, user, guidanceGroup); return studentGroup; } public Tag createStudentGroupTag(StudentGroup studentGroup, String text) { Tag tag = tagDAO.findByText(text); if (tag == null) { tag = tagDAO.create(text); } studentGroup.addTag(tag); return tag; } public List<StudentGroup> listStudentGroups() { return studentGroupDAO.listAll(); } public List<StudentGroup> listStudentGroups(Integer firstResult, Integer maxResults) { return studentGroupDAO.listAll(firstResult, maxResults); } public List<StudentGroup> listUnarchivedStudentGroups() { return studentGroupDAO.listUnarchived(); } public List<StudentGroup> listUnarchivedStudentGroups(Integer firstResult, Integer maxResults) { return studentGroupDAO.listUnarchived(firstResult, maxResults); } public StudentGroup findStudentGroupById(Long id) { return studentGroupDAO.findById(id); } public Set<Tag> findStudentGroupTags(StudentGroup studentGroup) { return studentGroup.getTags(); } public StudentGroup updateStudentGroup(StudentGroup studentGroup, String name, String description, Date beginDate, User user) { return studentGroupDAO.update(studentGroup, name, description, beginDate, user); } public StudentGroup archiveStudentGroup(StudentGroup studentGroup, User user) { studentGroupDAO.archive(studentGroup, user); return studentGroup; } public StudentGroup unarchiveStudentGroup(StudentGroup studentGroup, User user) { studentGroupDAO.unarchive(studentGroup, user); return studentGroup; } public StudentGroup updateStudentGroupTags(StudentGroup studentGroup, List<String> tags) { Set<String> newTags = new HashSet<>(tags); Set<Tag> studentGroupTags = new HashSet<>(studentGroup.getTags()); for (Tag studentGroupTag : studentGroupTags) { if (!newTags.contains(studentGroupTag.getText())) { removeStudentGroupTag(studentGroup, studentGroupTag); } newTags.remove(studentGroupTag.getText()); } for (String newTag : newTags) { createStudentGroupTag(studentGroup, newTag); } return studentGroup; } public void removeStudentGroupTag(StudentGroup studentGroup, Tag tag) { studentGroup.removeTag(tag); } public void deleteStudentGroup(StudentGroup studentGroup) { studentGroupDAO.delete(studentGroup); } /* StudentGroupStudents */ public StudentGroupStudent findStudentGroupStudentById(Long id) { return studentGroupStudentDAO.findById(id); } public void deleteStudentGroupStudent(StudentGroupStudent studentGroupStudent) { studentGroupStudentDAO.delete(studentGroupStudent); } public StudentGroupStudent createStudentGroupStudent(StudentGroup studentGroup, Student student, User updatingUser) { return studentGroupStudentDAO.create(studentGroup, student, updatingUser); } /* StudentGroupUser */ public StudentGroupUser createStudentGroupStaffMember(StudentGroup studentGroup, StaffMember staffMember, User updatingUser) { return studentGroupUserDAO.create(studentGroup, staffMember, updatingUser); } public StudentGroupUser findStudentGroupUserById(Long id) { return studentGroupUserDAO.findById(id); } public void deleteStudentGroupUser(StudentGroupUser studentGroupUser) { studentGroupUserDAO.delete(studentGroupUser); } public List<StudentGroup> listStudentGroupsByStudent(Student student, Integer firstResult, Integer maxResults, Boolean archived) { return studentGroupDAO.listByStudent(student, firstResult, maxResults, archived); } public List<StudentGroup> listStudentGroupsByStaffMember(StaffMember staffMember, Integer firstResult, Integer maxResults, Boolean archived) { return studentGroupDAO.listByStaffMember(staffMember, firstResult, maxResults, archived); } public List<StudentGroup> listStudentGroupsByMember(User user) { return listStudentGroupsByMember(user, null, null); } public List<StudentGroup> listStudentGroupsByMember(User user, Integer firstResult, Integer maxResults) { if (user instanceof StaffMember) return listStudentGroupsByStaffMember((StaffMember) user, firstResult, maxResults, null); else return listStudentGroupsByStudent((Student) user, firstResult, maxResults, null); } public List<StudentGroup> listUnarchivedStudentGroupsByMember(User user, Integer firstResult, Integer maxResults) { if (user instanceof StaffMember) return listStudentGroupsByStaffMember((StaffMember) user, firstResult, maxResults, false); else return listStudentGroupsByStudent((Student) user, firstResult, maxResults, false); } }