package fi.otavanopisto.pyramus.views.courses; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.math.NumberUtils; import fi.internetix.smvc.controllers.PageRequestContext; import fi.otavanopisto.pyramus.I18N.Messages; import fi.otavanopisto.pyramus.breadcrumbs.Breadcrumbable; import fi.otavanopisto.pyramus.dao.DAOFactory; import fi.otavanopisto.pyramus.dao.courses.CourseDAO; import fi.otavanopisto.pyramus.dao.courses.CourseParticipationTypeDAO; import fi.otavanopisto.pyramus.dao.courses.CourseStudentDAO; import fi.otavanopisto.pyramus.dao.grading.CourseAssessmentDAO; import fi.otavanopisto.pyramus.dao.grading.GradingScaleDAO; import fi.otavanopisto.pyramus.domainmodel.courses.Course; import fi.otavanopisto.pyramus.domainmodel.courses.CourseParticipationType; import fi.otavanopisto.pyramus.domainmodel.courses.CourseStudent; import fi.otavanopisto.pyramus.domainmodel.grading.CourseAssessment; import fi.otavanopisto.pyramus.domainmodel.grading.GradingScale; import fi.otavanopisto.pyramus.domainmodel.users.Role; import fi.otavanopisto.pyramus.framework.PyramusViewController; import fi.otavanopisto.pyramus.framework.UserRole; /** * The controller responsible of the Edit Course view of the application. * * @see fi.otavanopisto.pyramus.json.users.CreateGradingScaleJSONRequestController */ public class ManageCourseAssessmentsViewController extends PyramusViewController implements Breadcrumbable { /** * Processes the page request by including the corresponding JSP page to the response. * * @param pageRequestContext Page request context */ public void process(PageRequestContext pageRequestContext) { CourseDAO courseDAO = DAOFactory.getInstance().getCourseDAO(); CourseParticipationTypeDAO participationTypeDAO = DAOFactory.getInstance().getCourseParticipationTypeDAO(); CourseStudentDAO courseStudentDAO = DAOFactory.getInstance().getCourseStudentDAO(); GradingScaleDAO gradingScaleDAO = DAOFactory.getInstance().getGradingScaleDAO(); CourseAssessmentDAO courseAssessmentDAO = DAOFactory.getInstance().getCourseAssessmentDAO(); Course course = courseDAO.findById(NumberUtils.createLong(pageRequestContext.getRequest().getParameter("course"))); List<GradingScale> gradingScales = gradingScaleDAO.listUnarchived(); List<CourseStudent> courseStudents = courseStudentDAO.listByCourse(course); Collections.sort(courseStudents, new Comparator<CourseStudent>() { @Override public int compare(CourseStudent o1, CourseStudent o2) { int cmp = o1.getStudent().getLastName().compareToIgnoreCase(o2.getStudent().getLastName()); if (cmp == 0) cmp = o1.getStudent().getFirstName().compareToIgnoreCase(o2.getStudent().getFirstName()); return cmp; } }); Map<Long, CourseAssessment> courseAssessments = new HashMap<>(); Map<Long, String> verbalAssessments = new HashMap<>(); Iterator<CourseStudent> students = courseStudents.iterator(); while (students.hasNext()) { CourseStudent courseStudent = students.next(); CourseAssessment courseAssessment = courseAssessmentDAO.findByCourseStudentAndArchived(courseStudent, Boolean.FALSE); if (courseAssessment != null) { courseAssessments.put(courseStudent.getId(), courseAssessment); // Shortened descriptions String description = courseAssessment.getVerbalAssessment(); if (description != null) { description = StringEscapeUtils.unescapeHtml(description.replaceAll("\\<.*?>","")); description = description.replaceAll("\\n", ""); verbalAssessments.put(courseAssessment.getId(), description); } } } List<CourseParticipationType> courseParticipationTypes = participationTypeDAO.listUnarchived(); Collections.sort(courseParticipationTypes, new Comparator<CourseParticipationType>() { public int compare(CourseParticipationType o1, CourseParticipationType o2) { return o1.getIndexColumn() == null ? -1 : o2.getIndexColumn() == null ? 1 : o1.getIndexColumn().compareTo(o2.getIndexColumn()); } }); pageRequestContext.getRequest().setAttribute("course", course); pageRequestContext.getRequest().setAttribute("courseStudents", courseStudents); pageRequestContext.getRequest().setAttribute("courseParticipationTypes", courseParticipationTypes); pageRequestContext.getRequest().setAttribute("assessments", courseAssessments); pageRequestContext.getRequest().setAttribute("verbalAssessments", verbalAssessments); pageRequestContext.getRequest().setAttribute("gradingScales", gradingScales); pageRequestContext.setIncludeJSP("/templates/courses/managecourseassessments.jsp"); } /** * Returns the roles allowed to access this page. Editing courses is available for users with * {@link Role#MANAGER} or {@link Role#ADMINISTRATOR} privileges. * * @return The roles allowed to access this page */ public UserRole[] getAllowedRoles() { return new UserRole[] { UserRole.MANAGER, UserRole.STUDY_PROGRAMME_LEADER, UserRole.ADMINISTRATOR }; } /** * Returns the localized name of this page. Used e.g. for breadcrumb navigation. * * @param locale The locale to be used for the name * * @return The localized name of this page */ public String getName(Locale locale) { return Messages.getInstance().getText(locale, "courses.manageCourseAssessments.breadcrumb"); } }