package fi.otavanopisto.pyramus.views.reports;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
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.reports.ReportCategoryDAO;
import fi.otavanopisto.pyramus.dao.reports.ReportContextDAO;
import fi.otavanopisto.pyramus.dao.reports.ReportDAO;
import fi.otavanopisto.pyramus.domainmodel.reports.Report;
import fi.otavanopisto.pyramus.domainmodel.reports.ReportCategory;
import fi.otavanopisto.pyramus.domainmodel.reports.ReportContext;
import fi.otavanopisto.pyramus.domainmodel.reports.ReportContextType;
import fi.otavanopisto.pyramus.framework.PyramusViewController;
import fi.otavanopisto.pyramus.framework.UserRole;
/**
* The controller responsible of the Edit Report view.
*/
public class EditReportViewController 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) {
ReportDAO reportDAO = DAOFactory.getInstance().getReportDAO();
ReportCategoryDAO categoryDAO = DAOFactory.getInstance().getReportCategoryDAO();
ReportContextDAO reportContextDAO = DAOFactory.getInstance().getReportContextDAO();
Long reportId = pageRequestContext.getLong("reportId");
Report report = reportDAO.findById(reportId);
List<ReportCategory> categories = categoryDAO.listAll();
List<ReportContext> reportContexts = reportContextDAO.listByReport(report);
Collections.sort(categories, new Comparator<ReportCategory>() {
public int compare(ReportCategory o1, ReportCategory o2) {
if (o1.getIndexColumn() == o2.getIndexColumn() || o1.getIndexColumn().equals(o2.getIndexColumn())) {
return o1.getName() == null ? -1 : o2.getName() == null ? 1 : o1.getName().compareTo(o2.getName());
}
else {
return o1.getIndexColumn() == null ? -1 : o2.getIndexColumn() == null ? 1 : o1.getIndexColumn().compareTo(o2.getIndexColumn());
}
}
});
Map<String, Boolean> selectedContexts = new HashMap<>();
for (ReportContext context : reportContexts)
selectedContexts.put(context.getContext().toString(), Boolean.TRUE);
List<String> contextTypes = new ArrayList<>();
for (ReportContextType contextType : ReportContextType.values())
contextTypes.add(contextType.toString());
pageRequestContext.getRequest().setAttribute("report", report);
pageRequestContext.getRequest().setAttribute("reportCategories", categories);
pageRequestContext.getRequest().setAttribute("reportContexts", selectedContexts);
pageRequestContext.getRequest().setAttribute("contextTypes", contextTypes);
pageRequestContext.setIncludeJSP("/templates/reports/editreport.jsp");
}
/**
* Returns the roles allowed to access this page. Reports are available for users with
* {@link Role#USER}, {@link Role#MANAGER} and {@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, "reports.editReport.pageTitle");
}
}