package fi.otavanopisto.pyramus.views.studentfiles; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import fi.internetix.smvc.SmvcRuntimeException; import fi.internetix.smvc.controllers.PageRequestContext; import fi.otavanopisto.pyramus.dao.DAOFactory; import fi.otavanopisto.pyramus.dao.file.FileTypeDAO; import fi.otavanopisto.pyramus.dao.reports.ReportDAO; import fi.otavanopisto.pyramus.dao.students.StudentDAO; import fi.otavanopisto.pyramus.domainmodel.file.FileType; import fi.otavanopisto.pyramus.domainmodel.users.Role; import fi.otavanopisto.pyramus.framework.PyramusViewController; import fi.otavanopisto.pyramus.framework.UserRole; import fi.otavanopisto.pyramus.util.StringAttributeComparator; /** * The controller responsible of the Search Modules dialog of the application. */ public class UploadReportDialogViewController extends PyramusViewController { /** * Processes the page request by including the corresponding JSP page to the response. * * @param pageRequestContext Page request context */ public void process(PageRequestContext pageRequestContext) { FileTypeDAO fileTypeDAO = DAOFactory.getInstance().getFileTypeDAO(); ReportDAO reportDAO = DAOFactory.getInstance().getReportDAO(); StudentDAO studentDAO = DAOFactory.getInstance().getStudentDAO(); Long studentId = pageRequestContext.getLong("studentId"); Long reportId = pageRequestContext.getLong("reportId"); List<FileType> fileTypes = fileTypeDAO.listUnarchived(); Collections.sort(fileTypes, new StringAttributeComparator("getName")); StringBuffer reportParameters = new StringBuffer(); Map<String, String[]> parameterMap = pageRequestContext.getRequest().getParameterMap(); for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) { if (!reservedParameters.contains(entry.getKey())) { String[] values = entry.getValue(); for (String value : values) { // TODO ISO-8859-1 should be UTF-8, once Birt's parameter dialog form has its accept-charset="UTF-8" set try { reportParameters.append('&').append(entry.getKey()).append('=').append(URLEncoder.encode(value, "ISO-8859-1")); } catch (UnsupportedEncodingException e) { throw new SmvcRuntimeException(e); } } } } pageRequestContext.getRequest().setAttribute("student", studentDAO.findById(studentId)); pageRequestContext.getRequest().setAttribute("report", reportDAO.findById(reportId)); pageRequestContext.getRequest().setAttribute("reportParameters", reportParameters); pageRequestContext.getRequest().setAttribute("fileTypes", fileTypes); pageRequestContext.setIncludeJSP("/templates/studentfiles/uploadreport.jsp"); } /** * Returns the roles allowed to access this page. Creating projects 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 }; } private static Set<String> reservedParameters = new HashSet<>(); static { reservedParameters.add("reportId"); reservedParameters.add("magicKey"); reservedParameters.add("format"); reservedParameters.add("__format"); reservedParameters.add("__report"); } }