package br.com.centralit.citcorpore.tld; import java.util.Collection; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.BodyTagSupport; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import br.com.centralit.citcorpore.bean.MenuDTO; import br.com.centralit.citcorpore.bean.PerfilAcessoMenuDTO; import br.com.centralit.citcorpore.bean.UsuarioDTO; import br.com.centralit.citcorpore.integracao.MenuDao; import br.com.centralit.citcorpore.negocio.MenuService; import br.com.centralit.citcorpore.util.Enumerados; import br.com.centralit.citcorpore.util.ParametroUtil; import br.com.centralit.citcorpore.util.WebUtil; import br.com.citframework.excecao.ServiceException; import br.com.citframework.service.ServiceLocator; import br.com.citframework.util.Constantes; import br.com.citframework.util.UtilI18N; /** * Layout do novo menu * * @author flavio.santana * @since 30/07/2013 */ public class MenuPadrao extends BodyTagSupport { private static final long serialVersionUID = 8322540014033475637L; private static final Logger LOGGER = Logger.getLogger(MenuPadrao.class); private boolean btnGravar; private boolean btnExcluir; private boolean btnPesquisar; private final String CAMINHO_PAGINAS = Constantes.getValue("CONTEXTO_APLICACAO") + "/pages"; /** * Mapa com todos os menus que o usu�rio pode acessar * Map<idMenuPai, List<MenusFilhos> > * * @author thyen.chang * @since 26/01/2015 - OPERA��O USAIN BOLT */ private Map<Integer, List<MenuDTO>> mapaMenu; @Override public int doStartTag() throws JspException { final HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); final UsuarioDTO usrSession = WebUtil.getUsuario(request); final StringBuilder sbMenu = new StringBuilder(); String menuSessao = ""; String permissaoBotao = ""; try { final HttpSession session = request.getSession(true); menuSessao = (String) session.getAttribute("menuPadrao"); if (menuSessao != null && !StringUtils.isBlank(menuSessao)) { sbMenu.append(menuSessao); } else { menuSessao = this.gerarMenuPrincipal(usrSession); session.setAttribute("menuPadrao", menuSessao); sbMenu.append(menuSessao); } permissaoBotao = this.validarPermissaoDeBotao(request, usrSession); session.setAttribute("permissaoBotao", permissaoBotao); pageContext.getOut().println(sbMenu); } catch (final Exception e) { LOGGER.warn(e.getMessage(), e); } return SKIP_BODY; } /*** * Gera o HTML do menu principal * * @since 26/01/2015 - OPERA��O USAIN BOLT * Adicionado m�todo para pegar mapa com todos os menus que o usu�rio tem permiss�o de acessar * @author thyen.chang * @param usuario * @return * @throws Exception */ private String gerarMenuPrincipal(final UsuarioDTO usuario) throws Exception { final StringBuilder html = new StringBuilder(); html.append("<ul class='g-unit g-section g-tpl-nest' id='nav' >"); final Collection<MenuDTO> listaMenusPai = this.getMenuService().listarMenusPorPerfil(usuario, null, false); mapaMenu = this.getMenuService().listaMenuPorUsuario(usuario); if (listaMenusPai != null) { for (final MenuDTO menu : listaMenusPai) { html.append("<li class='g-unit'>"); html.append(" <a href='javascript:;'>"); html.append("<span>" + UtilI18N.internacionaliza((HttpServletRequest) pageContext.getRequest(), menu.getNome()) + "</span>"); html.append("<i></i>"); html.append("</a>"); this.gerarSubMenu(html, menu.getIdMenu()); } } html.append("</ul>"); return html.toString(); } /** * Gera o HTML dos subMenus * * @since 16/01/2014 - OPERA��O USAIN BOLT * Alterado m�todo de busca de filhos para pegar do Mapa * @author thyen.chang * @param html * @param idMenu * @param usuario */ private void gerarSubMenu(final StringBuilder html, final Integer idMenu) { try { final List<MenuDTO> listaSubMenus = this.getFilhos(idMenu); if (listaSubMenus != null && !listaSubMenus.isEmpty()) { html.append("<i></i>"); html.append("<ul>"); for (final MenuDTO submenu : listaSubMenus) { html.append("<li>"); html.append(" <a href='" + (submenu.getLink() == null || submenu.getLink().equals("") ? "javascript:;" : CAMINHO_PAGINAS + submenu.getLink())); html.append("'>"); html.append(""); html.append(UtilI18N.internacionaliza((HttpServletRequest) pageContext.getRequest(), submenu.getNome())); html.append("</a>"); this.gerarSubMenu(html, submenu.getIdMenu()); html.append("</li>"); } html.append("</ul>"); } html.append("</li>"); } catch (final Exception e) { LOGGER.warn(e.getMessage(), e); } } /** * Retorna Lista com menus filhos do Mapa * * @author thyen.chang * @since 26/01/2015 - OPERA��O USAIN BOLT * @param idMenu * @return */ private List<MenuDTO> getFilhos(final Integer idMenu) { return mapaMenu.get(idMenu); } /** * Obt�m as permiss�es do menu atrav�s de um mapa est�tico gravado na se��o do usu�rio * * @author thyen.chang * @since 28/01/2015 - OPERA��O USAIN BOLT * @param request * @param usuario * @return * @throws Exception */ public String validarPermissaoDeBotao(final HttpServletRequest request, final UsuarioDTO usuario) throws Exception { final String validarPermissoesDeBotoes = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.VALIDAR_BOTOES, "N"); final StringBuilder html = new StringBuilder(); // Permissao total if (usuario != null && usuario.getLogin() != null && (usuario.getLogin().equalsIgnoreCase("admin") || usuario.getLogin().equalsIgnoreCase("consultor"))) { return ""; } if (validarPermissoesDeBotoes.trim().equalsIgnoreCase("S")) { String[] auxDinamic = {}; final String pathInfo = this.getRequestedPath(request); auxDinamic = pathInfo.split(".jsp"); final String strForm = this.getObjectName(pathInfo); String url = "/" + strForm + "/" + strForm + ".load"; try { if (!auxDinamic[1].equals("null")) { url += "?" + auxDinamic[1]; } } catch (final Exception e) { LOGGER.warn(e.getMessage(), e); } final MenuDao menuDao = new MenuDao(); final Integer idMenu = menuDao.buscarIdMenu(url); if(idMenu != null){ final Collection<PerfilAcessoMenuDTO> listaAcessoMenus = WebUtil.getPerfilAcessoUsuarioByMenu(request, usuario, idMenu); if (listaAcessoMenus != null) { html.append("<script type=\"text/javascript\"> $(window).load(function() { "); btnGravar = false; btnExcluir = false; btnPesquisar = false; for (final PerfilAcessoMenuDTO perfilAcesso : listaAcessoMenus) { if (perfilAcesso.getGrava().equalsIgnoreCase("S")) { btnGravar = true; } if (perfilAcesso.getPesquisa().equalsIgnoreCase("S")) { btnPesquisar = true; } if (perfilAcesso.getDeleta().equalsIgnoreCase("S")) { btnExcluir = true; } } if (!btnGravar) { html.append("$('#btnGravar').addClass('disabled'); "); html.append("$('#btnGravar').addClass('disabledButtons'); "); html.append("$('#btnGravar').attr('disabled', 'disabled'); "); } if (!btnExcluir) { html.append("$('#btnExcluir').addClass('disabled'); "); html.append("$('#btnExcluir').addClass('disabledButtons'); "); html.append("$('#btnExcluir').attr('disabled', 'disabled'); "); html.append("$('#btnUpDate').addClass('disabled'); "); html.append("$('#btnUpDate').addClass('disabledButtons'); "); html.append("$('#btnUpDate').attr('disabled', 'disabled'); "); } if (!btnPesquisar) { html.append("$('#btnPesquisar').addClass('disabled'); "); html.append("$('#btnPesquisar').addClass('disabledButtons'); "); html.append("$('#btnPesquisar').attr('disabled', 'disabled'); "); html.append("$('#campoPesquisa').attr('disabled', 'disabled'); "); html.append("$('#btnTodos').addClass('disabled'); "); html.append("$('#btnTodos').addClass('disabledButtons'); "); html.append("$('#btnTodos').attr('disabled', 'disabled'); "); request.getSession(true).setAttribute("habilitaPesquisa", "S"); } html.append("});"); html.append("</script>"); } } else { return ""; } } return html.toString(); } private String getRequestedPath(final HttpServletRequest request) { String path = request.getRequestURI() + request.getQueryString(); path = path.substring(request.getContextPath().length()); final int index = path.indexOf("?"); if (index != -1) { path = path.substring(0, index); } return path; } public String getObjectName(final 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; } private MenuService menuService; private MenuService getMenuService() throws ServiceException { if (menuService == null) { menuService = (MenuService) ServiceLocator.getInstance().getService(MenuService.class, null); } return menuService; } }