// Path: src/main/java/com/github/marcelothebuilder/webpedidos/util/report/EmissorRelatorio.java
// public interface EmissorRelatorio {
// 
// 	void setConnection(Connection connection);
// 
// 	void emitir() throws IOException, JRException;
// 
// 	boolean isRelatorioGerado();
// 
// }
// 
// Path: src/main/java/com/github/marcelothebuilder/webpedidos/util/report/ExecutorRelatorio.java
// public interface ExecutorRelatorio {
// 
// 	void emite();
// 
// 	void setEmissor(EmissorRelatorio emissor);
// 
// }
// 
// Path: src/main/java/com/github/marcelothebuilder/webpedidos/util/report/Relatorio.java
// public interface Relatorio {
// 
// 	Map<String, Object> getParametros();
// 
// 	RelatorioFile getArquivo();
// }
// 
// Path: src/main/java/com/github/marcelothebuilder/webpedidos/util/report/impl/EmissorRelatorioServlet.java
// public final class EmissorRelatorioServlet implements EmissorRelatorio {
// 	private Relatorio relatorio;
// 	private Connection connection;
// 	private HttpServletResponse servletResponse;
// 	private boolean relatorioGerado = false;
// 
// 	public EmissorRelatorioServlet(Relatorio relatorio, HttpServletResponse servletResponse) {
// 		this.relatorio = relatorio;
// 		this.servletResponse = servletResponse;
// 	}
// 
// 	public EmissorRelatorioServlet(Relatorio relatorio, HttpServletResponse output, Connection connection) {
// 		this(relatorio, output);
// 		this.connection = connection;
// 	}
// 
// 	/* (non-Javadoc)
// 	 * @see com.github.marcelothebuilder.webpedidos.util.report.impl.EmissorRelatorio#setConnection(java.sql.Connection)
// 	 */
// 	@Override
// 	public void setConnection(Connection connection) {
// 		this.connection = connection;
// 	}
// 
// 	/* (non-Javadoc)
// 	 * @see com.github.marcelothebuilder.webpedidos.util.report.impl.EmissorRelatorio#emitir()
// 	 */
// 	@Override
// 	public void emitir() throws JRException {
// 		try (InputStream relatorioArquivoStream = this.getClass().getResourceAsStream(relatorio.getArquivo().getCaminho())) {
// 			JasperPrint print = JasperFillManager.fillReport(relatorioArquivoStream, relatorio.getParametros(), connection);
// 			this.relatorioGerado = print.getPages().size() > 0;
// 			
// 			if(this.isRelatorioGerado()) {
// 				String attachment = String.format("attachment; filename=\"%s.pdf\"", relatorio.getArquivo().getNome());
// 				servletResponse.setHeader("Content-Disposition", attachment);
// 				JasperExportManager.exportReportToPdfStream(print, servletResponse.getOutputStream());		
// 			}
// 		} catch (IOException e) {
// 			throw new RelatorioNaoExisteException(relatorio, e);
// 		}
// 	}
// 
// 	/* (non-Javadoc)
// 	 * @see com.github.marcelothebuilder.webpedidos.util.report.impl.EmissorRelatorio#isRelatorioGerado()
// 	 */
// 	@Override
// 	public boolean isRelatorioGerado() {
// 		return this.relatorioGerado;
// 	}
// 
// }
// 
// Path: src/main/java/com/github/marcelothebuilder/webpedidos/util/report/impl/RelatorioPedidosEmitidos.java
// public final class RelatorioPedidosEmitidos extends RelatorioPedidos {
// 	public RelatorioPedidosEmitidos(Date dataInicio, Date dataFim) {
// 		super(dataInicio, dataFim, RelatorioUtils.localizaRelatorio("relatorio_pedidos_emitidos"));
// 	}
// }


import java.io.IOException;
import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
import javax.enterprise.context.RequestScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;
import org.joda.time.Days;
import org.joda.time.LocalDate;
import com.github.marcelothebuilder.webpedidos.util.report.EmissorRelatorio;
import com.github.marcelothebuilder.webpedidos.util.report.ExecutorRelatorio;
import com.github.marcelothebuilder.webpedidos.util.report.Relatorio;
import com.github.marcelothebuilder.webpedidos.util.report.impl.EmissorRelatorioServlet;
import com.github.marcelothebuilder.webpedidos.util.report.impl.RelatorioPedidosEmitidos;
/**
 * 
 */
package com.github.marcelothebuilder.webpedidos.controller;





/**
 * Este bean é responsável pela emissão de relatórios dos pedidos emitidos.
 * Fornece limitações de data e exporta o relatório para o navegador
 * diretamente, validando erros de entrada do usuário.
 * 
 * @author Marcelo Paixao Resende
 *
 */
@Named
@RequestScoped
public class RelatorioPedidosEmitidosBean implements Serializable {
	private static final long serialVersionUID = 1L;

	private @Inject HttpServletResponse response;
	private @Inject FacesContext fContext;
// Path: src/main/java/com/github/marcelothebuilder/webpedidos/util/report/EmissorRelatorio.java
// public interface EmissorRelatorio {
// 
// 	void setConnection(Connection connection);
// 
// 	void emitir() throws IOException, JRException;
// 
// 	boolean isRelatorioGerado();
// 
// }
// 
// Path: src/main/java/com/github/marcelothebuilder/webpedidos/util/report/ExecutorRelatorio.java
// public interface ExecutorRelatorio {
// 
// 	void emite();
// 
// 	void setEmissor(EmissorRelatorio emissor);
// 
// }
// 
// Path: src/main/java/com/github/marcelothebuilder/webpedidos/util/report/Relatorio.java
// public interface Relatorio {
// 
// 	Map<String, Object> getParametros();
// 
// 	RelatorioFile getArquivo();
// }
// 
// Path: src/main/java/com/github/marcelothebuilder/webpedidos/util/report/impl/EmissorRelatorioServlet.java
// public final class EmissorRelatorioServlet implements EmissorRelatorio {
// 	private Relatorio relatorio;
// 	private Connection connection;
// 	private HttpServletResponse servletResponse;
// 	private boolean relatorioGerado = false;
// 
// 	public EmissorRelatorioServlet(Relatorio relatorio, HttpServletResponse servletResponse) {
// 		this.relatorio = relatorio;
// 		this.servletResponse = servletResponse;
// 	}
// 
// 	public EmissorRelatorioServlet(Relatorio relatorio, HttpServletResponse output, Connection connection) {
// 		this(relatorio, output);
// 		this.connection = connection;
// 	}
// 
// 	/* (non-Javadoc)
// 	 * @see com.github.marcelothebuilder.webpedidos.util.report.impl.EmissorRelatorio#setConnection(java.sql.Connection)
// 	 */
// 	@Override
// 	public void setConnection(Connection connection) {
// 		this.connection = connection;
// 	}
// 
// 	/* (non-Javadoc)
// 	 * @see com.github.marcelothebuilder.webpedidos.util.report.impl.EmissorRelatorio#emitir()
// 	 */
// 	@Override
// 	public void emitir() throws JRException {
// 		try (InputStream relatorioArquivoStream = this.getClass().getResourceAsStream(relatorio.getArquivo().getCaminho())) {
// 			JasperPrint print = JasperFillManager.fillReport(relatorioArquivoStream, relatorio.getParametros(), connection);
// 			this.relatorioGerado = print.getPages().size() > 0;
// 			
// 			if(this.isRelatorioGerado()) {
// 				String attachment = String.format("attachment; filename=\"%s.pdf\"", relatorio.getArquivo().getNome());
// 				servletResponse.setHeader("Content-Disposition", attachment);
// 				JasperExportManager.exportReportToPdfStream(print, servletResponse.getOutputStream());		
// 			}
// 		} catch (IOException e) {
// 			throw new RelatorioNaoExisteException(relatorio, e);
// 		}
// 	}
// 
// 	/* (non-Javadoc)
// 	 * @see com.github.marcelothebuilder.webpedidos.util.report.impl.EmissorRelatorio#isRelatorioGerado()
// 	 */
// 	@Override
// 	public boolean isRelatorioGerado() {
// 		return this.relatorioGerado;
// 	}
// 
// }
// 
// Path: src/main/java/com/github/marcelothebuilder/webpedidos/util/report/impl/RelatorioPedidosEmitidos.java
// public final class RelatorioPedidosEmitidos extends RelatorioPedidos {
// 	public RelatorioPedidosEmitidos(Date dataInicio, Date dataFim) {
// 		super(dataInicio, dataFim, RelatorioUtils.localizaRelatorio("relatorio_pedidos_emitidos"));
// 	}
// }


// Path: src/main/java/com/github/marcelothebuilder/webpedidos/controller/RelatorioPedidosEmitidosBean.java
import java.io.IOException;
import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
import javax.enterprise.context.RequestScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;
import org.joda.time.Days;
import org.joda.time.LocalDate;
import com.github.marcelothebuilder.webpedidos.util.report.EmissorRelatorio;
import com.github.marcelothebuilder.webpedidos.util.report.ExecutorRelatorio;
import com.github.marcelothebuilder.webpedidos.util.report.Relatorio;
import com.github.marcelothebuilder.webpedidos.util.report.impl.EmissorRelatorioServlet;
import com.github.marcelothebuilder.webpedidos.util.report.impl.RelatorioPedidosEmitidos;

/**
 * 
 */
package com.github.marcelothebuilder.webpedidos.controller;





/**
 * Este bean é responsável pela emissão de relatórios dos pedidos emitidos.
 * Fornece limitações de data e exporta o relatório para o navegador
 * diretamente, validando erros de entrada do usuário.
 * 
 * @author Marcelo Paixao Resende
 *
 */
@Named
@RequestScoped
public class RelatorioPedidosEmitidosBean implements Serializable {
	private static final long serialVersionUID = 1L;

	private @Inject HttpServletResponse response;
	private @Inject FacesContext fContext;
	private @Inject ExecutorRelatorio executor;