package br.com.centralit.citcorpore.tld; import java.io.IOException; import java.util.ArrayList; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.BodyTagSupport; import br.com.centralit.citcorpore.bean.MenuDTO; import br.com.centralit.citcorpore.bean.UsuarioDTO; import br.com.centralit.citcorpore.negocio.MenuService; 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 menu de acesso r�pido * @author flavio.santana *@since 28/10/2013 */ public class MenuRapido extends BodyTagSupport { private final String CAMINHO_PAGINAS = Constantes.getValue("CONTEXTO_APLICACAO") + "/pages"; private static boolean flagMenuPrincipal = true; private static boolean temMenu; private static final long serialVersionUID = 1L; @Override public int doStartTag() throws JspException { UsuarioDTO usrSession = WebUtil.getUsuario((HttpServletRequest) pageContext.getRequest()); StringBuilder sbMenu = new StringBuilder(); String menuSessao = ""; try { menuSessao = this.gerarMenuPrincipal(usrSession); sbMenu.append(menuSessao); pageContext.getOut().println(sbMenu); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return SKIP_BODY; } /*** * Gera o HTML do menu principal * @param usuario * @return * @throws Exception */ private String gerarMenuPrincipal(UsuarioDTO usuario) throws Exception { StringBuilder html = new StringBuilder(); boolean flagFinalLinha = false, flagInicioLinha = false; temMenu = false; html.append("<div class='widget'>"); html.append(" <div class='widget-head'>"); html.append(" <h4 class='heading'>"+UtilI18N.internacionaliza((HttpServletRequest) pageContext.getRequest(), "citcorpore.comum.acessoRapido")+"</h4>"); html.append(" </div>"); html.append(" <div class='widget-body'>"); html.append(" <div class='row-fluid'>"); ArrayList<MenuDTO> listaMenusPai = (ArrayList<MenuDTO>) getMenuService().listarMenusPorPerfil(usuario, null, false); if (listaMenusPai != null) { int i = 1; double num = listaMenusPai.size(); for (MenuDTO menu : listaMenusPai) { StringBuilder htmlMenu = new StringBuilder(); flagMenuPrincipal = false; if(flagInicioLinha) { html.append("<div class='row-fluid'>"); flagInicioLinha = false; } htmlMenu.append("<div class='span4'>"); htmlMenu.append(" <div class='innerAll'>"); htmlMenu.append(" <div class='glyphicons glyphicon-large "+menu.getImagem()+"'>"); htmlMenu.append(" <i></i>"); htmlMenu.append(" <h4>" + UtilI18N.internacionaliza(((HttpServletRequest) pageContext.getRequest()), menu.getNome()) + "</h4>"); this.gerarSubMenu(htmlMenu, menu.getIdMenu(), usuario); htmlMenu.append(" </div>"); htmlMenu.append(" </div>"); htmlMenu.append("</div>"); if(flagMenuPrincipal) { html.append(htmlMenu); }else { i--; } if(i%3==0 || i == num) flagFinalLinha = flagInicioLinha = true; if(flagFinalLinha) { html.append("</div>"); flagFinalLinha = false; } i++; } } html.append(" </div>"); html.append(" </div>"); html.append("</div>"); if(!temMenu) html = new StringBuilder(); return html.toString(); } /** * Gera o HTML dos subMenus * @param html * @param idMenu * @param usuario */ private void gerarSubMenu(StringBuilder html, Integer idMenu, UsuarioDTO usuario) { try { ArrayList<MenuDTO> listaSubMenus = (ArrayList<MenuDTO>) getMenuService().listarMenusPorPerfil(usuario, idMenu, true); if(listaSubMenus != null && !listaSubMenus.isEmpty()) { for (MenuDTO submenu : listaSubMenus) { if(submenu.getLink()!=null && !submenu.getLink().equals("")) { temMenu = true; flagMenuPrincipal = true; html.append("<p>"); html.append(" <a href='"+((submenu.getLink() == null || submenu.getLink().equals("")) ? "javascript:;" : CAMINHO_PAGINAS + submenu.getLink()) + "'>" + ""+UtilI18N.internacionaliza(((HttpServletRequest) pageContext.getRequest()),submenu.getNome())+"</a>"); html.append("</p>"); } this.gerarSubMenu(html, submenu.getIdMenu(), usuario); } } } catch (Exception e) { e.printStackTrace(); } } public MenuService getMenuService() throws ServiceException, Exception { return (MenuService) ServiceLocator.getInstance().getService(MenuService.class, null); } }