protected List<MenuItem> collectPermittedScreens(List<MenuItem> menuItems) { List<MenuItem> collectedItems = new ArrayList<>(); for (MenuItem item : menuItems) { if (!item.isPermitted(userSession)) continue; if (StringUtils.isNotEmpty(item.getScreen())) { collectedItems.add(item); } if (CollectionUtils.isNotEmpty(item.getChildren())) { collectedItems.addAll(collectPermittedScreens(item.getChildren())); } } return collectedItems; }
protected MenuItem findItem(String id, MenuItem item) { if (id.equals(item.getId())) return item; else if (!item.getChildren().isEmpty()) { for (MenuItem child : item.getChildren()) { MenuItem menuItem = findItem(id, child); if (menuItem != null) return menuItem; } } return null; }
protected void build(SideMenu menu, List<MenuItem> rootItems) { Window window = ComponentsHelper.getWindowImplementation(menu); if (window == null) { throw new IllegalStateException("SideMenu is not belong to Window"); } for (MenuItem menuItem : rootItems) { // AppMenu does not support separators if (menuItem.isPermitted(session) && !menuItem.isSeparator()) { createMenuBarItem(window, menu, menuItem); } } removeExtraSeparators(menu); }
protected Consumer<SideMenu.MenuItem> createMenuBarCommand(final MenuItem item) { if (!item.getChildren().isEmpty() || item.isMenu()) //check item is menu return null; return createMenuCommandExecutor(item); }
protected void createSubMenu(Window webWindow, SideMenu menu, SideMenu.MenuItem vItem, MenuItem parentItem, UserSession session) { if (parentItem.isPermitted(session)) { for (MenuItem child : parentItem.getChildren()) { if (child.isSeparator()) { continue; } if (child.isPermitted(session)) { SideMenu.MenuItem menuItem = menu.createMenuItem(child.getId(), menuConfig.getItemCaption(child.getId())); assignDescription(menuItem, child); assignIcon(menuItem, child); assignStyleName(menuItem, child); if (child.getChildren().isEmpty()) { menuItem.setCommand(createMenuBarCommand(child)); assignShortcut(webWindow, menuItem, child); vItem.addChildItem(menuItem); } else { createSubMenu(webWindow, menu, menuItem, child, session); assignExpanded(menuItem, child); if (!isMenuItemEmpty(menuItem)) { vItem.addChildItem(menuItem); } } } } } }
nextToItem = findItem(nextTo, rootItem); if (nextToItem != null) { if (nextToItem.getParent() != null) currentParentItem = nextToItem.getParent(); break; menuItem = new MenuItem(currentParentItem, id); menuItem.setMenu(true); menuItem.setDescriptor(element); loadIcon(element, menuItem); loadShortcut(menuItem, element); if (StringUtils.isBlank(id)) id = "-"; menuItem = new MenuItem(currentParentItem, id); menuItem.setSeparator(true); if (!StringUtils.isBlank(id)) { menuItem.setDescriptor(element); addItem(currentParentItem.getChildren(), menuItem, nextToItem, before); } else { addItem(rootItems, menuItem, nextToItem, before);
/** * Create menu command. * * @param item menu item * @return command */ public MenuItemCommand create(FrameOwner origin, MenuItem item) { Map<String, Object> params = loadParams(item.getDescriptor(), item.getScreen()); if (StringUtils.isNotEmpty(item.getScreen())) { return new ScreenCommand(origin, item, item.getScreen(), item.getDescriptor(), params); } if (StringUtils.isNotEmpty(item.getRunnableClass())) { return new RunnableClassCommand(origin, item, item.getRunnableClass(), params); } if (StringUtils.isNotEmpty(item.getBean())) { return new BeanCommand(origin, item, item.getBean(), item.getBeanMethod(), params); } return null; }
MenuItem menuItem = new MenuItem(currentParentItem, id); menuItem.setScreen(screen); menuItem.setRunnableClass(runnableClass); menuItem.setBean(bean); menuItem.setBeanMethod(beanMethod); menuItem.setDescriptor(element); loadIcon(element, menuItem); loadShortcut(menuItem, element);
private void walkMenu(MenuItem info, Node<BasicPermissionTarget> node) { String id = info.getId(); String caption = menuConfig.getItemCaption(id) .replaceAll("<.+?>", "") .replaceAll(">", ""); caption = StringEscapeUtils.unescapeHtml4(caption); if (info.getChildren() != null && !info.getChildren().isEmpty()) { Node<BasicPermissionTarget> n = new Node<>(new BasicPermissionTarget("category:" + id, caption, id)); node.addChild(n); for (MenuItem item : info.getChildren()) { walkMenu(item, n); } } else { if (!info.isSeparator()) { Node<BasicPermissionTarget> n = new Node<>(new BasicPermissionTarget("item:" + id, caption, id)); node.addChild(n); } } }
protected void initDefaultScreenField() { boolean screenSelectionEnabled = webConfig.getUserCanChooseDefaultScreen(); if (!screenSelectionEnabled) { defaultScreenField.setEditable(false); defaultScreenField.setDescription(getMessage("defaultScreenSelectionDisabled")); } Map<String, String> map = new LinkedHashMap<>(); for (MenuItem item : collectPermittedScreens(menuConfig.getRootItems())) { map.put(menuConfig.getItemCaption(item.getId()), item.getScreen()); } defaultScreenField.setOptionsMap(map); String defaultScreen = userSettingService.loadSetting(ClientType.WEB, "userDefaultScreen"); if (StringUtils.isEmpty(defaultScreen) || !screenSelectionEnabled) { defaultScreen = webConfig.getDefaultScreenId(); } defaultScreenField.setValue(defaultScreen); }
public SideMenuShortcutListener(SideMenu.MenuItem menuItem, MenuItem item) { super("shortcut_" + item.getId(), item.getShortcut().getKey().getCode(), getShortcutModifiers(item.getShortcut().getModifiers())); this.menuItem = menuItem; }
protected void createMenuBarItem(Window webWindow, MenuItem item) { if (item.isPermitted(session)) { AppMenu.MenuItem menuItem = appMenu.createMenuItem(item.getId(), menuConfig.getItemCaption(item.getId()), null, createMenuBarCommand(item)); assignShortcut(webWindow, menuItem, item); assignStyleName(menuItem, item); assignIcon(menuItem, item); assignDescription(menuItem, item); createSubMenu(webWindow, menuItem, item, session); if (!isMenuItemEmpty(menuItem)) { appMenu.addMenuItem(menuItem); } } }
protected StopWatch createStopWatch(MenuItem item) { return new Slf4JStopWatch("MenuItem." + item.getId(), LoggerFactory.getLogger(UIPerformanceLogger.class)); }
public boolean isPermitted(UserSession session) { if (StringUtils.isEmpty(id) || isSeparator()) { return true; } else { boolean screenPermitted = session.isScreenPermitted(id); if (screenPermitted) { Element permissionsElem = descriptor.element("permissions"); if (permissionsElem != null) { for (Element element : Dom4j.elements(permissionsElem, "permission")) { PermissionType type = PermissionType.valueOf(element.attributeValue("type")); String target = element.attributeValue("target"); screenPermitted = session.isPermitted(type, target); if (!screenPermitted) break; } } } return screenPermitted; } }
protected void assignDescription(SideMenu.MenuItem menuItem, MenuItem conf) { String description = conf.getDescription(); if (StringUtils.isNotEmpty(description)) { menuItem.setDescription(messageTools.loadString(description)); } }
protected void createSubMenu(Window webWindow, AppMenu.MenuItem vItem, MenuItem item, UserSession session) { if (item.isPermitted(session) && !item.getChildren().isEmpty()) { for (MenuItem child : item.getChildren()) { if (child.getChildren().isEmpty()) { if (child.isPermitted(session)) { if (child.isSeparator()) { vItem.addChildItem(appMenu.createSeparator()); continue; AppMenu.MenuItem menuItem = appMenu.createMenuItem(child.getId(), menuConfig.getItemCaption(child.getId()), null, createMenuBarCommand(child)); if (child.isPermitted(session)) { AppMenu.MenuItem menuItem = appMenu.createMenuItem(child.getId(), menuConfig.getItemCaption(child.getId()), null, null);
protected Consumer<AppMenu.MenuItem> createMenuBarCommand(final MenuItem item) { if (CollectionUtils.isNotEmpty(item.getChildren()) || item.isMenu()) //check item is menu { return null; } return createMenuCommandExecutor(item); }
protected void assignShortcut(Window webWindow, AppMenu.MenuItem menuItem, MenuItem item) { KeyCombination itemShortcut = item.getShortcut(); if (itemShortcut != null) { ShortcutListener shortcut = new MenuShortcutAction(menuItem, "shortcut_" + item.getId(), item.getShortcut()); AbstractComponent windowImpl = webWindow.unwrap(AbstractComponent.class); windowImpl.addShortcutListener(shortcut); appMenu.setMenuItemShortcutCaption(menuItem, itemShortcut.format()); } }
protected void createMenuBarItem(Window webWindow, SideMenu menu, MenuItem item) { if (item.isPermitted(session)) { SideMenu.MenuItem menuItem = menu.createMenuItem(item.getId(), menuConfig.getItemCaption(item.getId()), null, createMenuBarCommand(item)); createSubMenu(webWindow, menu, menuItem, item, session); assignStyleName(menuItem, item); assignIcon(menuItem, item); assignDescription(menuItem, item); assignExpanded(menuItem, item); assignShortcut(webWindow, menuItem, item); if (!isMenuItemEmpty(menuItem)) { menu.addMenuItem(menuItem); } } }