docs: private CmsClientSitemapEntry toClientEntry(CmsJspNavElement navElement, boolean isRoot) throws CmsException {
  
          CmsResource entryPage = null;
          CmsObject cms = getCmsObject();
          CmsClientSitemapEntry clientEntry = new CmsClientSitemapEntry();
          CmsResource entryFolder = null;
  
          CmsResource ownResource = navElement.getResource();
          clientEntry.setResourceState(ownResource.getState());
          CmsResource defaultFileResource = null;
          if (ownResource.isFolder() && !navElement.isNavigationLevel()) {
              defaultFileResource = cms.readDefaultFile(ownResource, CmsResourceFilter.ONLY_VISIBLE_NO_DELETED);
          }
  
          Map<String, CmsClientProperty> ownProps = getClientProperties(cms, ownResource, false);
  
          Map<String, CmsClientProperty> defaultFileProps = null;
          if (defaultFileResource != null) {
              defaultFileProps = getClientProperties(cms, defaultFileResource, false);
              clientEntry.setDefaultFileId(defaultFileResource.getStructureId());
              clientEntry.setDefaultFileType(
                  OpenCms.getResourceManager().getResourceType(defaultFileResource.getTypeId()).getTypeName());
              clientEntry.setDefaultFileReleased(defaultFileResource.isReleasedAndNotExpired(System.currentTimeMillis()));
          } else {
              defaultFileProps = new HashMap<String, CmsClientProperty>();
          }
          boolean isDefault = isDefaultFile(ownResource);
          clientEntry.setId(ownResource.getStructureId());
          clientEntry.setResourceTypeId(ownResource.getTypeId());
          clientEntry.setFolderDefaultPage(isDefault);
          if (navElement.getResource().isFolder()) {
              entryFolder = navElement.getResource();
              entryPage = defaultFileResource;
              clientEntry.setName(entryFolder.getName());
              if (entryPage == null) {
                  entryPage = entryFolder;
              }
              if (!isRoot && isSubSitemap(navElement)) {
                  clientEntry.setEntryType(EntryType.subSitemap);
                  clientEntry.setDefaultFileType(null);
              } else if (navElement.isNavigationLevel()) {
                  clientEntry.setEntryType(EntryType.navigationLevel);
              }
              CmsLock folderLock = cms.getLock(entryFolder);
              clientEntry.setHasForeignFolderLock(
                  !folderLock.isUnlocked() && !folderLock.isOwnedBy(cms.getRequestContext().getCurrentUser()));
              if (!cms.getRequestContext().getCurrentProject().isOnlineProject()) {
                  List<CmsResource> blockingChildren = cms.getBlockingLockedResources(entryFolder);
                  clientEntry.setBlockingLockedChildren((blockingChildren != null) && !blockingChildren.isEmpty());
              }
          } else {
              entryPage = navElement.getResource();
              clientEntry.setName(entryPage.getName());
              if (isRedirectType(entryPage.getTypeId())) {
                  clientEntry.setEntryType(EntryType.redirect);
                  CmsFile file = getCmsObject().readFile(entryPage);
                  I_CmsXmlDocument content = CmsXmlContentFactory.unmarshal(getCmsObject(), file);
                  I_CmsXmlContentValue linkValue = content.getValue(
                      REDIRECT_LINK_TARGET_XPATH,
                      getCmsObject().getRequestContext().getLocale());
                  String link = linkValue != null
                  ? linkValue.getStringValue(getCmsObject())
                  : Messages.get().getBundle(getWorkplaceLocale()).key(Messages.GUI_REDIRECT_SUB_LEVEL_0);
                  clientEntry.setRedirectTarget(link);
              } else {
                  clientEntry.setEntryType(EntryType.leaf);
              }
          }
          if (entryPage.isFile()) {
              List<CmsAlias> aliases = OpenCms.getAliasManager().getAliasesForStructureId(
                  getCmsObject(),
                  entryPage.getStructureId());
              if (!aliases.isEmpty()) {
                  List<String> aliasList = new ArrayList<String>();
                  for (CmsAlias alias : aliases) {
                      String aliasPath = alias.getAliasPath();
                      aliasList.add(aliasPath);
                  }
                  clientEntry.setAliases(aliasList);
              }
          }
          long dateExpired = navElement.getResource().getDateExpired();
          if (dateExpired != CmsResource.DATE_EXPIRED_DEFAULT) {
              clientEntry.setDateExpired(
                  CmsDateUtil.getDate(new Date(dateExpired), DateFormat.SHORT, getWorkplaceLocale()));
          }
          long dateReleased = navElement.getResource().getDateReleased();
          if (dateReleased != CmsResource.DATE_RELEASED_DEFAULT) {
              clientEntry.setDateReleased(
                  CmsDateUtil.getDate(new Date(dateReleased), DateFormat.SHORT, getWorkplaceLocale()));
          }
          clientEntry.setResleasedAndNotExpired(
              navElement.getResource().isReleasedAndNotExpired(System.currentTimeMillis()));
          String path = cms.getSitePath(entryPage);
          clientEntry.setVfsPath(path);
          clientEntry.setOwnProperties(ownProps);
          clientEntry.setDefaultFileProperties(defaultFileProps);
          clientEntry.setSitePath(entryFolder != null ? cms.getSitePath(entryFolder) : path);
          clientEntry.setLock(generateClientLock(entryPage));
          clientEntry.setInNavigation(isRoot || navElement.isInNavigation());
          String type = OpenCms.getResourceManager().getResourceType(ownResource).getTypeName();
          clientEntry.setResourceTypeName(type);
          clientEntry.setVfsModeIcon(CmsIconUtil.getIconClasses(type, ownResource.getName(), false));
  
          if (!clientEntry.isSubSitemapType()) {
              if (clientEntry.isNavigationLevelType()) {
                  clientEntry.setNavModeIcon(CmsIconUtil.ICON_NAV_LEVEL_BIG);
              } else if (defaultFileResource != null) {
                  clientEntry.setNavModeIcon(
                      CmsIconUtil.getIconClasses(clientEntry.getDefaultFileType(), defaultFileResource.getName(), false));
              }
          }
          clientEntry.setPermissionInfo(OpenCms.getADEManager().getPermissionInfo(cms, ownResource, null));
          return clientEntry;
      }