package gcom.gui.cadastro;
import gcom.cadastro.ArquivoTextoAtualizacaoCadastral;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.micromedicao.SituacaoTransmissaoLeitura;
import gcom.util.IoUtil;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
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;
/**
* Consultar Arquivo Texto da Atualiza��o Cadastral
*
* @author Ana Maria
* @date 02/03/2009
*/
public class RetornarArquivoTxtAtualizacaoCadastralAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = null;
String idArquivoTxt = httpServletRequest
.getParameter("idRegistroAtualizacao");
Fachada fachada = Fachada.getInstancia();
ArquivoTextoAtualizacaoCadastral arquivoTexto = fachada.pesquisarArquivoTextoAtualizacaoCadastro(Integer.parseInt(idArquivoTxt));
if(!arquivoTexto.getSituacaoTransmissaoLeitura().getId().equals(SituacaoTransmissaoLeitura.DISPONIVEL) &&
!arquivoTexto.getSituacaoTransmissaoLeitura().getId().equals(SituacaoTransmissaoLeitura.TRANSMITIDO)){
try {
File temporario = File.createTempFile("temporario", ".txt");
FileOutputStream outputStream = new FileOutputStream(temporario);
outputStream.write(((StringBuilder) IoUtil
.transformarBytesParaObjeto(arquivoTexto
.getArquivoTexto())).toString().getBytes());
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="+arquivoTexto.getDescricaoArquivo()+".txt");
ServletOutputStream out;
out = httpServletResponse.getOutputStream();
out.write(arquivo.toByteArray());
out.flush();
out.close();
// Apaga todo o conte�do gerado
temporario.delete();
//Atualizar Situacao do Arquivo
fachada.atualizarArquivoTextoAtualizacaoCadstral(arquivoTexto.getId());
} catch (IOException e) {
reportarErros(httpServletRequest, "erro.sistema");
} catch (ClassNotFoundException e) {
reportarErros(httpServletRequest, "erro.sistema");
}
}else{
throw new ActionServletException("atencao.nao_baixar_arquivo_txt_atualizacao_cadastral");
}
return retorno;
}
}