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.tarefa.TarefaException; import gcom.util.IoUtil; import gcom.util.ZipUtil; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Collection; import java.util.Date; import java.util.zip.ZipOutputStream; 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 COSANPA - Felipe Santos * @date 04/12/2013 */ public class RetornarZipArquivoTxtAtualizacaoCadastralAction extends GcomAction { public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { ActionForward retorno = null; ConsultarArquivoTextoAtualizacaoCadastralActionForm form = (ConsultarArquivoTextoAtualizacaoCadastralActionForm) actionForm; String[] idsArquivoTxt = form.getIdsRegistros(); Fachada fachada = Fachada.getInstancia(); ZipOutputStream zip = null; Collection<ArquivoTextoAtualizacaoCadastral> colecaoArquivoTexto = fachada.pesquisarArquivoTextoAtualizacaoCadastro( idsArquivoTxt); if (colecaoArquivoTexto != null && !colecaoArquivoTexto.isEmpty()) { try { String nomeArquivoZIP = this.gerarNomeArquivoZIP(form.getIdLocalidade()); File arquivoZIP = new File(nomeArquivoZIP); zip = new ZipOutputStream(new FileOutputStream(arquivoZIP)); for (ArquivoTextoAtualizacaoCadastral arquivoTexto : colecaoArquivoTexto) { if(!arquivoTexto.getSituacaoTransmissaoLeitura().getId().equals( SituacaoTransmissaoLeitura.DISPONIVEL) && !arquivoTexto.getSituacaoTransmissaoLeitura().getId().equals( SituacaoTransmissaoLeitura.TRANSMITIDO)) { this.adicionarArquivoTexto(zip, arquivoTexto); fachada.atualizarArquivoTextoAtualizacaoCadstral(arquivoTexto.getId()); } else { throw new ActionServletException("atencao.nao_baixar_arquivo_txt_atualizacao_cadastral"); } } this.enviarArquivoZIP(httpServletResponse, zip, nomeArquivoZIP, arquivoZIP); } catch (IOException e) { e.printStackTrace(); throw new TarefaException("Erro ao gerar o arquivo zip", e); } catch (ClassNotFoundException e) { e.printStackTrace(); throw new TarefaException("Erro ao gerar o arquivo txt", e); } try { zip.close(); } catch (IOException e) { e.printStackTrace(); throw new TarefaException("Erro ao fechar o arquivo zip", e); } } return retorno; } private void enviarArquivoZIP(HttpServletResponse httpServletResponse, ZipOutputStream zip, String nomeArquivoZIP, File arquivoZIP) throws IOException { zip.flush(); zip.close(); httpServletResponse.setContentType("application/zip"); httpServletResponse.addHeader("Content-Disposition", "attachment; filename="+nomeArquivoZIP + ".zip"); ServletOutputStream sos = httpServletResponse.getOutputStream(); sos.write(IoUtil.getBytesFromFile(arquivoZIP)); sos.flush(); sos.close(); arquivoZIP.delete(); } private void adicionarArquivoTexto(ZipOutputStream zip, ArquivoTextoAtualizacaoCadastral arquivoTexto) throws FileNotFoundException, IOException, ClassNotFoundException { File arquivoTxtTemp = new File(arquivoTexto.getDescricaoArquivo() + ".txt"); FileOutputStream outputStream = new FileOutputStream(arquivoTxtTemp); outputStream.write(((StringBuilder) IoUtil.transformarBytesParaObjeto( arquivoTexto.getArquivoTexto())).toString().getBytes()); outputStream.close(); ZipUtil.adicionarArquivo(zip, arquivoTxtTemp); arquivoTxtTemp.delete(); zip.closeEntry(); } private String gerarNomeArquivoZIP(String idLocalidade) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); String data = formatter.format(new Date()); String nomeArquivoZIP = "Rotas_Cadastro"; if (idLocalidade != null && !idLocalidade.trim().equals("")) { nomeArquivoZIP += "_L" + idLocalidade; } nomeArquivoZIP += "_" + data; return nomeArquivoZIP; } }