package gcom.gui.cadastro.atualizacaocadastralsimplificado;
import gcom.cadastro.atualizacaocadastralsimplificado.AtualizacaoCadastralSimplificadoBinario;
import gcom.cadastro.atualizacaocadastralsimplificado.FiltroAtualizacaoCadastralSimplificadoSimplificadoBinario;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.util.IoUtil;
import gcom.util.Util;
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 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;
/**
*
* Retornar o arquivo texto a partir do BD.
* [UC0969] Importar arquivo de atualiza��o cadastral simplificado
*
*
* @author Samuel Valerio
*
* @date 21/10/2009
*
*
*/
public class RetornarAquivoTxtAtualizacaoCadastralSimplificadoAction extends GcomAction {
@SuppressWarnings("unchecked")
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = null;
String idArquivoTxt = httpServletRequest.getParameter("id");
if (idArquivoTxt == null)
throw new ActionServletException(
"atencao.arquivo_texto_id_deve_ser_informado");
try {
Integer.parseInt(idArquivoTxt);
} catch (NumberFormatException nfe) {
throw new ActionServletException(
"atencao.arquivo_texto_id_deve_ser_numerico", null, idArquivoTxt);
}
Fachada fachada = Fachada.getInstancia();
FiltroAtualizacaoCadastralSimplificadoSimplificadoBinario filtro = new FiltroAtualizacaoCadastralSimplificadoSimplificadoBinario();
filtro.adicionarParametro(new ParametroSimples(FiltroAtualizacaoCadastralSimplificadoSimplificadoBinario.ARQUIVO_ID, idArquivoTxt));
filtro.adicionarCaminhoParaCarregamentoEntidade("arquivo");
AtualizacaoCadastralSimplificadoBinario binario = (AtualizacaoCadastralSimplificadoBinario) Util
.retonarObjetoDeColecao(fachada.pesquisar(filtro,
AtualizacaoCadastralSimplificadoBinario.class.getName()));
if (binario == null)
throw new ActionServletException(
"atencao.arquivo_texto_nao_encontrado_para_o_id_informado", null, idArquivoTxt);
try {
File temporario = File.createTempFile("temporario", ".txt");
FileOutputStream outputStream = new FileOutputStream(temporario);
outputStream.write(((StringBuffer) IoUtil
.transformarBytesParaObjeto(binario.getBinario())).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 arquivoStream = new ByteArrayOutputStream();
while ((numBytesRead = inputStream.read(temp, 0, INPUT_BUFFER_SIZE)) != -1) {
arquivoStream.write(temp, 0, numBytesRead);
}
inputStream.close();
inputStream = null;
arquivoStream.close();
httpServletResponse.setContentType("text/plain");
httpServletResponse.addHeader("Content-Disposition",
"attachment; filename=" + binario.getArquivo().getNome());
ServletOutputStream out;
out = httpServletResponse.getOutputStream();
out.write(arquivoStream.toByteArray());
out.flush();
out.close();
temporario.delete();
} catch (IOException e) {
reportarErros(httpServletRequest, "erro.sistema");
} catch (ClassNotFoundException e) {
reportarErros(httpServletRequest, "erro.sistema");
}
return retorno;
}
}