package org.molgenis.ui.menu; import org.elasticsearch.common.collect.Lists; import java.util.List; import java.util.Stack; public class MenuUtils { public static MenuItem findMenuItem(String id, List<MenuItem> menu) { for (MenuItem item : menu) { if (item.getId().equals(id)) { return item; } if (item.getItems() != null) { MenuItem found = findMenuItem(id, item.getItems()); if (found != null) { return found; } } } return null; } /** * Return URI path to menu item of the given id or null if item does not exist. * * @param id * @param menu * @return */ public static String findMenuItemPath(String id, Menu menu) { Stack<MenuItem> path = new Stack<MenuItem>(); MenuItem menuItem = findMenuItemPathRec(id, menu, path); if (menuItem != null) { StringBuilder pathBuilder = new StringBuilder("/menu/"); if (path.size() > 1) { pathBuilder.append(path.get(path.size() - 2).getId()).append('/'); } pathBuilder.append(path.get(path.size() - 1).getId()); return pathBuilder.toString(); } else { return null; } } private static MenuItem findMenuItemPathRec(String id, MenuItem menu, Stack<MenuItem> path) { path.push(menu); for (MenuItem item : menu.getItems()) { if (item.getId().equals(id)) { path.push(item); return item; } else if (item.getType() == MenuItemType.MENU) { MenuItem itemOfInterest = findMenuItemPathRec(id, item, path); if (itemOfInterest != null) { return itemOfInterest; } } } path.pop(); return null; } public static List<MenuItem> deleteMenuItem(String id, List<MenuItem> menu) { return recursivelyDeleteMenuItem(id, menu, Lists.newArrayList()); } private static List<MenuItem> recursivelyDeleteMenuItem(String id, List<MenuItem> menu, List<MenuItem> newMenu) { for (MenuItem item : menu) { if (!item.getId().equals(id)) { newMenu.add(item); } if (item.getItems() != null) { item.setItems(recursivelyDeleteMenuItem(id, item.getItems(), Lists.newArrayList())); } } return newMenu; } }