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;
  }