package br.com.centralit.citcorpore.tld; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.BodyTagSupport; import br.com.centralit.citcorpore.bean.GrupoEmpregadoDTO; import br.com.centralit.citcorpore.bean.MenuDTO; import br.com.centralit.citcorpore.bean.PerfilAcessoGrupoDTO; import br.com.centralit.citcorpore.bean.PerfilAcessoMenuDTO; import br.com.centralit.citcorpore.bean.PerfilAcessoUsuarioDTO; import br.com.centralit.citcorpore.bean.UsuarioDTO; import br.com.centralit.citcorpore.negocio.GrupoEmpregadoService; import br.com.centralit.citcorpore.negocio.MenuService; import br.com.centralit.citcorpore.negocio.MenuServiceEjb; import br.com.centralit.citcorpore.negocio.PerfilAcessoGrupoService; import br.com.centralit.citcorpore.negocio.PerfilAcessoMenuService; import br.com.centralit.citcorpore.negocio.PerfilAcessoUsuarioServiceEjb; import br.com.centralit.citcorpore.negocio.UsuarioService; import br.com.centralit.citcorpore.negocio.UsuarioServiceEjb; import br.com.centralit.citcorpore.util.WebUtil; import br.com.citframework.service.ServiceLocator; import br.com.citframework.util.Constantes; /** * @author breno.guimaraes * */ @SuppressWarnings({"unused", "unchecked"}) public class MenuCITSmart extends BodyTagSupport { private static final long serialVersionUID = 1L; private String orientation; private MenuService menuService; private static final String INTERROGACAO = "?"; private final String CAMINHO_PAGINAS = Constantes.getValue("CONTEXTO_APLICACAO") + "/pages"; private final String CAMINHO_IMAGENS = "/citsmart/template_new/images/icons/small/grey/"; private final String CAMINHO_IMAGENS_LARGE = "/citsmart/template_new/images/icons/large/grey/"; private UsuarioDTO usuario; private Integer qtdSub = 0; protected Boolean btnGrava; protected Boolean btnPesquisa; protected Boolean btnDeleta; private UsuarioDTO getAtualizacoesUsuario(String login) { UsuarioDTO retorno = null; UsuarioServiceEjb usuarioService = new UsuarioServiceEjb(); PerfilAcessoUsuarioServiceEjb perfilAcessoUsuario = new PerfilAcessoUsuarioServiceEjb(); PerfilAcessoUsuarioDTO perfilAcessoDTO = new PerfilAcessoUsuarioDTO(); perfilAcessoDTO.setIdUsuario(usuario.getIdUsuario()); try { retorno = usuarioService.restoreByLogin(login); perfilAcessoDTO = perfilAcessoUsuario.listByIdUsuario(perfilAcessoDTO); retorno.setIdPerfilAcessoUsuario(perfilAcessoDTO.getIdPerfilAcesso()); } catch (Exception e) { e.printStackTrace(); } return retorno; } public int doStartTag() throws JspException { usuario = WebUtil.getUsuario((HttpServletRequest) pageContext.getRequest()); if (usuario == null) { return SKIP_BODY; } if (usuario != null) { usuario = getAtualizacoesUsuario(usuario.getLogin()); } if (usuario != null && usuario.getStatus().equals("I")) { try { pageContext.getOut().println("<p style='color:#990000'>Usu�rio n�o cadastrado. Contate o administrador.</p>"); } catch (IOException e) { e.printStackTrace(); } return SKIP_BODY; } if (usuario != null && usuario.getIdPerfilAcessoUsuario() == null) { try { pageContext.getOut().println("<p style='color:#990000'>Sem perfil de acesso. Contate o administrador.</p>"); } catch (IOException e) { e.printStackTrace(); } return SKIP_BODY; } this.menuService = new MenuServiceEjb(); String html = ""; if (getOrientation().equals("VERTICAL")) { try { html = renderizacaoVertical(); } catch (Exception e) { e.printStackTrace(); } } else { try { html = renderizacaoHorizontal(); } catch (Exception e) { e.printStackTrace(); } } try { pageContext.getOut().println(html); } catch (IOException e) { e.printStackTrace(); } return SKIP_BODY; } /** * Monta o HTML retornado pela taglib. * * @return * @throws Exception */ public String renderizacaoVertical() throws Exception { sessionMenu((HttpServletRequest) pageContext.getRequest()); StringBuilder html = new StringBuilder(); html.append("<script>function chamaItemMenu(url){window.location = url;}</script>"); ArrayList<MenuDTO> menus = (ArrayList<MenuDTO>) menuService.listarMenusPorPerfil(usuario, null, false); html.append("<div id='tst' style='background: #D5DBDF; width:100%;'>"); for (MenuDTO submenu : menus) { String iconMenu = ""; html.append("<a href=\"javascript:void(0)\" id='itemMM" + submenu.getIdMenu() + "' style='background:url(" + CAMINHO_IMAGENS + submenu.getImagem() + ") no-repeat;' class=\"easyui-menubutton\" data-options=\"menu:'#mm" + submenu.getIdMenu() + "'" + iconMenu + "\">" + submenu.getNome() + "</a>\n"); } html.append("</div>"); gerarMenus(html, menus, usuario, 0); return html.toString(); } public void sessionMenu(HttpServletRequest request) throws Exception { ArrayList<MenuDTO> menus = (ArrayList<MenuDTO>) menuService.listarMenusPorPerfil(usuario, null, false); request.getSession(true).setAttribute("sessionMenu", menus); } /** * Incrementa a String do HTML para menu VERTICAL atrav�s da refer�ncia. * * @param sb * String com o HTML que esta sendo montado. * @param listaDeMenus * Lista de Menus que deve ser convertida em HTML. * @param usuario * Usu�rio com as permiss�es de acesso aos menus. */ private void gerarMenus(StringBuilder sb, Collection<MenuDTO> listaDeMenus, UsuarioDTO usuario, int indice) { String link; try { for (MenuDTO submenu : listaDeMenus) { Collection<MenuDTO> novaListaSubMenus; novaListaSubMenus = this.menuService.listarMenusPorPerfil(usuario, submenu.getIdMenu(), false); if (novaListaSubMenus != null && !novaListaSubMenus.isEmpty()) { this.qtdSub++; String compl = ""; if (indice > 0) { compl = "SUB"; } String iconMenu = ""; if (submenu.getImagem() != null && !"".equalsIgnoreCase(submenu.getImagem().trim())) { iconMenu = "iconCls:'icon-menu" + submenu.getIdMenu() + "'"; } sb.append("<div id=\"mm" + compl + submenu.getIdMenu() + "\" style=\"width:250px;\" data-options=\"" + iconMenu + "\">\n"); if (indice > 0) { sb.append("<span>" + submenu.getNome() + "</span>"); sb.append("<div style=\"width:250px;\">\n"); } this.gerarMenus(sb, novaListaSubMenus, usuario, indice + 1); if (indice > 0) { sb.append("</div>\n"); } sb.append("</div>\n"); } else { link = submenu.getLink() == null || submenu.getLink().trim().equals("") ? "#" : CAMINHO_PAGINAS + submenu.getLink(); String iconMenu = ""; if (submenu.getImagem() != null && !"".equalsIgnoreCase(submenu.getImagem().trim())) { iconMenu = "iconCls:'icon-menu" + submenu.getIdMenu() + "'"; } if (indice > 0) { sb.append(" <div id=\"mmSUB" + submenu.getIdMenu() + "\" data-options=\"" + iconMenu + "\" onclick=\"chamaItemMenu('" + link + "')\">" + submenu.getNome() + "</div>\n"); } } } } catch (Exception e) { e.printStackTrace(); } } public String renderizacaoHorizontal() throws Exception { sessionMenu((HttpServletRequest) pageContext.getRequest()); StringBuilder html = new StringBuilder(); ArrayList<MenuDTO> menu = (ArrayList<MenuDTO>) menuService.listarMenusPorPerfil(usuario, null, true); html.append("<ul class=\"menu_horizontal\">"); for (MenuDTO m : menu) { // CAMINHO_IMAGENS_LARGE html.append("<a href=\"" + CAMINHO_PAGINAS + m.getLink() + "\"> "); html.append("<li class=\"li_menu tooltip_bottom\" title=\"" + m.getDescricao() + "\">"); html.append("<img src=\"" + CAMINHO_IMAGENS_LARGE + m.getImagem() + "\">"); html.append("<div class=\"name\">" + m.getNome() + "</div>"); html.append("</li>"); html.append("</a>"); } html.append("<a href=\"/cithelp/index.html\" target=\"blank\">"); html.append("<li class=\"li_menu tooltip_bottom\" title=\" Help CITSmart\">"); html.append("<img src=\"" + CAMINHO_IMAGENS_LARGE + "help.png\">"); html.append("<div class=\"name\">Help</div>"); html.append("</li>"); html.append("</a>"); html.append("</ul>"); return html.toString(); } public static long getSerialversionuid() { return serialVersionUID; } public String getOrientation() { return orientation; } public void setOrientation(String orientation) { this.orientation = orientation; } public String validarPermissaoDeBotao(HttpServletRequest request) throws Exception { if ((usuario != null && usuario.getLogin() != null) && (usuario != null && usuario.getLogin().equalsIgnoreCase("admin") || usuario.getLogin().equalsIgnoreCase("consultor"))) { // Permissao total return ""; } StringBuilder html = new StringBuilder(); MenuService menuService = (MenuService) ServiceLocator.getInstance().getService(MenuService.class, null); PerfilAcessoMenuService perfilAcessoMenuService = (PerfilAcessoMenuService) ServiceLocator.getInstance().getService(PerfilAcessoMenuService.class, null); UsuarioService usuarioService = (UsuarioService) ServiceLocator.getInstance().getService(UsuarioService.class, null); GrupoEmpregadoService grupoEmpregadoService = (GrupoEmpregadoService) ServiceLocator.getInstance().getService(GrupoEmpregadoService.class, null); PerfilAcessoGrupoService perfilAcessoGrupoService = (PerfilAcessoGrupoService) ServiceLocator.getInstance().getService(PerfilAcessoGrupoService.class, null); PerfilAcessoMenuDTO perfilAcessoMenudto = new PerfilAcessoMenuDTO(); PerfilAcessoGrupoDTO perfilAcessoGrupo = new PerfilAcessoGrupoDTO(); String pathInfo = getRequestedPath(request); String[] auxDinamic = {}; auxDinamic = pathInfo.split(".jsp"); String strForm = getObjectName(pathInfo); String url = "/" + strForm + "/" + strForm + ".load"; try { if (!auxDinamic[1].equals("null")) { url += "?" + auxDinamic[1]; } } catch (Exception x) { } Integer idMenu = menuService.buscarIdMenu(url); html.append("<script> addEvent(window, \"load\", carregaPermissao, false); "); html.append("function carregaPermissao(){"); if (idMenu != null) { if (usuario.getIdPerfilAcessoUsuario() != null) { perfilAcessoMenudto.setIdPerfilAcesso(usuario.getIdPerfilAcessoUsuario()); perfilAcessoMenudto.setIdMenu(idMenu); Collection<PerfilAcessoMenuDTO> listaAcessoMenus = perfilAcessoMenuService.restoreMenusAcesso(perfilAcessoMenudto); usuario = (UsuarioDTO) usuarioService.restore(usuario); Integer idEmpregado = usuario.getIdEmpregado(); Collection<GrupoEmpregadoDTO> listaDeGrupoEmpregado = grupoEmpregadoService.findByIdEmpregado(idEmpregado); if (listaDeGrupoEmpregado != null) { for (GrupoEmpregadoDTO grupoEmpregado : listaDeGrupoEmpregado) { perfilAcessoGrupo.setIdGrupo(grupoEmpregado.getIdGrupo()); perfilAcessoGrupo = perfilAcessoGrupoService.listByIdGrupo(perfilAcessoGrupo); perfilAcessoMenudto.setIdPerfilAcesso(perfilAcessoGrupo.getIdPerfilAcessoGrupo()); perfilAcessoMenudto.setIdMenu(idMenu); Collection<PerfilAcessoMenuDTO> listaAcessoMenusGrupo = perfilAcessoMenuService.restoreMenusAcesso(perfilAcessoMenudto); if (listaAcessoMenusGrupo != null) { for (PerfilAcessoMenuDTO perfilAcessoMenu : listaAcessoMenusGrupo) { PerfilAcessoMenuDTO perfil = new PerfilAcessoMenuDTO(); perfil.setGrava(perfilAcessoMenu.getGrava()); perfil.setPesquisa(perfilAcessoMenu.getPesquisa()); perfil.setDeleta(perfilAcessoMenu.getDeleta()); listaAcessoMenus.add(perfil); } } } } if (listaAcessoMenus != null) { setBtnGrava(true); html.append("$('#btnGravar').attr('class','light img_icon has_text disabledButtons'); "); setBtnPesquisa(true); html.append("$('#btnPesquisar').attr('class','ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only disabledButtons'); "); html.append("$('#btnTodos').attr('class','ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only disabledButtons'); "); setBtnDeleta(true); html.append("$('#btnUpDate').attr('class','light img_icon has_text disabledButtons'); "); html.append("$('#btnExcluir').attr('class','light img_icon has_text disabledButtons'); "); for (PerfilAcessoMenuDTO perfilAcesso : listaAcessoMenus) { if (perfilAcesso.getGrava().equalsIgnoreCase("S")) { html.append("$('#btnGravar').attr('class','light img_icon has_text'); "); setBtnGrava(false); } if (perfilAcesso.getPesquisa().equalsIgnoreCase("S")) { html.append("$('#btnPesquisar').attr('class','ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only'); "); html.append("$('#btnTodos').attr('class','ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only'); "); setBtnPesquisa(false); } if (perfilAcesso.getDeleta().equalsIgnoreCase("S")) { html.append("$('#btnUpDate').attr('class','light img_icon has_text'); "); html.append("$('#btnExcluir').attr('class','light img_icon has_text'); "); setBtnDeleta(false); } } html.append("$('#btnGravar').attr('disabled', " + getBtnGrava() + "); "); html.append("$('#btnPesquisar').attr('disabled', " + getBtnPesquisa() + "); "); html.append("$('#btnTodos').attr('disabled', " + getBtnPesquisa() + "); "); html.append("$('#btnUpDate').attr('disabled', " + getBtnDeleta() + "); "); html.append("$('#btnExcluir').attr('disabled', " + getBtnDeleta() + "); "); } } } html.append("}"); html.append("</script>"); return html.toString(); } private String getRequestedPath(HttpServletRequest request) { String path = request.getRequestURI() + request.getQueryString(); /* * path = path.substring(request.getContextPath().length()); * int index = path.indexOf(INTERROGACAO); * if (index != -1) * path = path.substring(0, index); */ return path; } public String getObjectName(String path) { String strResult = ""; boolean b = false; for (int i = path.length() - 1; i >= 0; i--) { if (b) { if (path.charAt(i) == '/') { return strResult; } else { strResult = path.charAt(i) + strResult; } } else { if (path.charAt(i) == '.') { b = true; } } } return strResult; } /** * @return the btnGrava */ public Boolean getBtnGrava() { return btnGrava; } /** * @param btnGrava * the btnGrava to set */ public void setBtnGrava(Boolean btnGrava) { this.btnGrava = btnGrava; } /** * @return the btnPesquisa */ public Boolean getBtnPesquisa() { return btnPesquisa; } /** * @param btnPesquisa * the btnPesquisa to set */ public void setBtnPesquisa(Boolean btnPesquisa) { this.btnPesquisa = btnPesquisa; } /** * @return the btnDeleta */ public Boolean getBtnDeleta() { return btnDeleta; } /** * @param btnDeleta * the btnDeleta to set */ public void setBtnDeleta(Boolean btnDeleta) { this.btnDeleta = btnDeleta; } }