package gcom.gui.seguranca.acesso; import gcom.cadastro.sistemaparametro.FiltroSistemaParametro; import gcom.cadastro.sistemaparametro.SistemaParametro; import gcom.fachada.Fachada; import gcom.seguranca.acesso.Funcionalidade; import gcom.seguranca.acesso.FuncionalidadeCategoria; import gcom.seguranca.acesso.usuario.Usuario; import gcom.util.ConstantesSistema; import gcom.util.Util; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.concurrent.CopyOnWriteArraySet; public class MenuGCOM { private SistemaParametro sistemaParametro; public MenuGCOM() { Collection colecaoSistemaParametro = Fachada.getInstancia().pesquisar(new FiltroSistemaParametro(),SistemaParametro.class.getName()); sistemaParametro = (SistemaParametro) Util.retonarObjetoDeColecao(colecaoSistemaParametro); sistemaParametro.setarConstantes(); } private int contadorId = 0; private StringBuffer menu = new StringBuffer(); public String gerarMenu(FuncionalidadeCategoria arvoreFuncionalidades, Usuario usuario) { menu.append("<link rel=\"StyleSheet\" href=\"/gsan/css/dtree.css\" type=\"text/css\" /><script type=\"text/javascript\" src=\"/gsan/javascript/dtree.js\"></script>\n"); menu.append("<div class=\"dtree\">\n"); menu.append("<script><!--\n d = new dTree('d');\n"); menu.append("d.add(0,-1,'Menu GSAN');\n"); ordenarArvoreOrdemAlfabeticaPorProfundidade(arvoreFuncionalidades); percorrerArvorePorProfundidade(arvoreFuncionalidades, 0, usuario); menu.append("d.draw();\n//--></script>\n"); menu.append("</div>"); return menu.toString(); } public String gerarMenuOrganizarMenu(FuncionalidadeCategoria arvoreFuncionalidades) { menu.append("<link rel=\"StyleSheet\" href=\"/gsan/css/dtree.css\" type=\"text/css\" /><script type=\"text/javascript\" src=\"/gsan/javascript/dtree2.js\"></script>\n"); menu.append("<div class=\"dtree\">\n"); menu.append("<script><!--\n t = new dTree('t');\n"); menu.append("t.add(0,-1,'Menu GSAN');\n"); ordenarArvoreOrdemAlfabeticaPorProfundidade(arvoreFuncionalidades); percorrerArvorePorProfundidadeOrganizarMenu(arvoreFuncionalidades, 0); menu.append("t.draw();\n//--></script>\n"); menu.append("</div>"); return menu.toString(); } private void percorrerArvorePorProfundidade(FuncionalidadeCategoria arvore, int nivelArvore, Usuario usuario) { Iterator iterator = arvore.getElementos().iterator(); while (iterator.hasNext()) { contadorId++; Object itemArvore = iterator.next(); if (itemArvore instanceof Funcionalidade) { Funcionalidade funcionalidade = (Funcionalidade) itemArvore; if (funcionalidade.getIndicadorPontoEntrada().equals(ConstantesSistema.SIM)) { // if (funcionalidade.getId().intValue() == 16026) { // menu.append("d.add(" + contadorId + "," + nivelArvore + ",'" + // funcionalidade.getDescricao() + "','" + // "http://" + sistemaParametro.getIpServidorModuloGerencial()+ "/" + funcionalidade.getCaminhoUrl() + ((funcionalidade.getCaminhoUrl().indexOf("?") != -1) ? "" : "?method=\"post\"&menu=sim")+ "','','_newblank');\n"); // } else { if(funcionalidade.getIndicadorNovaJanela().equals(ConstantesSistema.SIM)){ if (funcionalidade.getIndicadorOlap() != null && !funcionalidade.getIndicadorOlap().equals(ConstantesSistema.NAO)){ menu.append("d.add(" + contadorId + "," + nivelArvore + ",'" + funcionalidade.getDescricao() + "','" + "http://" + sistemaParametro.getIpServidorModuloGerencial()+ "/" + funcionalidade.getCaminhoUrl() + ((funcionalidade.getCaminhoUrl().indexOf("?") != -1) ? "" : "?menu=sim")+ "','','_newblank');\n"); } else { menu.append("d.add(" + contadorId + "," + nivelArvore + ",'" + funcionalidade.getDescricao() + "','" + funcionalidade.getCaminhoUrl() + ((funcionalidade.getCaminhoUrl().indexOf("?") != -1) ? "" : "?menu=sim")+ "','','_newblank');\n"); } }else{ if (funcionalidade.getIndicadorOlap() != null && !funcionalidade.getIndicadorOlap().equals(ConstantesSistema.NAO)){ menu.append("d.add(" + contadorId + "," + nivelArvore + ",'" + funcionalidade.getDescricao() + "','" + "http://" + sistemaParametro.getIpServidorModuloGerencial()+ "/" + funcionalidade.getCaminhoUrl() + ((funcionalidade.getCaminhoUrl().indexOf("?") != -1) ? "" : "?menu=sim")+ "');\n"); } else { menu.append("d.add(" + contadorId + "," + nivelArvore + ",'" + funcionalidade.getDescricao() + "','" + funcionalidade.getCaminhoUrl() + ((funcionalidade.getCaminhoUrl().indexOf("?") != -1) ? "" : "?menu=sim")+ "');\n"); } } // } } else { contadorId--; } } else if (itemArvore instanceof FuncionalidadeCategoria) { FuncionalidadeCategoria funcionalidadeCategoria = (FuncionalidadeCategoria) itemArvore; if(funcionalidadeCategoria.getElementos() != null && !funcionalidadeCategoria.getElementos().isEmpty()){ menu.append("d.add(" + contadorId + "," + nivelArvore + ",'" + funcionalidadeCategoria.getNome() + "','#');\n"); percorrerArvorePorProfundidade(((FuncionalidadeCategoria) itemArvore), contadorId, usuario); } } } } private void percorrerArvorePorProfundidadeOrganizarMenu(FuncionalidadeCategoria arvore, int nivelArvore) { Iterator iterator = arvore.getElementos().iterator(); while (iterator.hasNext()) { contadorId++; Object itemArvore = iterator.next(); if (itemArvore instanceof Funcionalidade) { Funcionalidade funcionalidade = (Funcionalidade) itemArvore; if (funcionalidade.getIndicadorPontoEntrada().equals(ConstantesSistema.SIM)) { menu.append("t.add(" + contadorId + "," + nivelArvore + ",'" + funcionalidade.getDescricao() +"-"+ funcionalidade.getNumeroOrdemMenu()+ "','" + "exibirOrganizarMenuArvoreAction.do?idFuncionalidade="+funcionalidade.getId() + "');\n"); } else { contadorId--; } } else if (itemArvore instanceof FuncionalidadeCategoria) { FuncionalidadeCategoria funcionalidadeCategoria = (FuncionalidadeCategoria) itemArvore; if(funcionalidadeCategoria.getElementos() != null && !funcionalidadeCategoria.getElementos().isEmpty()){ String url = ""; if(funcionalidadeCategoria.getFuncionalidadeCategoriaSuperior() != null && !funcionalidadeCategoria.getFuncionalidadeCategoriaSuperior().getId().equals( FuncionalidadeCategoria.FUNCIONALIDADE_SUPERIOR_GSAN )){ url = "exibirOrganizarMenuArvoreAction.do?idFuncionalidadeCategoria="+funcionalidadeCategoria.getId(); } menu.append("t.add(" + contadorId + "," + nivelArvore + ",'" + funcionalidadeCategoria.getNome() +"-"+ funcionalidadeCategoria.getNumeroOrdemMenu()+ "','" + url + "');\n"); percorrerArvorePorProfundidadeOrganizarMenu(((FuncionalidadeCategoria) itemArvore), contadorId); } } } } private void ordenarArvoreOrdemAlfabeticaPorProfundidade(FuncionalidadeCategoria arvore) { Iterator iterator = arvore.getElementos().iterator(); while (iterator.hasNext()) { Object itemArvore = iterator.next(); if (itemArvore instanceof FuncionalidadeCategoria) { FuncionalidadeCategoria funcionalidadeCategoria = (FuncionalidadeCategoria) itemArvore; List elementos = new ArrayList(funcionalidadeCategoria.getElementos()); Collections.sort((elementos), new Comparator() { public int compare(Object a, Object b) { if (a instanceof FuncionalidadeCategoria && b instanceof FuncionalidadeCategoria) { return ((FuncionalidadeCategoria) a).getNumeroOrdemMenu().compareTo(((FuncionalidadeCategoria) b).getNumeroOrdemMenu()); } else if (a instanceof Funcionalidade && b instanceof Funcionalidade) { return ((Funcionalidade) a).getNumeroOrdemMenu().compareTo(((Funcionalidade) b).getNumeroOrdemMenu()); } else if (a instanceof Funcionalidade && b instanceof FuncionalidadeCategoria){ return ((Funcionalidade) a).getNumeroOrdemMenu().compareTo(((FuncionalidadeCategoria) b).getNumeroOrdemMenu()); } else if (a instanceof FuncionalidadeCategoria && b instanceof Funcionalidade){ return ((FuncionalidadeCategoria) a).getNumeroOrdemMenu().compareTo(((Funcionalidade) b).getNumeroOrdemMenu()); } else { return 0; } } }); funcionalidadeCategoria.setElementos(new CopyOnWriteArraySet(elementos)); ordenarArvoreOrdemAlfabeticaPorProfundidade(funcionalidadeCategoria); } } } }