docs: public List<CmsJspNavElement> getSiteNavigation(String folder, Visibility visibility, int endLevel) {
  
          folder = CmsFileUtil.addTrailingSeparator(folder);
          // check if a specific end level was given, if not, build the complete navigation
          boolean noLimit = false;
          if (endLevel < 0) {
              noLimit = true;
          }
          List<CmsJspNavElement> list = new ArrayList<CmsJspNavElement>();
          // get the navigation for this folder
          List<CmsJspNavElement> curnav = getNavigationForFolder(folder, visibility, CmsResourceFilter.DEFAULT);
          // loop through all navigation entries
          for (CmsJspNavElement ne : curnav) {
              // add the navigation entry to the result list
              list.add(ne);
              // check if navigation entry is a folder or navigation level and below the max level -> if so, get the navigation from this folder as well
              if ((ne.isFolderLink() || ne.isNavigationLevel()) && (noLimit || (ne.getNavTreeLevel() < endLevel))) {
                  List<CmsJspNavElement> subnav = getSiteNavigation(
                      m_cms.getSitePath(ne.getResource()),
                      visibility,
                      endLevel);
                  // copy the result of the subfolder to the result list
                  list.addAll(subnav);
              }
          }
          return list;
      }