docs: protected void addChildResources(String folderName) throws CmsImportExportException, IOException, SAXException {
  
          try {
              // get all subFolders
              List<CmsResource> subFolders = getCms().getSubFolders(folderName, CmsResourceFilter.IGNORE_EXPIRATION);
              // get all files in folder
              List<CmsResource> subFiles = getCms().getFilesInFolder(folderName, CmsResourceFilter.IGNORE_EXPIRATION);
  
              // walk through all files and export them
              for (int i = 0; i < subFiles.size(); i++) {
                  CmsResource file = subFiles.get(i);
                  CmsResourceState state = file.getState();
                  long age = file.getDateLastModified() < file.getDateCreated()
                  ? file.getDateCreated()
                  : file.getDateLastModified();
  
                  if (getCms().getRequestContext().getCurrentProject().isOnlineProject()
                      || (m_parameters.isIncludeUnchangedResources())
                      || state.isNew()
                      || state.isChanged()) {
                      if (!state.isDeleted()
                          && !CmsWorkplace.isTemporaryFile(file)
                          && (age >= m_parameters.getContentAge())) {
                          String export = getCms().getSitePath(file);
                          if (checkExportResource(export)) {
                              if (isInExportableProject(file)) {
                                  exportFile(getCms().readFile(export, CmsResourceFilter.IGNORE_EXPIRATION));
                              }
                          }
                      }
                  }
                  // release file header memory
                  subFiles.set(i, null);
              }
              // all files are exported, release memory
              subFiles = null;
  
              // walk through all subfolders and export them
              for (int i = 0; i < subFolders.size(); i++) {
                  CmsResource folder = subFolders.get(i);
                  if (folder.getState() != CmsResource.STATE_DELETED) {
                      // check if this is a system-folder and if it should be included.
                      String export = getCms().getSitePath(folder);
                      if (checkExportResource(export)) {
  
                          long age = folder.getDateLastModified() < folder.getDateCreated()
                          ? folder.getDateCreated()
                          : folder.getDateLastModified();
                          // export this folder only if age is above selected age
                          // default for selected age (if not set by user) is <code>long 0</code> (i.e. 1970)
                          if (age >= m_parameters.getContentAge()) {
                              // only export folder data to manifest.xml if it has changed
                              appendResourceToManifest(folder, false);
                          }
  
                          // export all sub-resources in this folder
                          addChildResources(getCms().getSitePath(folder));
                      }
                  }
                  // release folder memory
                  subFolders.set(i, null);
              }
          } catch (CmsImportExportException e) {
  
              throw e;
          } catch (CmsException e) {
  
              CmsMessageContainer message = Messages.get().container(
                  Messages.ERR_IMPORTEXPORT_ERROR_ADDING_CHILD_RESOURCES_1,
                  folderName);
              if (LOG.isDebugEnabled()) {
                  LOG.debug(message.key(), e);
              }
  
              throw new CmsImportExportException(message, e);
          }
      }