protected List<NavItem> getNavItems(List<NavItem> branchNavItems) throws Exception { ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY); List<NavItem> navItems = new ArrayList<>(); NavItem rootNavItem = null; if (_rootLayoutType.equals("relative")) { if ((_rootLayoutLevel >= 0) && (_rootLayoutLevel < branchNavItems.size())) { rootNavItem = branchNavItems.get(_rootLayoutLevel); } } else if (_rootLayoutType.equals("absolute")) { int ancestorIndex = branchNavItems.size() - _rootLayoutLevel; if ((ancestorIndex >= 0) && (ancestorIndex < branchNavItems.size())) { rootNavItem = branchNavItems.get(ancestorIndex); } else if (ancestorIndex == branchNavItems.size()) { navItems = NavItem.fromLayouts(request, themeDisplay.getLayouts(), null); } } else if (_rootLayoutType.equals("select")) { Layout layout = themeDisplay.getLayout(); if (Validator.isNotNull(_rootLayoutUuid)) { Layout rootLayout = LayoutLocalServiceUtil.getLayoutByUuidAndGroupId( _rootLayoutUuid, layout.getGroupId(), layout.isPrivateLayout()); rootNavItem = new NavItem(request, rootLayout, null); } else { navItems = NavItem.fromLayouts(request, themeDisplay.getLayouts(), null); } } if (rootNavItem != null) { navItems = rootNavItem.getChildren(); } return navItems; }