/*
* This file is part of SGEA - Sistema de Gestão de Eventos Acadêmicos - TADS IFNMG Campus Januária.
*
* SGEA is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* SGEA 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with SGEA. If not, see <http://www.gnu.org/licenses/>.
*/
package br.edu.ifnmg.GerenciamentoEventos.Aplicacao;
import br.edu.ifnmg.GerenciamentoEventos.DomainModel.Evento;
import br.edu.ifnmg.GerenciamentoEventos.DomainModel.Servicos.EventoRepositorio;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.context.FacesContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRParameter;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
/**
*
* @author petronio
* @param <T>
*/
public abstract class ControllerBaseRelatorio<T> extends ControllerBase {
@EJB
EventoRepositorio daoEvento;
private String relatorio;
private String arquivoSaida;
Evento evento;
private Collection<T> dados;
protected abstract Map<String, Object> carregaParametros();
public abstract Collection<T> getDados();
public Map<String, Object> getParametrosComuns() throws MalformedURLException {
HashMap<String, Object> par = new HashMap<>();
String tmp = getConfiguracao("DIRETORIO_ARQUIVOS") + getEvento().getBanner().getUri();
par.put("banner", tmp);
par.put(JRParameter.REPORT_LOCALE, new Locale("pt", "BR"));
return par;
}
public void executaRelatorioPDF() throws JRException, IOException {
InputStream reportStream = null;
try {
reportStream = getClass().getResourceAsStream(relatorio);
//JasperReport report = JasperCompileManager.compileReport(reportStream);
JRDataSource ds = new JRBeanCollectionDataSource(getDados(), true);
//JasperPrint jasperPrint = JasperFillManager.fillReport(report, carregaParametros(), ds);
JasperPrint jasperPrint = JasperFillManager.fillReport(reportStream, carregaParametros(), ds);
HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
httpServletResponse.addHeader("Content-disposition", "attachment; filename=" + getArquivoSaida() + ".pdf");
ServletOutputStream servletOutputStream = httpServletResponse.getOutputStream();
JasperExportManager.exportReportToPdfStream(jasperPrint, servletOutputStream);
FacesContext.getCurrentInstance().responseComplete();
} catch (JRException ex) {
Logger.getLogger(ControllerBaseRelatorio.class.getName()).log(Level.SEVERE, null, ex);
} finally {
if(reportStream != null)
reportStream.close();
}
}
public String getRelatorio() {
return relatorio;
}
public void setRelatorio(String relatorio) {
this.relatorio = relatorio;
}
public String getArquivoSaida() {
return arquivoSaida;
}
public void setArquivoSaida(String arquivoSaida) {
this.arquivoSaida = arquivoSaida;
}
public Evento getEvento() {
return evento;
}
public void setEvento(Evento evento) {
this.evento = evento;
}
public List<Evento> getEventosDoUsuario() {
return daoEvento.Responsavel(getUsuarioCorrente());
}
}