From d45aa7d5702c40f8dcdfa1f615b87adc4735b1b2 Mon Sep 17 00:00:00 2001 From: Lucas Date: Thu, 4 May 2023 18:50:26 -0300 Subject: [PATCH] melhoria pesquisa --- .../gui/controladores/IndexController.java | 32 ++++++++ .../catalogos/SearchMenuController.java | 73 +++++++++++++++++++ .../web/utilerias/menu/MenuFactory.java | 4 + .../menu/MenuFactoryPropertiesImpl.java | 9 +++ .../utilerias/render/RenderSearchMenu.java | 19 +++++ web/gui/catalogos/searchMenu.zul | 32 ++++++++ 6 files changed, 169 insertions(+) create mode 100644 src/java/com/rjconsultores/ventaboletos/web/gui/controladores/catalogos/SearchMenuController.java create mode 100644 src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderSearchMenu.java create mode 100644 web/gui/catalogos/searchMenu.zul diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/IndexController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/IndexController.java index 9ab0492a2..d5fd9d2e1 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/IndexController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/IndexController.java @@ -13,9 +13,13 @@ import org.springframework.stereotype.Controller; import org.zkoss.util.resource.Labels; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.EventListener; +import org.zkoss.zk.ui.event.Events; +import org.zkoss.zk.ui.util.Clients; import org.zkoss.zul.Caption; import org.zkoss.zul.Menubar; import org.zkoss.zul.Toolbarbutton; +import org.zkoss.zul.api.Window; import com.rjconsultores.ventaboletos.entidad.Usuario; import com.rjconsultores.ventaboletos.service.ConstanteService; @@ -23,6 +27,7 @@ import com.rjconsultores.ventaboletos.service.FlywayUtilService; import com.rjconsultores.ventaboletos.service.UsuarioService; import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer; +import com.rjconsultores.ventaboletos.web.utilerias.menu.ItemMenuSistema; import com.rjconsultores.ventaboletos.web.utilerias.menu.MenuFactory; import com.rjconsultores.ventaboletos.web.utilerias.menu.MenuFactoryPropertiesImpl; @@ -46,6 +51,8 @@ public class IndexController extends MyGenericForwardComposer { private Toolbarbutton toolBarUser; private Menubar menubar; private Caption lblNombreAplicacion; + private Window win; + private HashMap menuItems; public Toolbarbutton getToolBar() { return toolBar; @@ -93,6 +100,15 @@ public class IndexController extends MyGenericForwardComposer { openWindow("/login.zul", Labels.getLabel("winLogin.title"), arg, MODAL, Boolean.FALSE); } else { + + win.setCtrlKeys("^q"); + win.addEventListener(Events.ON_CTRL_KEY, new EventListener() { + @Override + public void onEvent(Event event) throws Exception { + openSearchMenu(event); + } + }); + usuario = usuarioService.obtenerID(usuario.getUsuarioId()); toolBarUser.setVisible(Boolean.TRUE); @@ -103,6 +119,7 @@ public class IndexController extends MyGenericForwardComposer { } MenuFactory menuFactory = new MenuFactoryPropertiesImpl(desktop, usuario.getUsuarioPerfilList()); menuFactory.construirMenu(menubar); + menuItems = menuFactory.getMenuItems(); } } @@ -116,4 +133,19 @@ public class IndexController extends MyGenericForwardComposer { openWindow("/gui/seguridad/editarUsuario.zul", Labels.getLabel("editarUsuarioController.window.title"), args, MODAL); } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + public void openSearchMenu(Event ev) { + Map args = new HashMap(); + args.put("menuItems", menuItems); + openWindow("/gui/catalogos/searchMenu.zul", Labels.getLabel("lb.btnPesquisa.label"), args, MODAL); + } + + public HashMap getMenuItems() { + return menuItems; + } + + public void setMenuItems(HashMap menuItems) { + this.menuItems = menuItems; + } } diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/catalogos/SearchMenuController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/catalogos/SearchMenuController.java new file mode 100644 index 000000000..93a50cc71 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/catalogos/SearchMenuController.java @@ -0,0 +1,73 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package com.rjconsultores.ventaboletos.web.gui.controladores.catalogos; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.log4j.Logger; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Controller; +import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.Executions; +import org.zkoss.zk.ui.event.ForwardEvent; +import org.zkoss.zk.ui.event.InputEvent; + +import com.rjconsultores.ventaboletos.utilerias.StringHelper; +import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer; +import com.rjconsultores.ventaboletos.web.utilerias.MyListbox; +import com.rjconsultores.ventaboletos.web.utilerias.menu.ItemMenuSistema; +import com.rjconsultores.ventaboletos.web.utilerias.render.RenderSearchMenu; + +@Controller("searchMenuController") +@Scope("prototype") +public class SearchMenuController extends MyGenericForwardComposer { + + private static Logger log = Logger.getLogger(SearchMenuController.class); + private HashMap menuItems; + private MyListbox searchResultList; + + @SuppressWarnings("unchecked") + @Override + public void doAfterCompose(Component comp) throws Exception { + super.doAfterCompose(comp); + searchResultList.setItemRenderer(new RenderSearchMenu()); + menuItems = (HashMap) Executions.getCurrent().getArg().get("menuItems"); + searchResultList.setData(new ArrayList()); + } + + public void onChanging$bd(InputEvent ie) { + List list = new ArrayList(); + if (ie.getValue().length() > 0) { + searchResultList.clear(); + String searchValue = StringHelper.replaceAcento(ie.getValue().toLowerCase()); + for (Map.Entry entry : menuItems.entrySet()) { + String key = StringHelper.replaceAcento(entry.getKey().toLowerCase()); + if (key.contains(searchValue)) { + ItemMenuSistema value = entry.getValue(); + list.add(value); + } + } + Collections.sort(list, new Comparator() { + @Override + public int compare(ItemMenuSistema o1, ItemMenuSistema o2) { + return o1.getDescItemMenu().compareTo(o2.getDescItemMenu()); + } + }); + searchResultList.setData(list); + } + } + + public void onSelect$searchResultList(ForwardEvent ev) { + this.closeWindow(); + ItemMenuSistema value = (ItemMenuSistema) searchResultList.getSelected(); + value.ejecutar(); + } + +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/MenuFactory.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/MenuFactory.java index 6634e7caa..cba1af537 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/MenuFactory.java +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/MenuFactory.java @@ -1,5 +1,7 @@ package com.rjconsultores.ventaboletos.web.utilerias.menu; +import java.util.HashMap; + import org.zkoss.zul.api.Menubar; public interface MenuFactory { @@ -9,4 +11,6 @@ public interface MenuFactory { */ public void construirMenu(Menubar menuBar); + public HashMap getMenuItems(); + } diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/MenuFactoryPropertiesImpl.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/MenuFactoryPropertiesImpl.java index f8350c463..a079c3ad8 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/MenuFactoryPropertiesImpl.java +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/MenuFactoryPropertiesImpl.java @@ -29,6 +29,7 @@ public class MenuFactoryPropertiesImpl implements MenuFactory { private Desktop desktop; // Desktop de la aplicación private List listUsuarioPerfil;// El perfil del usuario private HashMap listClavesPermisos; + private HashMap itemsMenuSistema = new HashMap(); public MenuFactoryPropertiesImpl() { @@ -195,11 +196,19 @@ public class MenuFactoryPropertiesImpl implements MenuFactory { if (item.getClaveMenu() != null) { j.setVisible(listClavesPermisos.containsKey(item.getClaveMenu())); item.setIsReadOnly(listClavesPermisos.get(item.getClaveMenu()) != null ? listClavesPermisos.get(item.getClaveMenu()) : Boolean.FALSE ); + if (j.isVisible()) { + itemsMenuSistema.put(item.getDescItemMenu(), item); + } } return j; } return null; } + + @Override + public HashMap getMenuItems() { + return itemsMenuSistema; + } /** * Crea una instancia del menu especificado diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderSearchMenu.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderSearchMenu.java new file mode 100644 index 000000000..49659d395 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderSearchMenu.java @@ -0,0 +1,19 @@ +package com.rjconsultores.ventaboletos.web.utilerias.render; + +import org.zkoss.zul.Listcell; +import org.zkoss.zul.Listitem; +import org.zkoss.zul.ListitemRenderer; + +import com.rjconsultores.ventaboletos.web.utilerias.menu.ItemMenuSistema; + +public class RenderSearchMenu implements ListitemRenderer { + + public void render(Listitem lstm, Object o) throws Exception { + ItemMenuSistema itemMenuSistema = (ItemMenuSistema) o; + + Listcell lc = new Listcell(itemMenuSistema.getDescItemMenu()); + lc.setParent(lstm); + + lstm.setAttribute("data", itemMenuSistema); + } +} diff --git a/web/gui/catalogos/searchMenu.zul b/web/gui/catalogos/searchMenu.zul new file mode 100644 index 000000000..133a32a1b --- /dev/null +++ b/web/gui/catalogos/searchMenu.zul @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file