quinta-feira, 22 de fevereiro de 2018

Relatorio jasper com multiplos dataSources JSF


Essa código faz parte de um biblioteca utilizada em uma aplicação JSF



Dependências utilizadas:

<dependencies>
<dependency>
<groupId>javax.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>5.6.0</version>
</dependency>
<dependency>
<groupId>org.olap4j</groupId>
<artifactId>olap4j</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>


Classe:



import java.io.IOException;
import java.io.InputStream;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;

import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRParameter;
import net.sf.jasperreports.engine.JRPrintPage;
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;

public class ServicoImpressao {

private static final Logger LOGGER = Logger.getLogger(ServicoImpressao.class);

private static JasperPrint print;

public void generateReport(final Collection lista, final Map parameters, final String reporterFile) throws Exception {

try {
JRBeanCollectionDataSource source = new JRBeanCollectionDataSource(lista, false);

InputStream stream = this.getClass().getClassLoader().getResourceAsStream(reporterFile);

Map parametersLocal = parameters;
if (ServicoImpressao.print == null) {
if (parametersLocal == null) {
parametersLocal = new HashMap(1);
}
java.util.Locale locale = new Locale("pt", "BR");
parametersLocal.put(JRParameter.REPORT_LOCALE, locale);
ServicoImpressao.print = JasperFillManager.fillReport(stream, parametersLocal, source);
} else {
JasperPrint jasperPrint_next = JasperFillManager.fillReport(stream, parametersLocal, source);
List pages = jasperPrint_next.getPages();
for (int j = 0; j < pages.size(); j++) {
JRPrintPage object = (JRPrintPage) pages.get(j);
ServicoImpressao.print.addPage(object);
}
}

} catch (Exception e) {
LOGGER.error("ERRO AO GERAR RELATORIO", e);
throw e;
}
}

public void generateReport(final Map<String, Collection> map, final Map parameters, final String reporterFile) throws Exception {

try {
Map parametersLocal = parameters;

if (parametersLocal == null) {
parametersLocal = new HashMap(1);
}

InputStream stream = this.getClass().getClassLoader().getResourceAsStream(reporterFile);

JRBeanCollectionDataSource dataSourceDefault = null;
JRBeanCollectionDataSource dataSource = null;

Iterator<Entry<String, Collection>> entries = map.entrySet().iterator();

while (entries.hasNext()) {
Map.Entry<String, Collection> entry = (Map.Entry<String, Collection>) entries.next();

dataSource = new JRBeanCollectionDataSource((Collection) entry.getValue(), false);
// MAP KEY VAZIA OU DEFAULT = DATASOURCE DEFAULT
if ("".equals(entry.getKey()) || "default".equalsIgnoreCase(entry.getKey())) {
dataSourceDefault = dataSource;
} else {
dataSource = new JRBeanCollectionDataSource((Collection) entry.getValue(), false);
parametersLocal.put(entry.getKey(), dataSource);
}
}
if (ServicoImpressao.print == null) {
if (parametersLocal == null) {
parametersLocal = new HashMap(1);
}
Locale locale = new Locale("pt", "BR");
parametersLocal.put(JRParameter.REPORT_LOCALE, locale);
ServicoImpressao.print = JasperFillManager.fillReport(stream, parametersLocal, dataSourceDefault);
} else {
JasperPrint jasperPrint_next = JasperFillManager.fillReport(stream, parametersLocal, dataSourceDefault);
List pages = jasperPrint_next.getPages();
for (int j = 0; j < pages.size(); j++) {
JRPrintPage object = (JRPrintPage) pages.get(j);
ServicoImpressao.print.addPage(object);
}
}

} catch (Exception e) {
LOGGER.error("ERRO AO GERAR RELATORIO", e);
throw e;
}
}

public Integer getNumeroPaginas() {
return ServicoImpressao.print.getPages().size();
}

public void imprime() {
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
try {
response.reset();
response.setContentType("application/pdf");
java.io.OutputStream outputStream = null;
outputStream = response.getOutputStream();
outputStream.write(JasperExportManager.exportReportToPdf(print));
outputStream.close();
} catch (IOException | JRException e) {
e.printStackTrace();
} finally {
ServicoImpressao.print = null;
}
facesContext.responseComplete();
}
}

Chamador:

try {
Map<String,Collection> mapJasper = new HashMap<String,Collection>();

mapJasper.put("", relatorioOut.getGrupos());
mapJasper.put("SUB_REPORT", relatorioOut.getGruposReajustes());

impressao.generateReport(mapJasper, parameters, nomeJasper);
impressao.imprime();

} catch (Exception e) {
LOGGER.error(e, e);
}



Nenhum comentário:

Postar um comentário