package gcom.micromedicao;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.util.IoUtil;
import gcom.util.filtro.ParametroSimples;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Collection;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
Descri��o da classe
*
* @author Hugo Leonardo
* @date 05/06/2010
*/
public class RetornarArquivoTxtLeituraDivisaoAction extends GcomAction {
/**
* Este caso de uso permite Retornar um Arquivo Txt Leitura Divis�o
*
* UC1027 - Exibir Consultar Arquivo Texto Leitura Divis�o.
*
* @author Hugo Leonardo
* @created 04/06/2010
*
* @param actionMapping
* @param actionForm
* @param httpServletRequest
* @param httpServletResponse
* @return
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = null;
String idArquivoTxtDivisao = httpServletRequest
.getParameter("idRegistroAtualizacao");
FiltroArquivoTextoRoteiroEmpresaDivisao filtroArquivoTextoRoteiroEmpresaDivisao =
new FiltroArquivoTextoRoteiroEmpresaDivisao();
filtroArquivoTextoRoteiroEmpresaDivisao.adicionarParametro(new ParametroSimples(
FiltroArquivoTextoRoteiroEmpresaDivisao.ID, idArquivoTxtDivisao));
Fachada fachada = Fachada.getInstancia();
Collection colecaoArquivoTxtLeituraDivisao = fachada.pesquisar(filtroArquivoTextoRoteiroEmpresaDivisao,
ArquivoTextoRoteiroEmpresaDivisao.class.getName());
ArquivoTextoRoteiroEmpresaDivisao arquivoTextoRoteiroEmpresaDivisao = (ArquivoTextoRoteiroEmpresaDivisao)
colecaoArquivoTxtLeituraDivisao.iterator().next();
if(arquivoTextoRoteiroEmpresaDivisao.getSituacaoTransmissaoLeitura().getId()
.equals(SituacaoTransmissaoLeitura.LIBERADO)){
try {
boolean ehgz = arquivoTextoRoteiroEmpresaDivisao.getNomeArquivo().toUpperCase().endsWith(".GZ");
if(!ehgz){
File temporario = File.createTempFile("temporario", ".txt");
FileOutputStream outputStream = new FileOutputStream(temporario);
try {
outputStream.write((
(StringBuilder) IoUtil.transformarBytesParaObjeto(
arquivoTextoRoteiroEmpresaDivisao.getArquivoTexto())).toString().getBytes());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
outputStream.close();
FileInputStream inputStream = new FileInputStream(temporario);
int INPUT_BUFFER_SIZE = 1024;
byte[] temp = new byte[INPUT_BUFFER_SIZE];
int numBytesRead = 0;
ByteArrayOutputStream arquivo = new ByteArrayOutputStream();
while ((numBytesRead = inputStream.read(temp, 0, INPUT_BUFFER_SIZE)) != -1) {
arquivo.write(temp, 0, numBytesRead);
}
inputStream.close();
inputStream = null;
arquivo.close();
httpServletResponse.setContentType("text/plain");
httpServletResponse.addHeader("Content-Disposition",
"attachment; filename="+arquivoTextoRoteiroEmpresaDivisao.getNomeArquivo());
ServletOutputStream out;
out = httpServletResponse.getOutputStream();
out.write(arquivo.toByteArray());
out.flush();
out.close();
}else{
httpServletResponse.setContentType("application/zip");
httpServletResponse.addHeader("Content-Disposition",
"attachment; filename="+ arquivoTextoRoteiroEmpresaDivisao.getNomeArquivo() );
ServletOutputStream out;
out = httpServletResponse.getOutputStream();
out.write( arquivoTextoRoteiroEmpresaDivisao.getArquivoTexto() );
out.flush();
out.close();
}
//Atualizar Situacao do Arquivo Divis�o
fachada.atualizarArquivoTextoDivisaoEnviado(arquivoTextoRoteiroEmpresaDivisao.getId(),SituacaoTransmissaoLeitura.EM_CAMPO);
} catch (IOException e) {
reportarErros(httpServletRequest, "erro.sistema");
}
}else{
throw new ActionServletException("atencao.arquivo_divisao_nao_pode_baixar");
}
return retorno;
}
}