/**
* Copyright © 2002 Instituto Superior Técnico
*
* This file is part of FenixEdu Academic.
*
* FenixEdu Academic is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* FenixEdu Academic is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with FenixEdu Academic. If not, see <http://www.gnu.org/licenses/>.
*/
package org.fenixedu.academic.ui.struts.action.commons.documentRequestExcel;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.fenixedu.academic.domain.degreeStructure.ProgramConclusion;
import org.fenixedu.academic.domain.exceptions.DomainException;
import org.fenixedu.academic.domain.serviceRequests.AcademicServiceRequest;
import org.fenixedu.academic.domain.serviceRequests.IDiplomaRequest;
import org.fenixedu.academic.domain.serviceRequests.IDiplomaSupplementRequest;
import org.fenixedu.academic.domain.serviceRequests.IRegistryDiplomaRequest;
import org.fenixedu.academic.domain.serviceRequests.RegistrationAcademicServiceRequest;
import org.fenixedu.academic.domain.serviceRequests.RegistryCode;
import org.fenixedu.academic.domain.serviceRequests.documentRequests.DocumentRequest;
import org.fenixedu.academic.domain.serviceRequests.documentRequests.IDocumentRequest;
import org.fenixedu.academic.util.Bundle;
import org.fenixedu.bennu.core.i18n.BundleUtil;
import org.fenixedu.commons.spreadsheet.SheetData;
import org.fenixedu.commons.spreadsheet.SpreadsheetBuilder;
import org.fenixedu.commons.spreadsheet.WorkbookExportFormat;
public class DocumentRequestExcelUtils {
HttpServletRequest request;
HttpServletResponse response;
public DocumentRequestExcelUtils(HttpServletRequest request, HttpServletResponse response) {
this.request = request;
this.response = response;
}
public void generateSortedExcel(Set<AcademicServiceRequest> documents, String prefix) {
SortedSet<AcademicServiceRequest> sorted =
new TreeSet<AcademicServiceRequest>(DocumentRequest.COMPARATOR_BY_REGISTRY_NUMBER);
sorted.addAll(documents);
generate(sorted, getCodes(sorted), prefix);
}
public void generateExcel(Set<AcademicServiceRequest> documents, String prefix) {
generate(documents, getCodes(documents), prefix);
}
private Set<RegistryCode> getCodes(Set<AcademicServiceRequest> documents) {
Set<RegistryCode> codes = new HashSet<RegistryCode>();
for (AcademicServiceRequest document : documents) {
codes.add(document.getRegistryCode());
}
return codes;
}
private void generate(Set<AcademicServiceRequest> documents, Set<RegistryCode> codes, String prefix) {
SheetData<AcademicServiceRequest> data = new SheetData<AcademicServiceRequest>(documents) {
@Override
protected void makeLine(AcademicServiceRequest request) {
IDocumentRequest document = (IDocumentRequest) request;
addCell("Código", document.getRegistryCode().getCode());
addCell("Tipo de Documento", BundleUtil.getString(Bundle.ENUMERATION, document.getDocumentRequestType().name()));
ProgramConclusion programConclusion = null;
switch (document.getDocumentRequestType()) {
case REGISTRY_DIPLOMA_REQUEST:
programConclusion = ((IRegistryDiplomaRequest) document).getProgramConclusion();
break;
case DIPLOMA_REQUEST:
programConclusion = ((IDiplomaRequest) document).getProgramConclusion();
break;
case DIPLOMA_SUPPLEMENT_REQUEST:
programConclusion = ((IDiplomaSupplementRequest) document).getProgramConclusion();
break;
default:
addCell(BundleUtil.getString(Bundle.APPLICATION, "label.programConclusion"));
}
addCell(BundleUtil.getString(Bundle.APPLICATION, "label.programConclusion"),
programConclusion != null ? programConclusion.getName().getContent() : null);
if (document.isRequestForRegistration()) {
addCell("Tipo de Curso", ((RegistrationAcademicServiceRequest) document).getDegreeType().getName()
.getContent());
} else if (document.isRequestForPhd()) {
addCell("Tipo de Estudos", "Programa doutoral");
}
addCell("Nº de Aluno", document.getStudent().getNumber());
addCell("Nome", document.getPerson().getName());
if (!(document.isDiploma())) {
addCell("Ficheiro", request.getLastGeneratedDocument().getFilename());
}
}
};
try {
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment; filename=" + prefix + "-" + "(" + codes.size() + ")" + ".xls");
final ServletOutputStream writer = response.getOutputStream();
new SpreadsheetBuilder().addSheet("lote", data).build(WorkbookExportFormat.EXCEL, writer);
writer.flush();
response.flushBuffer();
} catch (IOException e) {
throw new DomainException("error.rectorateSubmission.errorGeneratingMetadata", e);
}
}
}