Package br.com.caelum.vraptor.jasperreports.exporter

Source Code of br.com.caelum.vraptor.jasperreports.exporter.DefaultExporter

package br.com.caelum.vraptor.jasperreports.exporter;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpSession;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.j2ee.servlets.ImageServlet;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.jasperreports.Report;
import br.com.caelum.vraptor.jasperreports.ReportLoader;
import br.com.caelum.vraptor.jasperreports.decorator.ReportDecorator;
import br.com.caelum.vraptor.jasperreports.formats.ExportFormat;
import br.com.caelum.vraptor.jasperreports.formats.Html;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;

/**
* Export a report into a specific format
*
* @author William Pivotto
*
*/

@Component
public class DefaultExporter implements ReportExporter {

  private Collection<Report> reports = Lists.newArrayList();
  private final ReportLoader loader;
  private final List<ReportDecorator> decorators;
  private final HttpSession session;
  private final Logger logger = LoggerFactory.getLogger(DefaultExporter.class);

  public DefaultExporter(ReportLoader loader, List<ReportDecorator> decorators, HttpSession session) {
    this.loader = loader;
    this.decorators = decorators;
    this.session = session;
  }

  public ReportExporter export(Report report) {
    this.reports.add(report);
    return this;
  }

  public ReportExporter export(Collection<Report> reports) {
    this.reports = reports;
    return this;
  }

  public byte[] to(ExportFormat format) {

    try {

      List<JasperPrint> print = fillAll(format);
      return format.toByteArray(print);

    } catch (JRException e) {
      throw new RuntimeException(e);
    }
  }

  private List<JasperPrint> fillAll(ExportFormat format) throws JRException {

    List<JasperPrint> printList = new ArrayList<JasperPrint>();

    for (Report report : reports) {
      printList.add(fill(report));
    }

    configImageServlet(format, printList.get(0));

    return printList;

  }

  private JasperPrint fill(Report report) throws JRException {

    for (ReportDecorator decorator : decorators) {
      decorator.decorate(report);
    }

    JasperReport jr = loader.load(report);
    JRBeanCollectionDataSource data = new JRBeanCollectionDataSource(report.getData(), false);

    Map<String, Object> parameters = report.getParameters();

    if (parameters == null) {
      parameters = Maps.newHashMap();
      logger.warn("You are willing to generate a report, but there is no valid parameters");
    }

    JasperPrint print = JasperFillManager.fillReport(jr, parameters, data);

    return print;

  }

  private void configImageServlet(ExportFormat format, JasperPrint print) {
    if (format.getClass().equals(Html.class) && print != null)
      session.setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, print);
  }

}
TOP

Related Classes of br.com.caelum.vraptor.jasperreports.exporter.DefaultExporter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.