package br.com.centralit.citcorpore.tld;
import java.util.Collection;
import javax.servlet.http.HttpServletRequest;
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.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.UsuarioDTO;
import br.com.centralit.citcorpore.integracao.MenuDao;
import br.com.centralit.citcorpore.negocio.GrupoEmpregadoService;
import br.com.centralit.citcorpore.negocio.MenuService;
import br.com.centralit.citcorpore.negocio.PerfilAcessoGrupoService;
import br.com.centralit.citcorpore.negocio.PerfilAcessoMenuService;
import br.com.centralit.citcorpore.negocio.UsuarioService;
import br.com.centralit.citcorpore.util.Enumerados;
import br.com.centralit.citcorpore.util.Enumerados.ParametroSistema;
import br.com.centralit.citcorpore.util.ParametroUtil;
import br.com.centralit.citcorpore.util.WebUtil;
import br.com.citframework.service.ServiceLocator;
import br.com.citframework.util.UtilI18N;
/**
* @author breno.guimaraes
*
*/
@Deprecated
@SuppressWarnings({"unchecked"})
public class Menu extends BodyTagSupport {
private static final long serialVersionUID = 5585162748054781636L;
private static final Logger LOGGER = Logger.getLogger(Menu.class);
private String rapido;
private Integer qtdSub = 0;
protected Boolean btnGrava;
protected Boolean btnPesquisa;
protected Boolean btnDeleta;
private final String CAMINHO_PAGINAS = "/citsmart/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 static final String INTERROGACAO = "?";
@Override
public int doStartTag() throws JspException {
final HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
final UsuarioDTO usrSession = WebUtil.getUsuario(request);
final StringBuilder menu = new StringBuilder();
String menuSessao = "";
String menuRapido = "";
String permissaoBotao = "";
try {
if (usrSession != null && usrSession.getStatus().equals("I")) {
pageContext.getOut().println("<p style='color:#990000'>Usu�rio n�o cadastrado. Contate o administrador.</p>");
return SKIP_BODY;
}
if (usrSession != null && usrSession.getIdPerfilAcessoUsuario() == null) {
pageContext.getOut().println("<p style='color:#990000'>Usu�rio n�o cadastrado. Contate o administrador.</p>");
return SKIP_BODY;
}
if (this.getRapido() == null) {
this.setRapido("N");
}
if (this.getRapido().equalsIgnoreCase("S")) {
menuRapido = (String) request.getSession(true).getAttribute("menuRapido");
if (menuRapido != null && !StringUtils.isBlank(menuRapido)) {
menu.append(menuRapido);
} else {
menuRapido = this.getMenuRapido(usrSession);
request.getSession(true).setAttribute("menuRapido", menuRapido);
menu.append(menuRapido);
}
permissaoBotao = this.validarPermissaoDeBotao(request, usrSession);
menu.append(permissaoBotao);
} else {
menuSessao = (String) request.getSession(true).getAttribute("menu");
if (menuSessao != null && !StringUtils.isBlank(menuSessao)) {
menu.append(menuSessao);
} else {
menuSessao = this.getMenu(usrSession);
request.getSession(true).setAttribute("menu", menuSessao);
menu.append(menuSessao);
}
}
pageContext.getOut().println(menu);
} catch (final Exception e) {
LOGGER.warn(e.getMessage(), e);
}
return SKIP_BODY;
}
private String getMenu(final UsuarioDTO usrSession) throws Exception {
final MenuDao menuDao = new MenuDao();
final StringBuilder html = new StringBuilder();
final Collection<MenuDTO> menusPai = menuDao.listarMenusPorPerfil(usrSession, null, false);
if (menusPai != null) {
html.append("<script>function chamaItemMenu(url){window.location = url;}</script>");
html.append("<div id='tst' style='background: #D5DBDF; width:100%;'>");
for (final MenuDTO menPai : menusPai) {
if (menPai.getNome().trim().equalsIgnoreCase("$menu.nome.recursosHumanos")) {
final String mostrarGerenciaRecursosHumanos = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.MOSTRAR_GERENCIA_RECURSOS_HUMANOS, "N");
if (!mostrarGerenciaRecursosHumanos.trim().equalsIgnoreCase("S") || menPai.getMostrar() == null || !Boolean.parseBoolean(menPai.getMostrar())) {
continue;
}
} else if (menPai.getNome().trim().equalsIgnoreCase("$menu.nome.compras")) {
final String mostrarCompras = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.MOSTRAR_COMPRAS, "N");
if (!mostrarCompras.trim().equalsIgnoreCase("S") || menPai.getMostrar() == null || !Boolean.parseBoolean(menPai.getMostrar())) {
continue;
}
}
html.append("<a href=\"javascript:void(0)\" id='itemMM");
html.append(menPai.getIdMenu());
html.append("' style='background:url(");
html.append(CAMINHO_IMAGENS);
html.append(menPai.getImagem());
html.append(") no-repeat;' ");
html.append("class=\"easyui-menubutton m-btn l-btn l-btn-plain\" data-options=\"menu:'#mm");
html.append(menPai.getIdMenu());
html.append("'");
html.append("");
html.append("\">");
html.append("<span class=\"l-btn-left\"><span class=\"l-btn-text\">");
html.append(this.internacionalizar(menPai.getNome()));
html.append("</span><span class=\"m-btn-downarrow\"> </span></span></a>\n");
}
html.append("</div>");
this.gerarMenus(html, menusPai, usrSession, 0);
}
return html.toString();
}
private void gerarMenus(final StringBuilder sb, final Collection<MenuDTO> listaDeMenus, final UsuarioDTO usuario, final int indice) {
String link;
try {
final MenuDao menuDao = new MenuDao();
for (final MenuDTO submenu : listaDeMenus) {
final Collection<MenuDTO> menusFilho = menuDao.listarMenusPorPerfil(usuario, submenu.getIdMenu(), false);
if (menusFilho != null && !menusFilho.isEmpty()) {
qtdSub++;
String compl = "";
if (indice > 0) {
compl = "SUB";
}
String iconMenu = "";
if (submenu.getImagem() != null && !"".equalsIgnoreCase(submenu.getImagem().trim())) {
iconMenu = "iconCls:'icon-menu" + submenu.getIdMenu() + "'";
}
final String s = compl.equals("SUB") ? "" : "display:none;";
if (submenu.getNome().equals("$menu.esconder")) {
sb.append("<div style=\"display:none;\" id=\"mm");
sb.append(compl);
sb.append(submenu.getIdMenu());
sb.append("\" style=\"width:250px;");
sb.append(s);
sb.append("\" data-options=\"");
sb.append(iconMenu);
sb.append("\">\n");
} else {
sb.append("<div id=\"mm");
sb.append(compl);
sb.append(submenu.getIdMenu());
sb.append("\" style=\"width:250px;");
sb.append(s);
sb.append("\" data-options=\"");
sb.append(iconMenu);
sb.append("\">\n");
}
if (indice > 0) {
sb.append("<span>");
sb.append(this.internacionalizar(submenu.getNome()));
sb.append("</span>");
sb.append("<div style=\"width:250px;\">\n");
}
this.gerarMenus(sb, menusFilho, usuario, indice + 1);
if (indice > 0) {
sb.append("</div>\n");
}
sb.append("</div>\n");
} else {
link = StringUtils.isBlank(submenu.getLink()) ? "#" : CAMINHO_PAGINAS + submenu.getLink();
String iconMenu = "";
if (StringUtils.isNotBlank(submenu.getImagem())) {
iconMenu = "iconCls:'icon-menu" + submenu.getIdMenu() + "'";
}
if (indice > 0) {
if (submenu.getNome().equals("$menu.esconder")) {
sb.append("<div style=\"display:none;\" id=\"mmSUB");
sb.append(submenu.getIdMenu());
sb.append("\" data-options=\"");
sb.append(iconMenu);
sb.append("\" onclick=\"chamaItemMenu('");
sb.append(link);
sb.append("')\">");
sb.append(this.internacionalizar(submenu.getNome()));
sb.append("</div>\n");
} else {
sb.append("<div id=\"mmSUB");
sb.append(submenu.getIdMenu());
sb.append("\" data-options=\"");
sb.append(iconMenu);
sb.append("\" onclick=\"chamaItemMenu('");
sb.append(link);
sb.append("')\">");
sb.append(this.internacionalizar(submenu.getNome()));
sb.append("</div>\n");
}
}
}
}
} catch (final Exception e) {
LOGGER.warn(e.getMessage(), e);
}
}
private boolean permiteAdicionarMenu() {
boolean resultado = true;
final String asteriskAtivo = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.SERVASTERISKATIVAR, "N");
if (!asteriskAtivo.equals("S")) {
resultado = false;
}
return resultado;
}
private String getMenuRapido(final UsuarioDTO usrSession) throws Exception {
final MenuDao menuDao = new MenuDao();
final StringBuilder html = new StringBuilder();
final Collection<MenuDTO> menusRapido = menuDao.listarMenusPorPerfil(usrSession, null, true);
if (this.permiteAdicionarMenu()) {
html.append("<li class=\"li_menu tooltip_bottom\" title=\"Ramal onde se encontra o usu�rio\">");
html.append("<img onclick=\"abreRamalTelefone();\" src=\"");
html.append(CAMINHO_IMAGENS_LARGE);
html.append("phone.png\">");
html.append("</li>");
}
if (menusRapido != null) {
for (final MenuDTO menRapido : menusRapido) {
html.append("<a href=\"");
html.append(CAMINHO_PAGINAS);
html.append(menRapido.getLink());
html.append("\"> ");
html.append("<li class=\"li_menu tooltip_bottom\" title=\"");
html.append(menRapido.getDescricao());
html.append("\">");
html.append("<img src=\"");
html.append(CAMINHO_IMAGENS_LARGE);
html.append(menRapido.getImagem());
html.append("\">");
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=\"");
html.append(CAMINHO_IMAGENS_LARGE);
html.append("help.png\">");
html.append("</li>");
html.append("</a>");
html.append("</ul>");
}
return html.toString();
}
public String validarPermissaoDeBotao(final HttpServletRequest request, 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")) {
final MenuService menuService = (MenuService) ServiceLocator.getInstance().getService(MenuService.class, null);
final PerfilAcessoMenuService perfilAcessoMenuService = (PerfilAcessoMenuService) ServiceLocator.getInstance().getService(PerfilAcessoMenuService.class, null);
final UsuarioService usuarioService = (UsuarioService) ServiceLocator.getInstance().getService(UsuarioService.class, null);
final GrupoEmpregadoService grupoEmpregadoService = (GrupoEmpregadoService) ServiceLocator.getInstance().getService(GrupoEmpregadoService.class, null);
final PerfilAcessoGrupoService perfilAcessoGrupoService = (PerfilAcessoGrupoService) ServiceLocator.getInstance().getService(PerfilAcessoGrupoService.class, null);
final PerfilAcessoMenuDTO perfilAcessoMenudto = new PerfilAcessoMenuDTO();
PerfilAcessoGrupoDTO perfilAcessoGrupo = new PerfilAcessoGrupoDTO();
final String pathInfo = this.getRequestedPath(request);
String[] auxDinamic = {};
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 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);
final Collection<PerfilAcessoMenuDTO> listaAcessoMenus = perfilAcessoMenuService.restoreMenusAcesso(perfilAcessoMenudto);
usuario = (UsuarioDTO) usuarioService.restore(usuario);
final Integer idEmpregado = usuario.getIdEmpregado();
final Collection<GrupoEmpregadoDTO> listaDeGrupoEmpregado = grupoEmpregadoService.findByIdEmpregado(idEmpregado);
if (listaDeGrupoEmpregado != null) {
for (final GrupoEmpregadoDTO grupoEmpregado : listaDeGrupoEmpregado) {
perfilAcessoGrupo.setIdGrupo(grupoEmpregado.getIdGrupo());
perfilAcessoGrupo = perfilAcessoGrupoService.listByIdGrupo(perfilAcessoGrupo);
if (perfilAcessoGrupo != null) {
perfilAcessoMenudto.setIdPerfilAcesso(perfilAcessoGrupo.getIdPerfilAcessoGrupo());
perfilAcessoMenudto.setIdMenu(idMenu);
final Collection<PerfilAcessoMenuDTO> listaAcessoMenusGrupo = perfilAcessoMenuService.restoreMenusAcesso(perfilAcessoMenudto);
if (listaAcessoMenusGrupo != null) {
for (final PerfilAcessoMenuDTO perfilAcessoMenu : listaAcessoMenusGrupo) {
final PerfilAcessoMenuDTO perfil = new PerfilAcessoMenuDTO();
perfil.setGrava(perfilAcessoMenu.getGrava());
perfil.setPesquisa(perfilAcessoMenu.getPesquisa());
perfil.setDeleta(perfilAcessoMenu.getDeleta());
listaAcessoMenus.add(perfil);
}
}
}
}
}
if (listaAcessoMenus != null) {
this.setBtnGrava(true);
html.append("$('#btnGravar').attr('class','light img_icon has_text disabledButtons'); ");
this.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'); ");
this.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 (final PerfilAcessoMenuDTO perfilAcesso : listaAcessoMenus) {
if (perfilAcesso.getGrava().equalsIgnoreCase("S")) {
html.append("$('#btnGravar').attr('class','light img_icon has_text'); ");
this.setBtnGrava(false);
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'); ");
this.setBtnPesquisa(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'); ");
this.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'); ");
this.setBtnDeleta(false);
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'); ");
this.setBtnPesquisa(false);
}
}
html.append("$('#btnGravar').attr('disabled', " + this.getBtnGrava() + "); ");
html.append("$('#btnPesquisar').attr('disabled', " + this.getBtnPesquisa() + "); ");
html.append("$('#btnTodos').attr('disabled', " + this.getBtnPesquisa() + "); ");
html.append("$('#btnUpDate').attr('disabled', " + this.getBtnDeleta() + "); ");
html.append("$('#btnExcluir').attr('disabled', " + this.getBtnDeleta() + "); ");
}
}
}
html.append("}");
html.append("</script>");
}
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(INTERROGACAO);
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;
}
public String getRapido() {
return rapido;
}
public void setRapido(final String rapido) {
this.rapido = rapido;
}
public Boolean getBtnGrava() {
return btnGrava;
}
public void setBtnGrava(final Boolean btnGrava) {
this.btnGrava = btnGrava;
}
public Boolean getBtnPesquisa() {
return btnPesquisa;
}
public void setBtnPesquisa(final Boolean btnPesquisa) {
this.btnPesquisa = btnPesquisa;
}
public Boolean getBtnDeleta() {
return btnDeleta;
}
public void setBtnDeleta(final Boolean btnDeleta) {
this.btnDeleta = btnDeleta;
}
private String internacionalizar(final String valor) throws Exception {
String sessaoLocale = UtilI18N.PORTUGUESE_SIGLA;
if (pageContext.getSession().getAttribute("locale") != null) {
sessaoLocale = pageContext.getSession().getAttribute("locale").toString();
}
return UtilI18N.internacionaliza(sessaoLocale, valor);
}
}