package br.com.centralit.citcorpore.metainfo.negocio; import java.math.BigDecimal; import java.text.Normalizer; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringEscapeUtils; import org.mozilla.javascript.Context; import org.mozilla.javascript.Scriptable; import br.com.centralit.citcorpore.bean.MatrizVisaoDTO; import br.com.centralit.citcorpore.bean.ValorRecuperadoMatrizDTO; import br.com.centralit.citcorpore.integracao.MatrizVisaoDao; import br.com.centralit.citcorpore.metainfo.bean.CamposObjetoNegocioDTO; import br.com.centralit.citcorpore.metainfo.bean.GrupoVisaoCamposNegocioDTO; import br.com.centralit.citcorpore.metainfo.bean.GrupoVisaoDTO; import br.com.centralit.citcorpore.metainfo.bean.LookupDTO; import br.com.centralit.citcorpore.metainfo.bean.ObjetoNegocioDTO; import br.com.centralit.citcorpore.metainfo.bean.ReturnLookupDTO; import br.com.centralit.citcorpore.metainfo.bean.ScriptsVisaoDTO; import br.com.centralit.citcorpore.metainfo.bean.TableSearchDTO; import br.com.centralit.citcorpore.metainfo.bean.ValorVisaoCamposNegocioDTO; import br.com.centralit.citcorpore.metainfo.bean.VinculoVisaoDTO; import br.com.centralit.citcorpore.metainfo.bean.VisaoDTO; import br.com.centralit.citcorpore.metainfo.bean.VisaoRelacionadaDTO; import br.com.centralit.citcorpore.metainfo.integracao.CamposObjetoNegocioDao; import br.com.centralit.citcorpore.metainfo.integracao.GrupoVisaoCamposNegocioDao; import br.com.centralit.citcorpore.metainfo.integracao.GrupoVisaoDao; import br.com.centralit.citcorpore.metainfo.integracao.LookupDao; import br.com.centralit.citcorpore.metainfo.integracao.ObjetoNegocioDao; import br.com.centralit.citcorpore.metainfo.integracao.ScriptsVisaoDao; import br.com.centralit.citcorpore.metainfo.integracao.ValorVisaoCamposNegocioDao; import br.com.centralit.citcorpore.metainfo.integracao.VinculoVisaoDao; import br.com.centralit.citcorpore.metainfo.integracao.VisaoRelacionadaDao; import br.com.centralit.citcorpore.metainfo.script.ScriptRhinoJSExecute; import br.com.centralit.citcorpore.metainfo.util.MetaUtil; import br.com.centralit.citcorpore.negocio.MatrizVisaoService; import br.com.centralit.citcorpore.util.CITCorporeUtil; import br.com.centralit.citcorpore.util.Enumerados.TipoDate; import br.com.centralit.citcorpore.util.WebUtil; import br.com.citframework.service.CrudServiceImpl; import br.com.citframework.service.ServiceLocator; import br.com.citframework.util.UtilDatas; import br.com.citframework.util.UtilFormatacao; import br.com.citframework.util.UtilI18N; import br.com.citframework.util.UtilStrings; /** * Classe Ejb respons�vel por tratar as consultas de DinamicViews. * */ @SuppressWarnings({ "rawtypes", "unchecked", "unused" }) public class TableSearchServiceEjb extends CrudServiceImpl implements TableSearchService { public static String strSGBDPrincipal = null; private LookupDao dao; protected LookupDao getDao() { if(dao == null) { dao = new LookupDao(); } return dao; } /* * (non-Javadoc) * * @see br.com.centralit.citcorpore.metainfo.negocio.TableSearchService#findItens(br.com.centralit.citcorpore.metainfo.bean.TableSearchDTO, boolean, java.util.HashMap) */ public String findItens(TableSearchDTO parm, boolean tableVinc, Map map, HttpServletRequest request) throws Exception { GrupoVisaoDao grupoVisaoDao = new GrupoVisaoDao(); GrupoVisaoCamposNegocioDao grupoVisaoCamposNegocioDao = new GrupoVisaoCamposNegocioDao(); CamposObjetoNegocioDao camposObjetoNegocioDao = new CamposObjetoNegocioDao(); LookupServiceEjb lookupService = new LookupServiceEjb(); ScriptsVisaoDao scriptsVisaoDao = new ScriptsVisaoDao(); Collection colScripts = scriptsVisaoDao.findByIdVisao(parm.getIdVisao()); HashMap mapScritps = new HashMap(); if (colScripts != null) { for (Iterator it = colScripts.iterator(); it.hasNext();) { ScriptsVisaoDTO scriptsVisaoDTO = (ScriptsVisaoDTO) it.next(); mapScritps.put(scriptsVisaoDTO.getTypeExecute() + "#" + scriptsVisaoDTO.getScryptType().trim(), scriptsVisaoDTO.getScript()); } } Collection colPresentation = new ArrayList(); Collection colCamposApresNeg = new ArrayList(); // Collection colValue = new ArrayList(); Collection colFilter = new ArrayList(); Collection colOrder = new ArrayList(); Collection colGrupos = grupoVisaoDao.findByIdVisaoAtivos(parm.getIdVisao()); int iX = 0; if (colGrupos != null) { for (Iterator it = colGrupos.iterator(); it.hasNext();) { GrupoVisaoDTO grupoVisaoDTO = (GrupoVisaoDTO) it.next(); grupoVisaoDTO.setColCamposVisao(grupoVisaoCamposNegocioDao.findByIdGrupoVisaoAtivos(grupoVisaoDTO.getIdGrupoVisao())); if (grupoVisaoDTO.getColCamposVisao() != null) { for (Iterator it2 = grupoVisaoDTO.getColCamposVisao().iterator(); it2.hasNext();) { GrupoVisaoCamposNegocioDTO grupoVisaoCamposNegocioDTO = (GrupoVisaoCamposNegocioDTO) it2.next(); CamposObjetoNegocioDTO camposObjetoNegocioDTO = new CamposObjetoNegocioDTO(); camposObjetoNegocioDTO.setIdCamposObjetoNegocio(grupoVisaoCamposNegocioDTO.getIdCamposObjetoNegocio()); camposObjetoNegocioDTO = (CamposObjetoNegocioDTO) camposObjetoNegocioDao.restore(camposObjetoNegocioDTO); grupoVisaoCamposNegocioDTO.setCamposObjetoNegocioDto(camposObjetoNegocioDTO); if (camposObjetoNegocioDTO != null) { colPresentation.add(camposObjetoNegocioDTO); colCamposApresNeg.add(grupoVisaoCamposNegocioDTO); if (MetaUtil.isStringType(camposObjetoNegocioDTO.getTipoDB())) { colFilter.add(camposObjetoNegocioDTO); } if (parm.getSort() != null) { if (camposObjetoNegocioDTO.getNomeDB().equalsIgnoreCase(parm.getSort())) { camposObjetoNegocioDTO.setOrder(parm.getOrder()); colOrder.add(camposObjetoNegocioDTO); } } } iX++; } } } } String sqlAdicionalWhere = ""; if (tableVinc) { sqlAdicionalWhere = this.generateSQLVinculos(parm.getIdVisaoRelacionada(), map); } String strScript = (String) mapScritps.get(ScriptsVisaoDTO.SCRIPT_EXECUTE_SERVER + "#" + ScriptsVisaoDTO.SCRIPT_ONSQLWHERESEARCH.getName()); if (strScript != null && !strScript.trim().equalsIgnoreCase("")) { ScriptRhinoJSExecute scriptExecute = new ScriptRhinoJSExecute(); Context cx = Context.enter(); Scriptable scope = cx.initStandardObjects(); scope.put("mapFields", scope, map); scope.put("sqlWhere", scope, sqlAdicionalWhere); scope.put("language", scope, WebUtil.getLanguage(request)); Object retorno = scriptExecute.processScript(cx, scope, strScript, TableSearchServiceEjb.class.getName() + "_" + ScriptsVisaoDTO.SCRIPT_ONSQLWHERESEARCH.getName()); sqlAdicionalWhere = (String) retorno; } String sql = ""; sql = this.generateSQL(colPresentation, null, colFilter, colOrder, parm.getSSearch(), sqlAdicionalWhere); strScript = (String) mapScritps.get(ScriptsVisaoDTO.SCRIPT_EXECUTE_SERVER + "#" + ScriptsVisaoDTO.SCRIPT_ONSQLSEARCH.getName()); if (strScript != null && !strScript.trim().equalsIgnoreCase("")) { ScriptRhinoJSExecute scriptExecute = new ScriptRhinoJSExecute(); Context cx = Context.enter(); Scriptable scope = cx.initStandardObjects(); scope.put("mapFields", scope, map); scope.put("sql", scope, sql); scope.put("language", scope, WebUtil.getLanguage(request)); Object retorno = scriptExecute.processScript(cx, scope, strScript, TableSearchServiceEjb.class.getName() + "_" + ScriptsVisaoDTO.SCRIPT_ONSQLSEARCH.getName()); } int IDISPLAYLENGTH = -1; String IDISPLAYLENGTHStr = (String) map.get("IDISPLAYLENGTH"); if (IDISPLAYLENGTHStr != null && !IDISPLAYLENGTHStr.trim().equalsIgnoreCase("")) { try { IDISPLAYLENGTH = Integer.parseInt(IDISPLAYLENGTHStr); } catch (Exception e) { } } int PAGE = -1; String PAGEStr = (String) map.get("PAGE"); if (PAGEStr != null && !PAGEStr.trim().equalsIgnoreCase("")) { try { PAGE = Integer.parseInt(PAGEStr); } catch (Exception e) { } } // ReturnTableSearchDTO returnTableSearchDTO = new ReturnTableSearchDTO(); if (strSGBDPrincipal.equalsIgnoreCase("ORACLE") || strSGBDPrincipal.equalsIgnoreCase("ORACLE")) { // verifica se os parametros j� foram alterados na sess�o para n�o alterar v�rias vezes sem necessidade - melhoria de performace String sql1 = "alter session set nls_comp = linguistic"; try { this.getDao().execSQL(sql1, null); } catch (Exception e) { // e.printStackTrace(); } String sql2 = "alter session set nls_sort = binary_ai"; try { this.getDao().execSQL(sql2, null); } catch (Exception e) { // e.printStackTrace(); } } Collection colRetorno = this.getDao().execSQL(sql, null); // Collection colRetornoLookup = new ArrayList(); String retorno = ""; boolean prim = true; int totalReg = 0; if (colRetorno != null && colRetorno.size() > 0) { totalReg = colRetorno.size(); // int tamCamposValue = colValue.size(); int tamCadaLinha = -1; for (Iterator it = colRetorno.iterator(); it.hasNext();) { // String lineLabel = ""; // String lineValue = ""; Object[] objs = (Object[]) it.next(); tamCadaLinha = objs.length; break; } if (tableVinc) { // Se for tabela vinculada, aumenta uma coluna, pois a "0" é sempre para os dados em Json. tamCadaLinha = tamCadaLinha + 2; } // int tamanhoRetorno = colRetorno.size(); // if (IDISPLAYLENGTH > 0) { // if (colRetorno.size() >= IDISPLAYLENGTH) { // // tamanhoRetorno = IDISPLAYLENGTH; // } // } // String[][] ret = new String[tamanhoRetorno][tamCadaLinha]; int x = 0; int contador = 0; int paginaAux = 1; for (Iterator it = colRetorno.iterator(); it.hasNext();) { Object[] objs = (Object[]) it.next(); if (IDISPLAYLENGTH > 0) { if (PAGE > 1 && PAGE >= (paginaAux + 1)) { if (contador >= (IDISPLAYLENGTH - 1)) { paginaAux++; contador = 0; } else { contador++; } continue; } if (contador >= IDISPLAYLENGTH) { break; } } // String lineLabel = ""; // String lineValue = ""; // int ctrlVinc = 0; // if (tableVinc) { // // Se for tabela vinculada, aumenta uma coluna, pois a "0" é sempre para os dados em Json. // ctrlVinc = 2; // } Iterator it2 = colPresentation.iterator(); if (!prim) { retorno += ","; } retorno += "{"; for (int i = 0; i < objs.length; i++) { String valor = ""; GrupoVisaoCamposNegocioDTO grupoVisaoCamposNegocioDTO = (GrupoVisaoCamposNegocioDTO) ((List) colCamposApresNeg).get(i); if (grupoVisaoCamposNegocioDTO.getTipoNegocio().equalsIgnoreCase(MetaUtil.RELATION)) { if (grupoVisaoCamposNegocioDTO.getTipoLigacao() == null) { grupoVisaoCamposNegocioDTO.setTipoLigacao(GrupoVisaoCamposNegocioDTO.RELATION_SIMPLE); } if (grupoVisaoCamposNegocioDTO.getTipoLigacao().equalsIgnoreCase(GrupoVisaoCamposNegocioDTO.RELATION_SIMPLE)) { LookupDTO lookupDto = new LookupDTO(); lookupDto.setTermoPesquisa(""); if (objs[i] != null) { lookupDto.setTermoPesquisa(objs[i].toString()); lookupDto.setIdGrupoVisao(grupoVisaoCamposNegocioDTO.getIdGrupoVisao()); lookupDto.setIdCamposObjetoNegocio(grupoVisaoCamposNegocioDTO.getCamposObjetoNegocioDto().getIdCamposObjetoNegocio()); ReturnLookupDTO returnLookupAux = lookupService.restoreSimple(lookupDto); String value = ""; String text = ""; if (returnLookupAux != null) { value = returnLookupAux.getValue(); text = returnLookupAux.getLabel(); valor = text + " [" + value + "] "; } else { valor = ""; if (objs[i] != null) { valor = objs[i].toString(); } } } else { valor = ""; } } else { if (objs[i] != null) { valor = objs[i].toString(); } else { valor = ""; } } } else if (grupoVisaoCamposNegocioDTO.getTipoNegocio().equalsIgnoreCase(MetaUtil.RADIO) || grupoVisaoCamposNegocioDTO.getTipoNegocio().equalsIgnoreCase(MetaUtil.SELECT)) { if (objs[i] != null) { ValorVisaoCamposNegocioDao valorVisaoCamposNegocioDao = new ValorVisaoCamposNegocioDao(); Collection colDominios = valorVisaoCamposNegocioDao.findByIdCamposObjetoNegocio(grupoVisaoCamposNegocioDTO.getIdCamposObjetoNegocio()); if (colDominios != null) { valor = objs[i].toString(); for (Iterator itDominios = colDominios.iterator(); itDominios.hasNext();) { ValorVisaoCamposNegocioDTO valorVisaoCamposNegocioDTO = (ValorVisaoCamposNegocioDTO) itDominios.next(); if (objs[i].toString().equalsIgnoreCase(valorVisaoCamposNegocioDTO.getValor())) { if(valorVisaoCamposNegocioDTO.getDescricao().contains("$")){ valor = UtilI18N.internacionaliza(request, valorVisaoCamposNegocioDTO.getDescricao().replace("$", "")) + " [" + objs[i].toString() + "]"; } else { valor = valorVisaoCamposNegocioDTO.getDescricao() + " [" + objs[i].toString() + "]"; } //valor = objs[i].toString(); break; } } } } } else { if ((objs[i] instanceof java.sql.Date)) { //valor = UtilDatas.dateToSTR((java.sql.Date) objs[i]); valor = UtilDatas.convertDateToString(TipoDate.DATE_DEFAULT, (java.sql.Date) objs[i], WebUtil.getLanguage(request)); } else if ((objs[i] instanceof java.sql.Timestamp)) { //valor = UtilDatas.dateToSTR((java.sql.Timestamp) objs[i]); valor = UtilDatas.convertDateToString(TipoDate.DATE_DEFAULT, (java.sql.Timestamp) objs[i], WebUtil.getLanguage(request)); } else if (Double.class.isInstance(objs[i])) { valor = UtilFormatacao.formatDouble((Double) objs[i], 2); valor = valor.replaceAll(",00", ""); valor = valor.replaceAll("\\.", ""); } else if (BigDecimal.class.isInstance(objs[i])) { valor = UtilFormatacao.formatBigDecimal((BigDecimal) objs[i], 2); valor = valor.replaceAll(",00", ""); valor = valor.replaceAll("\\.", ""); } else { if (objs[i] != null) { valor = objs[i].toString(); } else { valor = ""; } } if (valor != null && valor.indexOf("\n") > -1) { // Se tiver enter, tira o enter da string valor = valor.replaceAll("\n", " "); } if (valor != null && valor.indexOf("\r") > -1) { // Se tiver enter, tira o enter da string valor = valor.replaceAll("\r", " "); } if (valor != null && valor.indexOf("\t") > -1) { // Se tiver tab, tira o tab da string valor = valor.replaceAll("\t", " "); } } if (it2.hasNext()) { if (i > 0) { retorno += ","; } CamposObjetoNegocioDTO camposObjetoNegocioDTO = (CamposObjetoNegocioDTO) it2.next(); retorno += "\"" + camposObjetoNegocioDTO.getNomeDB() + "\":"; valor = UtilStrings.replaceInvalid(valor); valor = valor.replaceAll("\"", ""); valor = valor.replaceAll("\t", ""); valor = valor.trim(); retorno += "\"" + valor + "\""; } } retorno += "}"; prim = false; x++; contador++; } //linha antiga, sem tratamento de caracteres especiais para enviar por JSON //return "{\"total\": \"" + totalReg + "\",\"rows\":[" + retorno + "]}"; return "{\"total\": \"" + totalReg + "\",\"rows\":[" + StringEscapeUtils.unescapeJavaScript(retorno) + "]}"; } else { return "{\"total\": \"0\",\"rows\":[]}"; } } public String getInfoMatriz(TableSearchDTO parm, boolean tableVinc, Map map, HttpServletRequest request) throws Exception { MatrizVisaoService matrizVisaoService = (MatrizVisaoService) ServiceLocator.getInstance().getService(MatrizVisaoService.class, null); ObjetoNegocioService objetoNegocioService = (ObjetoNegocioService) ServiceLocator.getInstance().getService(ObjetoNegocioService.class, null); VisaoService visaoService = (VisaoService) ServiceLocator.getInstance().getService(VisaoService.class, null); GrupoVisaoService grupoVisaoService = (GrupoVisaoService) ServiceLocator.getInstance().getService(GrupoVisaoService.class, null); GrupoVisaoCamposNegocioService grupoVisaoCamposNegocioService = (GrupoVisaoCamposNegocioService) ServiceLocator.getInstance().getService(GrupoVisaoCamposNegocioService.class, null); CamposObjetoNegocioService camposObjetoNegocioService = (CamposObjetoNegocioService) ServiceLocator.getInstance().getService(CamposObjetoNegocioService.class, null); ValorVisaoCamposNegocioService valorVisaoCamposNegocioService = (ValorVisaoCamposNegocioService) ServiceLocator.getInstance().getService(ValorVisaoCamposNegocioService.class, null); VisaoRelacionadaService visaoRelacionadaService = (VisaoRelacionadaService) ServiceLocator.getInstance().getService(VisaoRelacionadaService.class, null); ScriptsVisaoService scriptsVisaoService = (ScriptsVisaoService) ServiceLocator.getInstance().getService(ScriptsVisaoService.class, null); HtmlCodeVisaoService htmlCodeVisaoService = (HtmlCodeVisaoService) ServiceLocator.getInstance().getService(HtmlCodeVisaoService.class, null); VisaoDTO visaoDto = new VisaoDTO(); visaoDto.setIdVisao(parm.getIdVisao()); visaoDto = (VisaoDTO) visaoService.restore(visaoDto); if (visaoDto == null) { return null; } Collection colGrupos = grupoVisaoService.findByIdVisaoAtivos(parm.getIdVisao()); if (colGrupos != null) { for (Iterator it = colGrupos.iterator(); it.hasNext();) { GrupoVisaoDTO grupoVisaoDTO = (GrupoVisaoDTO) it.next(); grupoVisaoDTO.setColCamposVisao(grupoVisaoCamposNegocioService.findByIdGrupoVisaoAtivos(grupoVisaoDTO.getIdGrupoVisao())); if (grupoVisaoDTO.getColCamposVisao() != null) { for (Iterator it2 = grupoVisaoDTO.getColCamposVisao().iterator(); it2.hasNext();) { GrupoVisaoCamposNegocioDTO grupoVisaoCamposNegocioDTO = (GrupoVisaoCamposNegocioDTO) it2.next(); CamposObjetoNegocioDTO camposObjetoNegocioDTO = new CamposObjetoNegocioDTO(); camposObjetoNegocioDTO.setIdCamposObjetoNegocio(grupoVisaoCamposNegocioDTO.getIdCamposObjetoNegocio()); camposObjetoNegocioDTO = (CamposObjetoNegocioDTO) camposObjetoNegocioService.restore(camposObjetoNegocioDTO); grupoVisaoCamposNegocioDTO.setCamposObjetoNegocioDto(camposObjetoNegocioDTO); Collection colValores = valorVisaoCamposNegocioService.findByIdGrupoVisaoAndIdCampoObjetoNegocio(grupoVisaoDTO.getIdGrupoVisao(), grupoVisaoCamposNegocioDTO.getIdCamposObjetoNegocio()); grupoVisaoCamposNegocioDTO.setColValores(colValores); } } } } visaoDto.setColGrupos(colGrupos); String retorno = ""; Collection colMatriz = matrizVisaoService.findByIdVisao(parm.getIdVisao()); if (colMatriz != null && colMatriz.size() > 0) { DinamicViewsServiceEjb dinamicViewEjb = new DinamicViewsServiceEjb(); Collection colCamposPKPrincipal = new ArrayList(); Collection colCamposTodosPrincipal = new ArrayList(); dinamicViewEjb.setInfoSave(parm.getIdVisao(), colCamposPKPrincipal, colCamposTodosPrincipal); String tablePrincipal = dinamicViewEjb.generateFrom(colCamposTodosPrincipal); MatrizVisaoDTO matrizVisaoDTO = (MatrizVisaoDTO) colMatriz.iterator().next(); ObjetoNegocioDTO objetoNegocioDTO = new ObjetoNegocioDTO(); objetoNegocioDTO.setIdObjetoNegocio(matrizVisaoDTO.getIdObjetoNegocio()); objetoNegocioDTO = (ObjetoNegocioDTO) objetoNegocioService.restore(objetoNegocioDTO); MatrizVisaoDao matrizVisaoDao = new MatrizVisaoDao(); ValorRecuperadoMatrizDTO valorRecuperadoMatrizDTO = matrizVisaoDao.recuperaDadosMatriz(matrizVisaoDTO); if (valorRecuperadoMatrizDTO.getColDados() != null) { for (Iterator it = valorRecuperadoMatrizDTO.getColDados().iterator(); it.hasNext();) { boolean prim = true; if (!retorno.trim().equalsIgnoreCase("")) { retorno = retorno + ","; } retorno += "{"; Object[] obj = (Object[]) it.next(); for (int i = 0; i < obj.length; i++) { if (!prim) { retorno = retorno + ","; } prim = false; retorno = retorno + "\"fld_" + i + "\":"; retorno = retorno + "\"" + obj[i].toString() + "\""; } if (visaoDto.getColGrupos() != null) { for (Iterator it2 = visaoDto.getColGrupos().iterator(); it2.hasNext();) { GrupoVisaoDTO grupoVisaoDTO = (GrupoVisaoDTO) it2.next(); if (grupoVisaoDTO.getColCamposVisao() != null) { for (Iterator it3 = grupoVisaoDTO.getColCamposVisao().iterator(); it3.hasNext();) { GrupoVisaoCamposNegocioDTO grupoVisaoCamposNegocioDTO = (GrupoVisaoCamposNegocioDTO) it3.next(); if (grupoVisaoCamposNegocioDTO.getTipoNegocio().equalsIgnoreCase(MetaUtil.HIDDEN)) { continue; } String valorApres = ""; if (valorRecuperadoMatrizDTO.getCamposObjetoNegocioApres1DTO() != null) { if (grupoVisaoCamposNegocioDTO.getCamposObjetoNegocioDto().getNomeDB().equalsIgnoreCase(valorRecuperadoMatrizDTO.getCamposObjetoNegocioApres1DTO().getNomeDB())) { valorApres = obj[1].toString(); } } if (valorRecuperadoMatrizDTO.getCamposObjetoNegocioApres2DTO() != null) { if (grupoVisaoCamposNegocioDTO.getCamposObjetoNegocioDto().getNomeDB().equalsIgnoreCase(valorRecuperadoMatrizDTO.getCamposObjetoNegocioApres2DTO().getNomeDB())) { valorApres = obj[2].toString(); } } if (valorApres.trim().equalsIgnoreCase("")) { // Se ainda estiver vazio, eh que ainda nao conseguiu pegar o valor atual valorApres = MetaUtil.recuperaValorAtualCampo(colCamposPKPrincipal, grupoVisaoCamposNegocioDTO.getCamposObjetoNegocioDto(), tablePrincipal, obj, matrizVisaoDTO, map, request); } if (!prim) { retorno = retorno + ","; } prim = false; retorno = retorno + "\"" + grupoVisaoCamposNegocioDTO.getCamposObjetoNegocioDto().getNomeDB() + "\":"; retorno = retorno + "\"" + valorApres + "\""; } } } } retorno += "}"; } } } return retorno; } private String generateSQLVinculos(Integer idVisaoRelacionada, Map map) throws Exception { if (map == null) { return ""; } CamposObjetoNegocioDao camposObjetoNegocioDao = new CamposObjetoNegocioDao(); GrupoVisaoCamposNegocioDao grupoVisaoCamposNegocioDao = new GrupoVisaoCamposNegocioDao(); String sqlAdicional = ""; if (idVisaoRelacionada != null) { ObjetoNegocioDao objetoNegocioDao = new ObjetoNegocioDao(); VisaoRelacionadaDao visaoRelacionadaDao = new VisaoRelacionadaDao(); VisaoRelacionadaDTO visaoRelacionadaDTO = new VisaoRelacionadaDTO(); visaoRelacionadaDTO.setIdVisaoRelacionada(idVisaoRelacionada); visaoRelacionadaDTO = (VisaoRelacionadaDTO) visaoRelacionadaDao.restore(visaoRelacionadaDTO); String tabela = ""; ObjetoNegocioDTO objetoNegocioDTO = new ObjetoNegocioDTO(); objetoNegocioDTO.setIdObjetoNegocio(visaoRelacionadaDTO.getIdObjetoNegocioNN()); if (objetoNegocioDTO.getIdObjetoNegocio() != null) { objetoNegocioDTO = (ObjetoNegocioDTO) objetoNegocioDao.restore(objetoNegocioDTO); tabela = objetoNegocioDTO.getNomeTabelaDB(); } String complemento = ""; VinculoVisaoDao vinculoVisaoDao = new VinculoVisaoDao(); Collection colVinculos = vinculoVisaoDao.findByIdVisaoRelacionada(idVisaoRelacionada); CamposObjetoNegocioDTO camposObjetoNegocioDTOFilho = null; CamposObjetoNegocioDTO camposObjetoNegocioDTOFilhoNN = null; if (colVinculos == null) { colVinculos = new ArrayList(); } for (Iterator itVinculos = colVinculos.iterator(); itVinculos.hasNext();) { VinculoVisaoDTO vinculoVisaoDTO = (VinculoVisaoDTO) itVinculos.next(); HashMap mapNew = new HashMap(); if (vinculoVisaoDTO.getIdCamposObjetoNegocioFilho() != null) { GrupoVisaoCamposNegocioDTO grupoVisaoCamposNegocioDTO = new GrupoVisaoCamposNegocioDTO(); grupoVisaoCamposNegocioDTO.setIdGrupoVisao(vinculoVisaoDTO.getIdGrupoVisaoFilho()); grupoVisaoCamposNegocioDTO.setIdCamposObjetoNegocio(vinculoVisaoDTO.getIdCamposObjetoNegocioFilho()); grupoVisaoCamposNegocioDTO = (GrupoVisaoCamposNegocioDTO) grupoVisaoCamposNegocioDao.restore(grupoVisaoCamposNegocioDTO); if (grupoVisaoCamposNegocioDTO != null) { camposObjetoNegocioDTOFilho = new CamposObjetoNegocioDTO(); camposObjetoNegocioDTOFilho.setIdCamposObjetoNegocio(grupoVisaoCamposNegocioDTO.getIdCamposObjetoNegocio()); camposObjetoNegocioDTOFilho = (CamposObjetoNegocioDTO) camposObjetoNegocioDao.restore(camposObjetoNegocioDTOFilho); } } CamposObjetoNegocioDTO camposObjetoNegocioDTOPai = null; if (vinculoVisaoDTO.getIdCamposObjetoNegocioPaiNN() != null) { camposObjetoNegocioDTOPai = new CamposObjetoNegocioDTO(); camposObjetoNegocioDTOPai.setIdCamposObjetoNegocio(vinculoVisaoDTO.getIdCamposObjetoNegocioPaiNN()); camposObjetoNegocioDTOPai = (CamposObjetoNegocioDTO) camposObjetoNegocioDao.restore(camposObjetoNegocioDTOPai); } if (vinculoVisaoDTO.getIdCamposObjetoNegocioFilhoNN() != null) { camposObjetoNegocioDTOFilhoNN = new CamposObjetoNegocioDTO(); camposObjetoNegocioDTOFilhoNN.setIdCamposObjetoNegocio(vinculoVisaoDTO.getIdCamposObjetoNegocioFilhoNN()); camposObjetoNegocioDTOFilhoNN = (CamposObjetoNegocioDTO) camposObjetoNegocioDao.restore(camposObjetoNegocioDTOFilhoNN); } if (camposObjetoNegocioDTOPai != null) { String valuePai = (String) map.get(camposObjetoNegocioDTOPai.getNomeDB().trim().toUpperCase()); if (valuePai != null && !valuePai.equalsIgnoreCase("")) { if (!complemento.trim().equalsIgnoreCase("")) { complemento += " AND "; } if (MetaUtil.isStringType(camposObjetoNegocioDTOPai.getTipoDB())) { complemento += " " + camposObjetoNegocioDTOPai.getNomeDB().trim().toUpperCase() + " = '" + valuePai + "'"; } else { complemento += " " + camposObjetoNegocioDTOPai.getNomeDB().trim().toUpperCase() + " = " + valuePai; } } } if (vinculoVisaoDTO.getTipoVinculo().equalsIgnoreCase(VinculoVisaoDTO.VINCULO_N_TO_N)) { if (!tabela.equalsIgnoreCase("") && !complemento.equalsIgnoreCase("") && camposObjetoNegocioDTOFilho != null && camposObjetoNegocioDTOFilhoNN != null) { // if (!sqlAdicional.equalsIgnoreCase("")){ sqlAdicional += " AND "; // } sqlAdicional += " " + camposObjetoNegocioDTOFilho.getNomeDB() + " IN (SELECT " + camposObjetoNegocioDTOFilhoNN.getNomeDB() + " FROM " + tabela + " WHERE " + complemento + ") "; } } if (vinculoVisaoDTO.getTipoVinculo().equalsIgnoreCase(VinculoVisaoDTO.VINCULO_1_TO_N)) { if (camposObjetoNegocioDTOPai != null && complemento != null && !complemento.equalsIgnoreCase("")) { // if (!sqlAdicional.equalsIgnoreCase("")){ sqlAdicional += " AND "; // } sqlAdicional += complemento; } } } } return sqlAdicional; } /** * Gera SQL de consulta das telas que s�o DinamicViews. * * @param colPresentation * @param colValue * @param colFilter * @param colOrder * @param termoPesquisa * - Termo de pesquisa informado pelo usu�rio. * @param sqlAdicionalWhere * @return SQL de Consulta. * @throws Exception */ private String generateSQL(Collection colPresentation, Collection colValue, Collection colFilter, Collection colOrder, String termoPesquisa, String sqlAdicionalWhere) throws Exception { if (strSGBDPrincipal == null) { strSGBDPrincipal = CITCorporeUtil.SGBD_PRINCIPAL; strSGBDPrincipal = UtilStrings.nullToVazio(strSGBDPrincipal).trim(); } String sql = "SELECT "; sql += generateFields(colPresentation, colValue); sql += " FROM "; sql += generateFromWithRelatios(colPresentation, colFilter); String strFilter = generateFilter(colFilter, termoPesquisa); sqlAdicionalWhere += " AND (DELETED IS NULL OR DELETED = 'N')"; if (!strFilter.equalsIgnoreCase("")) { sql += " WHERE (" + strFilter + ") "; sql += sqlAdicionalWhere; } else { if (sqlAdicionalWhere != null && !sqlAdicionalWhere.trim().equalsIgnoreCase("")) { sql += " WHERE 1 = 1 " + sqlAdicionalWhere; } } String strOrder = generateOrder(colOrder); if (!strOrder.equalsIgnoreCase("")) { sql += " ORDER BY " + strOrder; } else { sql += " ORDER BY 2"; } return sql; } private String generateFields(Collection colPresentation, Collection colValue) throws Exception { ObjetoNegocioDao objetoNegocioDao = new ObjetoNegocioDao(); String sqlFields = ""; if (colValue == null) { colValue = new ArrayList(); } if (colPresentation != null) { int i = 1; for (Iterator it = colValue.iterator(); it.hasNext();) { CamposObjetoNegocioDTO camposObjetoNegocioDTO = (CamposObjetoNegocioDTO) it.next(); ObjetoNegocioDTO objetoNegocioDTO = new ObjetoNegocioDTO(); objetoNegocioDTO.setIdObjetoNegocio(camposObjetoNegocioDTO.getIdObjetoNegocio()); objetoNegocioDTO = (ObjetoNegocioDTO) objetoNegocioDao.restore(objetoNegocioDTO); if (objetoNegocioDTO != null) { if (!sqlFields.equalsIgnoreCase("")) { sqlFields += ", "; } sqlFields += objetoNegocioDTO.getNomeTabelaDB() + "." + camposObjetoNegocioDTO.getNomeDB() + " Val_" + i; } i++; } i = 1; for (Iterator it = colPresentation.iterator(); it.hasNext();) { CamposObjetoNegocioDTO camposObjetoNegocioDTO = (CamposObjetoNegocioDTO) it.next(); ObjetoNegocioDTO objetoNegocioDTO = new ObjetoNegocioDTO(); objetoNegocioDTO.setIdObjetoNegocio(camposObjetoNegocioDTO.getIdObjetoNegocio()); objetoNegocioDTO = (ObjetoNegocioDTO) objetoNegocioDao.restore(objetoNegocioDTO); if (objetoNegocioDTO != null) { if (!sqlFields.equalsIgnoreCase("")) { sqlFields += ", "; } sqlFields += objetoNegocioDTO.getNomeTabelaDB() + "." + camposObjetoNegocioDTO.getNomeDB() + " Fld_" + i; } i++; } } return sqlFields; } private String generateFromWithRelatios(Collection colPresentation, Collection colFilter) throws Exception { ObjetoNegocioDao objetoNegocioDao = new ObjetoNegocioDao(); HashMap map = new HashMap(); Collection colGeral = new ArrayList(); if (colPresentation != null) { colGeral.addAll(colPresentation); } if (colFilter != null) { colGeral.addAll(colFilter); } if (colGeral != null) { for (Iterator it = colGeral.iterator(); it.hasNext();) { CamposObjetoNegocioDTO camposObjetoNegocioDTO = (CamposObjetoNegocioDTO) it.next(); ObjetoNegocioDTO objetoNegocioDTO = new ObjetoNegocioDTO(); objetoNegocioDTO.setIdObjetoNegocio(camposObjetoNegocioDTO.getIdObjetoNegocio()); objetoNegocioDTO = (ObjetoNegocioDTO) objetoNegocioDao.restore(objetoNegocioDTO); if (objetoNegocioDTO != null) { if (!map.containsKey(objetoNegocioDTO.getNomeTabelaDB())) { map.put(objetoNegocioDTO.getNomeTabelaDB(), objetoNegocioDTO.getNomeTabelaDB()); } } } } Set set = map.entrySet(); Iterator i = set.iterator(); String fromSql = ""; while (i.hasNext()) { Map.Entry me = (Map.Entry) i.next(); if (!fromSql.equalsIgnoreCase("")) { fromSql += ","; } fromSql += me.getKey(); } return fromSql; } private String generateFilter(Collection colFilter, String termoPesquisa) throws Exception { ObjetoNegocioDao objetoNegocioDao = new ObjetoNegocioDao(); String sqlFilter = ""; if (colFilter != null) { for (Iterator it = colFilter.iterator(); it.hasNext();) { CamposObjetoNegocioDTO camposObjetoNegocioDTO = (CamposObjetoNegocioDTO) it.next(); ObjetoNegocioDTO objetoNegocioDTO = new ObjetoNegocioDTO(); objetoNegocioDTO.setIdObjetoNegocio(camposObjetoNegocioDTO.getIdObjetoNegocio()); objetoNegocioDTO = (ObjetoNegocioDTO) objetoNegocioDao.restore(objetoNegocioDTO); if (objetoNegocioDTO != null) { if (!sqlFilter.equalsIgnoreCase("")) { sqlFilter += " OR "; } String pref = ""; String pref2 = ""; String suf = ""; String suf2 = ""; String comp = "="; String termoPesquisaTratado = ""; boolean isTextSqlServer = false; if (camposObjetoNegocioDTO.getTipoDB().startsWith("TEXT") && strSGBDPrincipal.equalsIgnoreCase("SQLSERVER")) { isTextSqlServer = true; pref = "'%"; suf = "%'"; comp = "LIKE"; } else { pref2 = "UPPER("; boolean isPostgres = false; if (strSGBDPrincipal.equalsIgnoreCase("POSTGRESQL") || strSGBDPrincipal.equalsIgnoreCase("POSTGRES")) { pref2 = pref2 + "remove_acento("; isPostgres = true; } suf2 = ")"; if (isPostgres) { suf2 = "))"; } pref = "'%"; suf = "%'"; comp = "LIKE"; } if (termoPesquisa != null && !termoPesquisa.trim().equalsIgnoreCase("")) { if (!isTextSqlServer) { termoPesquisaTratado = tratarTermoPesquisa(termoPesquisa); } else { termoPesquisaTratado = termoPesquisa; } if (strSGBDPrincipal.equalsIgnoreCase("SQLSERVER")) { suf = suf + " COLLATE Latin1_General_CI_AI"; } sqlFilter += " " + pref2 + objetoNegocioDTO.getNomeTabelaDB() + "." + camposObjetoNegocioDTO.getNomeDB() + suf2 + " " + comp + " " + pref + termoPesquisaTratado.trim() + suf; } } } } if (strSGBDPrincipal.equalsIgnoreCase("POSTGRESQL") || strSGBDPrincipal.equalsIgnoreCase("POSTGRES")) { sqlFilter = sqlFilter.replaceAll("LIKE", "ILIKE"); } return sqlFilter; } private String tratarTermoPesquisa(String termoPesquisa) { termoPesquisa = termoPesquisa.trim().toUpperCase(); termoPesquisa = Normalizer.normalize(termoPesquisa, Normalizer.Form.NFD); termoPesquisa = termoPesquisa.replaceAll("[^\\p{ASCII}]", ""); //faixa de caracteres com ascii extendida //termoPesquisa = termoPesquisa.replaceAll("[^\\u0000-\\xFE]", ""); return termoPesquisa; } private String generateOrder(Collection colOrder) throws Exception { ObjetoNegocioDao objetoNegocioDao = new ObjetoNegocioDao(); String sqlOrder = ""; if (colOrder != null) { for (Iterator it = colOrder.iterator(); it.hasNext();) { CamposObjetoNegocioDTO camposObjetoNegocioDTO = (CamposObjetoNegocioDTO) it.next(); ObjetoNegocioDTO objetoNegocioDTO = new ObjetoNegocioDTO(); objetoNegocioDTO.setIdObjetoNegocio(camposObjetoNegocioDTO.getIdObjetoNegocio()); objetoNegocioDTO = (ObjetoNegocioDTO) objetoNegocioDao.restore(objetoNegocioDTO); if (objetoNegocioDTO != null) { if (!sqlOrder.equalsIgnoreCase("")) { sqlOrder += ", "; } sqlOrder += objetoNegocioDTO.getNomeTabelaDB() + "." + camposObjetoNegocioDTO.getNomeDB() + " " + camposObjetoNegocioDTO.getOrder(); } } } return sqlOrder; } }