package br.com.centralit.citcorpore.ajaxForms; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.lang.StringEscapeUtils; import br.com.centralit.bpm.config.Config; import br.com.centralit.bpm.config.Design; import br.com.centralit.bpm.dto.ElementoFluxoDTO; import br.com.centralit.bpm.dto.FluxoDTO; import br.com.centralit.bpm.dto.SequenciaFluxoDTO; import br.com.centralit.bpm.servico.FluxoService; import br.com.centralit.citajax.html.AjaxFormAction; import br.com.centralit.citajax.html.DocumentHTML; import br.com.centralit.citajax.html.HTMLForm; import br.com.centralit.citquestionario.util.Upload; import br.com.citframework.excecao.ServiceException; import br.com.citframework.service.ServiceLocator; import br.com.citframework.util.Constantes; import br.com.citframework.util.UtilI18N; import br.com.citframework.util.UtilStrings; import br.com.citframework.util.UtilTratamentoArquivos; import br.com.citframework.util.WebUtil; import com.google.gson.Gson; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; public class DesenhoFluxo extends AjaxFormAction { @Override public Class<FluxoDTO> getBeanClass() { return FluxoDTO.class; } @Override public void load(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception { try{ Design render = Config.getRender(); String elementosStr = new Gson().toJson(render.getElementos()); elementosStr = elementosStr.replaceAll("\n", " "); elementosStr = elementosStr.replaceAll("\r", " "); elementosStr = elementosStr.replaceAll("\\\\n", " "); carregaFluxos(request, document); document.executeScript("exibirElementos('"+elementosStr+"');"); FluxoDTO fluxoDto = (FluxoDTO) document.getBean(); Upload upload = new Upload(); HashMap hshRetorno[] = null; try{ hshRetorno = upload.doUploadAll(request); }catch (Exception e) { } if (hshRetorno != null){ Collection fileItems = hshRetorno[1].values(); HashMap formItems = hshRetorno[0]; String acao = (String) formItems.get("ACAO"); if (acao != null && acao.equalsIgnoreCase("I")){ importaFluxo(fileItems, document, request); }else{ carregaFluxos(request, document); } }else{ carregaFluxos(request, document); } }finally{ document.executeScript("JANELA_AGUARDE_MENU.hide()"); } } private void carregaFluxos(HttpServletRequest request, DocumentHTML document) throws Exception { FluxoDTO fluxoDto = (FluxoDTO) document.getBean(); FluxoService fluxoService = (FluxoService) ServiceLocator.getInstance().getService(FluxoService.class, null); Collection<FluxoDTO> colFluxos = fluxoService.list(); String str = ""; int i = 0; int linhaAtual = 0; if (colFluxos != null) { str = "<table width='100%' class='table table-bordered table-condensed'"; str += "<tr><th class='th' style='text-align:center'>Fluxos</th></tr>"; for (FluxoDTO fluxoAuxDto : colFluxos) { i++; if (fluxoDto.getIdFluxo() != null && fluxoAuxDto.getIdFluxo().intValue() == fluxoDto.getIdFluxo().intValue()) linhaAtual = i; str += "<tr class='tr' id='tr"+i+"'>"; str += "<td class='td' style='cursor: pointer;' title='"+UtilI18N.internacionaliza(request, "desenhoFluxo.msg.editarDesenho")+"' onclick='exibeElementosFluxo("+i+","+fluxoAuxDto.getIdFluxo()+")' ><img src='imagens/fluxo.png'> "+fluxoAuxDto.getDescricao()+"</td>"; str += "</tr>"; } str += "</table>"; } document.getElementById("divFluxos").setInnerHTML(str); if (linhaAtual > 0) { fluxoDto.setLinhaAtual(""+linhaAtual); HTMLForm form = document.getForm("form"); form.setValues(fluxoDto); } } public void exibeElementosFluxo(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception { try{ FluxoDTO fluxoDto = (FluxoDTO) document.getBean(); if (fluxoDto.getIdFluxo() == null) { document.executeScript("desenhoFluxo.limpa()"); return; } FluxoService fluxoService = (FluxoService) ServiceLocator.getInstance().getService(FluxoService.class, null); /** Chamada do m�todo espec�fico que recupera o fluxo com os elementos. Opera��o Usain Bolt - 27.01.2015 - carlos.santos */ fluxoDto = (FluxoDTO) fluxoService.restoreComEstrutura(fluxoDto); exibeElementos(document, fluxoDto); }finally{ document.executeScript("JANELA_AGUARDE_MENU.hide()"); } document.executeScript("desenhoFluxo.resetScroll()"); } private void exibeElementos(DocumentHTML document, FluxoDTO fluxoDto) throws Exception { if (fluxoDto != null && fluxoDto.getColElementos() != null) { for (ElementoFluxoDTO elementoDto : fluxoDto.getColElementos()) { ElementoFluxoDTO elementoDesignDto = Config.getRender().getElemento(elementoDto.getTipoElemento()); elementoDto.setBorda(elementoDesignDto.getBorda()); elementoDto.setAjustavel(elementoDesignDto.getAjustavel()); elementoDto.setLabel(elementoDesignDto.getLabel()); elementoDto.setIcone(elementoDesignDto.getIcone()); elementoDto.setImagem(elementoDesignDto.getImagem()); elementoDto.setLarguraPadrao(elementoDesignDto.getLarguraPadrao()); elementoDto.setAlturaPadrao(elementoDesignDto.getAlturaPadrao()); elementoDto.setPropriedades(elementoDesignDto.getPropriedades()); if (elementoDto.getTipoInteracao() != null) { if (elementoDto.getTipoInteracao().equalsIgnoreCase("U")) elementoDto.setInteracao(elementoDto.getUrl()); else elementoDto.setInteracao(elementoDto.getVisao()); } elementoDto.setPropriedades_serializadas(new Gson().toJson(elementoDto.getPropriedades())); } String elementos_serializados = WebUtil.serializeObjects(fluxoDto.getColElementos(), document.getLanguage()); String sequencias_serializadas = WebUtil.serializeObjects(fluxoDto.getColSequenciamentos(), document.getLanguage()); fluxoDto.setElementos_serializados(elementos_serializados); fluxoDto.setSequencias_serializadas(sequencias_serializadas); document.executeScript("desenhoFluxo.renderizaElementos('"+StringEscapeUtils.escapeJavaScript(elementos_serializados)+"','"+sequencias_serializadas+"');"); document.executeScript("redimensionaAreaDesenho()"); }else{ document.executeScript("desenhoFluxo.resetaLista();"); document.executeScript("desenhoFluxo.limpa()"); } if (fluxoDto != null) document.executeScript("controlarExibicaoBotoes('block');"); } public void atualizaDiagrama(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception { try{ FluxoDTO fluxoDto = (FluxoDTO) document.getBean(); if (fluxoDto.getIdFluxo() == null) return; FluxoService fluxoService = (FluxoService) ServiceLocator.getInstance().getService(FluxoService.class, null); /** Chamada do m�todo espec�fico que recupera o fluxo com os elementos. Opera��o Usain Bolt - 27.01.2015 - carlos.santos */ fluxoDto = (FluxoDTO) fluxoService.restoreComEstrutura(fluxoDto); fluxoDto.setColElementos((List) WebUtil.deserializeCollectionFromRequest(ElementoFluxoDTO.class,"elementos_serializados", request)); fluxoDto.setColSequenciamentos((List) WebUtil.deserializeCollectionFromRequest(SequenciaFluxoDTO.class,"sequencias_serializadas", request)); fluxoDto = fluxoService.criaEstrutura(fluxoDto); document.alert(UtilI18N.internacionaliza(request, "desenhoFluxo.msg.diagramaAtualizado")); document.executeScript("atualizar("+fluxoDto.getIdFluxo()+");"); }finally{ document.executeScript("JANELA_AGUARDE_MENU.hide()"); } } private FluxoService getFluxoService() throws ServiceException, Exception { return (FluxoService) ServiceLocator.getInstance().getService(FluxoService.class, null); } public void gravaCadastroFluxo(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception { FluxoDTO fluxoDto = (FluxoDTO) document.getBean(); try{ String variaveis = fluxoDto.getVariaveis(); variaveis = variaveis.replaceAll("\n", ";"); fluxoDto.setVariaveis(variaveis); if (fluxoDto.getIdFluxo() == null || fluxoDto.getIdFluxo().intValue() == 0) { if (fluxoDto.getAcao() != null && fluxoDto.getAcao().equalsIgnoreCase("I")) { fluxoDto.setColElementos((List) WebUtil.deserializeCollectionFromRequest(ElementoFluxoDTO.class,"elementos_serializados", request)); fluxoDto.setColSequenciamentos((List) WebUtil.deserializeCollectionFromRequest(SequenciaFluxoDTO.class,"sequencias_serializadas", request)); fluxoDto = getFluxoService().criaFluxoEEstrutura(fluxoDto); }else{ fluxoDto = (FluxoDTO) getFluxoService().create(fluxoDto); } document.alert(UtilI18N.internacionaliza(request, "desenhoFluxo.msg.fluxoIncluido")); HTMLForm form = document.getForm("form"); form.setValues(fluxoDto); } else { getFluxoService().update(fluxoDto); document.alert(UtilI18N.internacionaliza(request, "desenhoFluxo.msg.fluxoAtualizado")); } }finally{ document.executeScript("$(\"#POPUP_FLUXO\").dialog(\"close\")"); document.executeScript("atualizar("+fluxoDto.getIdFluxo()+");"); } } public void recuperaCadastroFluxo(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception { try{ FluxoDTO fluxoDto = (FluxoDTO) document.getBean(); fluxoDto = (FluxoDTO) getFluxoService().restore(fluxoDto); if (fluxoDto.getDataFim() != null) fluxoDto = getFluxoService().findByTipoFluxo(fluxoDto.getIdTipoFluxo()); if (fluxoDto != null) { if (fluxoDto.getVariaveis() != null) { String variaveis = fluxoDto.getVariaveis(); variaveis = variaveis.replaceAll(";", "\n"); fluxoDto.setVariaveis(variaveis); } HTMLForm form = document.getForm("form"); form.setValues(fluxoDto); } }finally{ document.executeScript("JANELA_AGUARDE_MENU.hide()"); } } public void excluiCadastroFluxo(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception { try{ FluxoDTO fluxoDto = (FluxoDTO) document.getBean(); if (fluxoDto.getIdFluxo() == null || fluxoDto.getIdFluxo().intValue() == 0) return; getFluxoService().delete(fluxoDto); document.alert(UtilI18N.internacionaliza(request, "desenhoFluxo.msg.fluxoExcluido")); document.executeScript("parent.atualizar('');"); }finally{ document.executeScript("JANELA_AGUARDE_MENU.hide()"); } } public void exportaFluxo(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception { try{ FluxoDTO fluxoDto = (FluxoDTO) document.getBean(); if (fluxoDto.getIdFluxo() == null) return; FluxoService fluxoService = (FluxoService) ServiceLocator.getInstance().getService(FluxoService.class, null); /** Chamada do m�todo espec�fico que recupera o fluxo com os elementos. Opera��o Usain Bolt - 27.01.2015 - carlos.santos */ fluxoDto = (FluxoDTO) fluxoService.restoreComEstrutura(fluxoDto); if (fluxoDto == null) return; if (fluxoDto.getColElementos() != null) { for (ElementoFluxoDTO elementoDto : fluxoDto.getColElementos()) { ElementoFluxoDTO elementoDesignDto = Config.getRender().getElemento(elementoDto.getTipoElemento()); elementoDto.setBorda(elementoDesignDto.getBorda()); elementoDto.setAjustavel(elementoDesignDto.getAjustavel()); elementoDto.setLabel(elementoDesignDto.getLabel()); elementoDto.setIcone(elementoDesignDto.getIcone()); elementoDto.setImagem(elementoDesignDto.getImagem()); elementoDto.setLarguraPadrao(elementoDesignDto.getLarguraPadrao()); elementoDto.setAlturaPadrao(elementoDesignDto.getAlturaPadrao()); elementoDto.setPropriedades(elementoDesignDto.getPropriedades()); if (elementoDto.getTipoInteracao() != null) { if (elementoDto.getTipoInteracao().equalsIgnoreCase("U")) elementoDto.setInteracao(elementoDto.getUrl()); else elementoDto.setInteracao(elementoDto.getVisao()); } } } fluxoDto.setIdFluxo(null); fluxoDto.setIdTipoFluxo(null); String diretorioExport = request.getSession().getServletContext().getRealPath("/"); String diretorioRelativoExport = Constantes.getValue("SERVER_ADDRESS") + Constantes.getValue("CONTEXTO_APLICACAO") + "/"; diretorioExport = diretorioExport + "exportXML"; diretorioRelativoExport = diretorioRelativoExport + "exportXML"; File f = new File(diretorioExport); if (!f.exists()){ f.mkdirs(); } String name = UtilStrings.generateNomeBusca(fluxoDto.getNomeFluxo()); name = "export_flow_" + name + ".xml"; FileOutputStream fOut = new FileOutputStream(diretorioExport + "/" + name); XStream x = new XStream(new DomDriver("ISO-8859-1")); x.toXML(fluxoDto, fOut); String str = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>"+UtilTratamentoArquivos.getStringTextFromFileTxt(diretorioExport + "/" + name,"ISO-8859-1"); fOut = new FileOutputStream(diretorioExport + "/" + name); //codigo abaixo necess�rio para tratar o encode nos servidores linux BufferedWriter out = null; try { out = new BufferedWriter(new OutputStreamWriter(fOut,"ISO-8859-1")); } catch (Exception e) { out = new BufferedWriter(new OutputStreamWriter(fOut)); e.printStackTrace(); } out.write(str); out.close(); document.executeScript("window.open('" + diretorioRelativoExport + "/" + name + "')"); }finally{ document.executeScript("JANELA_AGUARDE_MENU.hide()"); } } public void importaFluxo(Collection fileItems, DocumentHTML document, HttpServletRequest request) throws Exception{ FluxoDTO fluxoDto = null; FileItem fi; if (!fileItems.isEmpty()){ Iterator it = fileItems.iterator(); File arquivo; while(it.hasNext()){ fi = (FileItem)it.next(); XStream x = new XStream(new DomDriver("ISO-8859-1")); //System.out.println("Dados importados: " + fi.get().toString()); String str = new String(fi.get(), "ISO-8859-1"); if (!str.equals("")){ fluxoDto = (FluxoDTO) x.fromXML(str); } else { document.executeScript("alert('"+ UtilI18N.internacionaliza(request, "desenhoFluxo.alertSelecione")+"')"); document.executeScript("$('#POPUP_IMPORTACAO').dialog('open')"); } } } if (fluxoDto != null) { if (fluxoDto.getVariaveis() != null) { String variaveis = fluxoDto.getVariaveis(); variaveis = variaveis.replaceAll(";", "\n"); fluxoDto.setVariaveis(variaveis); } fluxoDto.setIdFluxo(null); fluxoDto.setDescricao(UtilI18N.internacionaliza(request, "desenhoFluxo.label.novoFluxo")); fluxoDto.setVersao(null); fluxoDto.setAcao("I"); exibeElementos(document, fluxoDto); HTMLForm form = document.getForm("form"); form.setValues(fluxoDto); } } }