package fi.otavanopisto.pyramus.views.students; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Locale; import org.apache.commons.lang.math.NumberUtils; import fi.internetix.smvc.controllers.PageRequestContext; import fi.otavanopisto.pyramus.breadcrumbs.Breadcrumbable; import fi.otavanopisto.pyramus.dao.DAOFactory; import fi.otavanopisto.pyramus.dao.base.PersonDAO; import fi.otavanopisto.pyramus.dao.students.StudentDAO; import fi.otavanopisto.pyramus.dao.students.StudentImageDAO; import fi.otavanopisto.pyramus.domainmodel.base.Person; import fi.otavanopisto.pyramus.domainmodel.base.PhoneNumber; import fi.otavanopisto.pyramus.domainmodel.students.Student; import fi.otavanopisto.pyramus.framework.PyramusViewController; import fi.otavanopisto.pyramus.framework.UserRole; /** * ViewController for viewing student information within popup dialog. * * @author antti.leppa */ public class StudentInfoPopupViewController extends PyramusViewController implements Breadcrumbable { /** * Returns allowed roles for this page. Everyone is allowed to use this view. * * @return allowed roles */ public UserRole[] getAllowedRoles() { return new UserRole[] { UserRole.MANAGER, UserRole.STUDY_PROGRAMME_LEADER, UserRole.ADMINISTRATOR }; } /** * Processes the page request. * * In parameters * - student * * Page parameters * - student - Student object * - studentImage - url to student's image * - studentNationality - students nationality * - studentLanguage - students native language * - studentPhoneNumber - student phone number * * @param pageRequestContext pageRequestContext */ public void process(PageRequestContext pageRequestContext) { StudentDAO studentDAO = DAOFactory.getInstance().getStudentDAO(); PersonDAO personDAO = DAOFactory.getInstance().getPersonDAO(); StudentImageDAO imageDAO = DAOFactory.getInstance().getStudentImageDAO(); Long studentId = NumberUtils.createLong(pageRequestContext.getRequest().getParameter("student")); Long personId = NumberUtils.createLong(pageRequestContext.getRequest().getParameter("person")); Person person; if (personId != null) { person = personDAO.findById(personId); } else { Student student = studentDAO.findById(studentId); person = student.getPerson(); } List<Student> students = studentDAO.listByPerson(person); Collections.sort(students, new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { /** * Ordering study programmes as follows * 1. studies that have start date but no end date (ongoing) * 2. studies that have no start nor end date * 3. studies that have ended * 4. studies that are archived */ int o1class = (o1.getArchived()) ? 4: (o1.getStudyStartDate() != null && o1.getStudyEndDate() == null) ? 1: (o1.getStudyStartDate() == null && o1.getStudyEndDate() == null) ? 2: (o1.getStudyEndDate() != null) ? 3: 5; int o2class = (o2.getArchived()) ? 4: (o2.getStudyStartDate() != null && o2.getStudyEndDate() == null) ? 1: (o2.getStudyStartDate() == null && o2.getStudyEndDate() == null) ? 2: (o2.getStudyEndDate() != null) ? 3: 5; if (o1class == o2class) { // classes are the same, we try to do last comparison from the start dates return ((o1.getStudyStartDate() != null) && (o2.getStudyStartDate() != null)) ? o1.getStudyStartDate().compareTo(o2.getStudyStartDate()) : 0; } else return o1class < o2class ? -1 : o1class == o2class ? 0 : 1; } }); String studentImage = pageRequestContext.getRequest().getContextPath() + "/gfx/default-user-image.png"; pageRequestContext.getRequest().setAttribute("person", person); pageRequestContext.getRequest().setAttribute("students", students); pageRequestContext.getRequest().setAttribute("studentImage", studentImage); pageRequestContext.getRequest().setAttribute("latestStudentHasImage", person.getLatestStudent() != null ? imageDAO.findStudentHasImage(person.getLatestStudent()) : Boolean.FALSE); Student latestStudent = person.getLatestStudent(); if ((latestStudent != null) && (latestStudent.getContactInfo() != null)) { for (PhoneNumber phoneNumber : latestStudent.getContactInfo().getPhoneNumbers()) { if (phoneNumber.getDefaultNumber()) { pageRequestContext.getRequest().setAttribute("latestStudentDefaultPhone", phoneNumber); break; } } } pageRequestContext.setIncludeJSP("/templates/students/studentinfopopup.jsp"); } /** * Returns the localized name of this page. Used e.g. for breadcrumb navigation. * * This view does not need a name because it's used as a content to popup dialog * * @param locale The locale to be used for the name * * @return The localized name of this page */ public String getName(Locale locale) { return ""; } }