package br.com.centralit.citcorpore.ajaxForms; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.Collection; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.output.Format; import org.jdom2.output.XMLOutputter; import br.com.centralit.citajax.html.AjaxFormAction; import br.com.centralit.citajax.html.DocumentHTML; import br.com.centralit.citajax.html.HTMLForm; import br.com.centralit.citajax.html.HTMLSelect; import br.com.centralit.citcorpore.bean.DicionarioDTO; import br.com.centralit.citcorpore.bean.LinguaDTO; import br.com.centralit.citcorpore.bean.MenuDTO; import br.com.centralit.citcorpore.bean.PerfilAcessoMenuDTO; import br.com.centralit.citcorpore.negocio.LinguaService; import br.com.centralit.citcorpore.negocio.MenuService; import br.com.centralit.citcorpore.negocio.PerfilAcessoMenuService; import br.com.centralit.citcorpore.util.CITCorporeUtil; import br.com.centralit.citcorpore.util.Enumerados; import br.com.centralit.citcorpore.util.ParametroUtil; import br.com.citframework.dto.Usuario; import br.com.citframework.excecao.ServiceException; import br.com.citframework.service.ServiceLocator; import br.com.citframework.util.UtilDatas; import br.com.citframework.util.UtilI18N; import br.com.citframework.util.WebUtil; @SuppressWarnings({"unchecked", "rawtypes"}) public class Menu extends AjaxFormAction { private static final Logger LOGGER = Logger.getLogger(Menu.class); private static final String DOLAR = "$"; private MenuDTO menuBean; @Override public Class<MenuDTO> getBeanClass() { return MenuDTO.class; } @Override public void load(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws Exception { document.focusInFirstActivateField(null); this.preencherComboMenuPai(document, request, response); final String mostraBotoes = ParametroUtil.getValorParametroCitSmartHashMap(Enumerados.ParametroSistema.MOSTRAR_BOTOES_IMPORTACAO_XML_CADASTRO_MENU, "S"); if (mostraBotoes.trim().equals("S")) { document.getElementById("btnGerar").setVisible(true); document.getElementById("btnAtualizar").setVisible(true); } else { document.getElementById("btnGerar").setVisible(false); document.getElementById("btnAtualizar").setVisible(false); } final HttpSession session = request.getSession(); LinguaDTO lingua = new LinguaDTO(); lingua.setSigla((String) session.getAttribute("locale")); if (lingua.getSigla() == null) { lingua.setSigla(UtilI18N.PORTUGUESE_SIGLA); } else if (lingua.getSigla().equals("")) { lingua.setSigla(UtilI18N.PORTUGUESE_SIGLA); } final LinguaService linguaService = (LinguaService) ServiceLocator.getInstance().getService(LinguaService.class, null); lingua = linguaService.getIdLingua(lingua); document.executeScript("setaLingua(" + lingua.getIdLingua() + ")"); } /** * Preenche a combo MenuPerfis Pai. * * @param document * @param request * @param response * @throws Exception * @author thays.araujo */ private void preencherComboMenuPai(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws Exception { final HTMLSelect comboMenuPai = document.getSelectById("idMenuPai"); final Collection<MenuDTO> menus = this.getMenuService().list(); this.inicializarCombo(comboMenuPai, request); for (final MenuDTO menuDto : menus) { if (menuDto.getDataFim() == null && StringUtils.isBlank(menuDto.getLink())) { comboMenuPai.addOption(menuDto.getIdMenu().toString(), UtilI18N.internacionaliza(request, menuDto.getNome())); } } } /** * Inclui Novo MenuPesfis. * * @param document * @param request * @param response * @throws Exception * @author thays.araujo */ public void save(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws Exception { this.setMenuBean((MenuDTO) document.getBean()); final DicionarioDTO dicionarioDTO = new DicionarioDTO(); if (!this.getMenuBean().getNome().startsWith(DOLAR)) { document.alert(UtilI18N.internacionaliza(request, "menu.nomeInvalidoChave")); return; } else { dicionarioDTO.setNome(StringUtils.remove(this.getMenuBean().getNome(), DOLAR)); } /* Setando o menu Vertical como padr�o do sistema */ if (this.getMenuBean().getMenuRapido() == null) { this.getMenuBean().setHorizontal("N"); } else { this.getMenuBean().setHorizontal("S"); } if (this.getMenuBean().getIdMenuPai() == null) { this.getMenuBean().setMenuRapido(null); } if (this.getMenuBean().getIdMenu() == null || this.getMenuBean().getIdMenu().intValue() == 0) { if (this.getMenuService().verificaSeExisteMenu(this.getMenuBean())) { document.alert(UtilI18N.internacionaliza(request, "citcorpore.comum.registroJaCadastrado")); return; } this.getMenuBean().setDataInicio(UtilDatas.getDataAtual()); /* Seta perfil de acesso ao administrador */ final PerfilAcessoMenuService perfilAcessoMenuService = (PerfilAcessoMenuService) ServiceLocator.getInstance().getService(PerfilAcessoMenuService.class, null); final MenuDTO menuDTO = this.getMenuService().create(this.getMenuBean()); final PerfilAcessoMenuDTO perfilAcessoMenuDTO = new PerfilAcessoMenuDTO(); perfilAcessoMenuDTO.setDataInicio(UtilDatas.getDataAtual()); perfilAcessoMenuDTO.setDeleta("S"); perfilAcessoMenuDTO.setGrava("S"); perfilAcessoMenuDTO.setPesquisa("S"); perfilAcessoMenuDTO.setIdMenu(menuDTO.getIdMenu()); perfilAcessoMenuDTO.setIdPerfilAcesso(1); perfilAcessoMenuService.create(perfilAcessoMenuDTO); document.alert(UtilI18N.internacionaliza(request, "MSG05")); } else { // Verifica se o menu alterado � o mesmo que o Menu Pai if (this.getMenuBean().getIdMenu().equals(this.getMenuBean().getIdMenuPai())) { document.alert(UtilI18N.internacionaliza(request, "menu.validacao.menuPaiMenu")); return; } if (this.getMenuService().verificaSeExisteMenu(this.getMenuBean())) { document.alert(UtilI18N.internacionaliza(request, "citcorpore.comum.registroJaCadastrado")); return; } this.getMenuService().update(this.getMenuBean()); document.alert(UtilI18N.internacionaliza(request, "MSG06")); } final HTMLForm form = document.getForm("form"); form.clear(); document.executeScript("ativaMenuPai()"); } public void saveNewPositions(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws Exception { final Usuario usuario = WebUtil.getUsuario(request); final String nomeUsuario = usuario.getNomeUsuario().trim(); if (!nomeUsuario.equalsIgnoreCase("administrador") && !nomeUsuario.equalsIgnoreCase("admin.centralit") || !nomeUsuario.equalsIgnoreCase("consultor")) { document.alert(UtilI18N.internacionaliza(request, "menu.validacao.editarMenu")); return; } final List<MenuDTO> listaItens = (List) WebUtil.deserializeCollectionFromRequest(MenuDTO.class, "listaOrdensMenusSerializada", request); this.getMenuService().updateNotNull(listaItens); } /** * Recupera menu. * * @param document * @param request * @param response * @throws Exception * @author thays.araujo */ public void restore(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws Exception { this.setMenuBean((MenuDTO) document.getBean()); this.preencherComboMenuPai(document, request, response); this.setMenuBean((MenuDTO) this.getMenuService().restore(this.getMenuBean())); if (this.getMenuBean().getIdMenuPai() == null) { document.executeScript("desativaMenuRapido()"); } else { document.executeScript("ativaMenuRapido()"); } final HTMLForm form = document.getForm("form"); form.clear(); form.setValues(this.getMenuBean()); } /** * Exclui Tipo Item Configura��o e suas caracter�sticas. * * @param document * @param request * @param response * @throws Exception * @author valdoilo.damasceno */ public void update(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws Exception { this.setMenuBean((MenuDTO) document.getBean()); if (this.getMenuBean().getIdMenu() != null && this.getMenuBean().getIdMenu() != 0) { this.getMenuBean().setDataFim(UtilDatas.getDataAtual()); this.getMenuService().update(this.getMenuBean()); document.executeScript("ativaMenuPai()"); } final HTMLForm form = document.getForm("form"); form.clear(); document.alert(UtilI18N.internacionaliza(request, "MSG07")); } private MenuService menuService; /** * Retorna inst�ncia de MenuPerfisService. * * @return EmpregadoService * @throws ServiceException * @throws Exception * @author thays.araujo */ private MenuService getMenuService() throws ServiceException { if (menuService == null) { menuService = (MenuService) ServiceLocator.getInstance().getService(MenuService.class, null); } return menuService; } /** * Atribui valor de MenuPerfisBean. * * @param empregado * @author thays.araujo */ private void setMenuBean(final MenuDTO menuBean) { this.menuBean = menuBean; } /** * Retorna bean de menuPerfis. * * @return EmpregadoDTO * @author thays.araujo */ private MenuDTO getMenuBean() { return menuBean; } /** * Iniciliza combo. * * @param componenteCombo * @author thays.araujo */ private void inicializarCombo(final HTMLSelect componenteCombo, final HttpServletRequest request) { componenteCombo.removeAllOptions(); componenteCombo.addOption("", UtilI18N.internacionaliza(request, "citcorpore.comum.selecione")); } public void exportarMenuXml(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws ServiceException, Exception { final Element tagMenuSuperior = new Element("menus"); final Element tagMenu = new Element("menuSuperior"); final Collection<MenuDTO> menusPais = this.getMenuService().listarMenusPais(); if (menusPais != null && !menusPais.isEmpty()) { for (final MenuDTO menuPai : menusPais) { final int j = 0; final Element tagMenuPai = new Element("menu"); final Element nomeMenuPai = new Element("nome"); final Element descricaoMenuPai = new Element("descricao"); final Element ordemMenuPai = new Element("ordem"); final Element menuRapidoPai = new Element("menuRapido"); final Element linkMenuPai = new Element("link"); final Element imagemMenuPai = new Element("imagem"); final Element horizontalMenuPai = new Element("horizontal"); nomeMenuPai.setText(menuPai.getNome()); descricaoMenuPai.setText(menuPai.getDescricao()); ordemMenuPai.setText(String.valueOf(menuPai.getOrdem())); menuRapidoPai.setText(String.valueOf(menuPai.getMenuRapido())); linkMenuPai.setText(menuPai.getLink()); imagemMenuPai.setText(menuPai.getImagem()); horizontalMenuPai.setText(menuPai.getHorizontal()); tagMenuPai.addContent(nomeMenuPai); tagMenuPai.addContent(descricaoMenuPai); tagMenuPai.addContent(ordemMenuPai); tagMenuPai.addContent(menuRapidoPai); tagMenuPai.addContent(linkMenuPai); tagMenuPai.addContent(imagemMenuPai); tagMenuPai.addContent(horizontalMenuPai); Element tagMenuInferior = new Element("subMenu" + j); tagMenuInferior = this.gerarTagMenu(menuPai, tagMenuInferior, j); tagMenuPai.addContent(tagMenuInferior); tagMenu.addContent(tagMenuPai); } } tagMenuSuperior.addContent(tagMenu); final Document doc = new Document(); doc.setRootElement(tagMenuSuperior); try { final String separator = System.getProperty("file.separator"); final String diretorioReceita = CITCorporeUtil.CAMINHO_REAL_APP + "XMLs" + separator; final File file = new File(diretorioReceita + "menu.xml"); final Writer out = new OutputStreamWriter(new FileOutputStream(file)); final XMLOutputter xout = new XMLOutputter(); xout.setFormat(Format.getCompactFormat().setEncoding("ISO-8859-1")); xout.output(doc, out); document.alert(UtilI18N.internacionaliza(request, "menu.criarXml")); } catch (final IOException e) { LOGGER.warn(e.getMessage(), e); } } private Element gerarTagMenu(final MenuDTO menuPai, final Element tagMenuInferior, int j) throws Exception { final Collection<MenuDTO> menusFilhos = this.getMenuService().listarMenusFilhos(menuPai.getIdMenu()); if (menuPai.getIdMenuPai() != null) { j++; final Element MenusInferiores = new Element("subMenu" + j); for (final MenuDTO menuFilho : menusFilhos) { Element tagMenuFilho = new Element("menu"); final Element nomeMenuFilho = new Element("nome"); final Element descricaoMenuFilho = new Element("descricao"); final Element ordemMenuFilho = new Element("ordem"); final Element menuRapidoMenuFilho = new Element("menuRapido"); final Element linkMenuFilho = new Element("link"); final Element imagemMenuFilho = new Element("imagem"); final Element horizontalMenuFilho = new Element("horizontal"); nomeMenuFilho.setText(menuFilho.getNome()); descricaoMenuFilho.setText(menuFilho.getDescricao()); ordemMenuFilho.setText(String.valueOf(menuFilho.getOrdem())); menuRapidoMenuFilho.setText(String.valueOf(menuFilho.getMenuRapido())); linkMenuFilho.setText(menuFilho.getLink()); imagemMenuFilho.setText(menuFilho.getImagem()); horizontalMenuFilho.setText(menuFilho.getHorizontal()); tagMenuFilho.addContent(nomeMenuFilho); tagMenuFilho.addContent(descricaoMenuFilho); tagMenuFilho.addContent(ordemMenuFilho); tagMenuFilho.addContent(menuRapidoMenuFilho); tagMenuFilho.addContent(linkMenuFilho); tagMenuFilho.addContent(imagemMenuFilho); tagMenuFilho.addContent(horizontalMenuFilho); tagMenuFilho = this.gerarTagMenu(menuFilho, tagMenuFilho, j); MenusInferiores.addContent(tagMenuFilho); } tagMenuInferior.addContent(MenusInferiores); } else { for (final MenuDTO menuFilho : menusFilhos) { Element tagMenuFilho = new Element("menu"); final Element nomeMenuFilho = new Element("nome"); final Element descricaoMenuFilho = new Element("descricao"); final Element ordemMenuFilho = new Element("ordem"); final Element menuRapidoFilho = new Element("menuRapido"); final Element linkMenuFilho = new Element("link"); final Element imagemMenuFilho = new Element("imagem"); final Element horizontalMenuFilho = new Element("horizontal"); nomeMenuFilho.setText(menuFilho.getNome()); descricaoMenuFilho.setText(menuFilho.getDescricao()); ordemMenuFilho.setText(String.valueOf(menuFilho.getOrdem())); menuRapidoFilho.setText(String.valueOf(menuFilho.getMenuRapido())); linkMenuFilho.setText(menuFilho.getLink()); imagemMenuFilho.setText(menuFilho.getImagem()); horizontalMenuFilho.setText(menuFilho.getHorizontal()); tagMenuFilho.addContent(nomeMenuFilho); tagMenuFilho.addContent(descricaoMenuFilho); tagMenuFilho.addContent(ordemMenuFilho); tagMenuFilho.addContent(menuRapidoFilho); tagMenuFilho.addContent(linkMenuFilho); tagMenuFilho.addContent(imagemMenuFilho); tagMenuFilho.addContent(horizontalMenuFilho); tagMenuFilho = this.gerarTagMenu(menuFilho, tagMenuFilho, j); tagMenuInferior.addContent(tagMenuFilho); } } return tagMenuInferior; } public void atualizarMenuXml(final DocumentHTML document, final HttpServletRequest request, final HttpServletResponse response) throws ServiceException, Exception { final String separator = System.getProperty("file.separator"); final String diretorioReceita = CITCorporeUtil.CAMINHO_REAL_APP + "XMLs" + separator; final File file = new File(diretorioReceita + "menu.xml"); this.getMenuService().gerarCarga(file); document.alert(UtilI18N.internacionaliza(request, "menu.atualizarXml")); } }