Package br.com.caelum.vraptor.jasperreports.download

Source Code of br.com.caelum.vraptor.jasperreports.download.ReportDownloadInterceptor

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

import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.http.HttpServletResponse;

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

import br.com.caelum.vraptor.InterceptionException;
import br.com.caelum.vraptor.Intercepts;
import br.com.caelum.vraptor.Lazy;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.core.InterceptorStack;
import br.com.caelum.vraptor.core.MethodInfo;
import br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor;
import br.com.caelum.vraptor.interceptor.ForwardToDefaultViewInterceptor;
import br.com.caelum.vraptor.interceptor.Interceptor;
import br.com.caelum.vraptor.jasperreports.Report;
import br.com.caelum.vraptor.jasperreports.ReportFormatResolver;
import br.com.caelum.vraptor.jasperreports.exporter.ReportExporter;
import br.com.caelum.vraptor.resource.ResourceMethod;

@Intercepts(after = ExecuteMethodInterceptor.class, before = ForwardToDefaultViewInterceptor.class)
@Lazy
public class ReportDownloadInterceptor implements Interceptor {

  private final ReportExporter exporter;
  private final HttpServletResponse response;
  private final ReportFormatResolver resolver;
  private final MethodInfo methodInfo;
  private final Result result;
  private final Logger logger = LoggerFactory.getLogger(getClass());

  public ReportDownloadInterceptor(ReportExporter exporter,
      HttpServletResponse response, ReportFormatResolver resolver,
      MethodInfo methodInfo, Result result) {
    this.exporter = exporter;
    this.response = response;
    this.resolver = resolver;
    this.methodInfo = methodInfo;
    this.result = result;
  }

  public boolean accepts(ResourceMethod method) {
    return Report.class.isAssignableFrom(method.getMethod().getReturnType());
  }

  public void intercept(InterceptorStack stack, ResourceMethod method, Object instance) throws InterceptionException {

    Report report = (Report) methodInfo.getResult();

    if (report == null) {
      if (result.used()) {
        stack.next(method, instance);
        return;
      } else
        throw new NullPointerException("You've just returned a Null Report. Consider redirecting to another page/logic");
    }

    ReportDownload download = new ReportDownload(report, resolver.getExportFormat(), resolver.doDownload());
    download.setExporter(exporter);
    logger.debug("Injecting {} in {}", exporter.getClass().getName(), download.getClass().getName());

    try {

      OutputStream output = response.getOutputStream();
      download.write(response);

      output.flush();
      output.close();

    } catch (IOException e) {
      throw new InterceptionException(e);
    }

  }

}
TOP

Related Classes of br.com.caelum.vraptor.jasperreports.download.ReportDownloadInterceptor

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.