docs: public static ListConfigurationBean parseListConfiguration(CmsObject cms, CmsResource res) {
  
          ListConfigurationBean result = new ListConfigurationBean();
          try {
              CmsFile configFile = cms.readFile(res);
              CmsXmlContent content = CmsXmlContentFactory.unmarshal(cms, configFile);
              Locale locale = CmsLocaleManager.MASTER_LOCALE;
  
              if (!content.hasLocale(locale)) {
                  locale = content.getLocales().get(0);
              }
              for (String field : PARAMETER_FIELDS) {
                  String val = content.getStringValue(cms, field, locale);
                  if (N_CATEGORY.equals(field)) {
                      if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(val)) {
                          result.setCategories(Arrays.asList(val.split(",")));
                      } else {
                          result.setCategories(Collections.<String> emptyList());
                      }
                  } else {
                      result.setParameterValue(field, val);
                  }
              }
  
              I_CmsXmlContentValue restrictValue = content.getValue(N_DATE_RESTRICTION, locale);
              if (restrictValue != null) {
                  CmsDateRestrictionParser parser = new CmsDateRestrictionParser(cms);
                  I_CmsListDateRestriction restriction = parser.parse(new CmsXmlContentValueLocation(restrictValue));
                  if (restriction == null) {
                      LOG.warn(
                          "Improper date restriction configuration in content "
                              + content.getFile().getRootPath()
                              + ", online="
                              + cms.getRequestContext().getCurrentProject().isOnlineProject());
                  }
                  result.setDateRestriction(restriction);
              }
  
              I_CmsXmlContentValue categoryModeVal = content.getValue(N_CATEGORY_MODE, locale);
              CategoryMode categoryMode = CategoryMode.OR;
              if (categoryModeVal != null) {
                  try {
                      categoryMode = CategoryMode.valueOf(categoryModeVal.getStringValue(cms));
                  } catch (Exception e) {
                      LOG.error(e.getLocalizedMessage(), e);
                  }
              }
              result.setCategoryMode(categoryMode);
  
              LinkedHashMap<String, String> parameters = new LinkedHashMap<String, String>();
              for (I_CmsXmlContentValue parameter : content.getValues(N_PARAMETER, locale)) {
                  I_CmsXmlContentValue keyVal = content.getValue(parameter.getPath() + "/" + N_KEY, locale);
                  I_CmsXmlContentValue valueVal = content.getValue(parameter.getPath() + "/" + N_VALUE, locale);
                  if ((keyVal != null)
                      && CmsStringUtil.isNotEmptyOrWhitespaceOnly(keyVal.getStringValue(cms))
                      && (valueVal != null)) {
                      parameters.put(keyVal.getStringValue(cms), valueVal.getStringValue(cms));
                  }
              }
              result.setAdditionalParameters(parameters);
              List<String> displayTypes = new ArrayList<String>();
              List<I_CmsXmlContentValue> typeValues = content.getValues(N_DISPLAY_TYPE, locale);
              if (!typeValues.isEmpty()) {
                  for (I_CmsXmlContentValue value : typeValues) {
                      displayTypes.add(value.getStringValue(cms));
                  }
              }
              result.setDisplayTypes(displayTypes);
              List<String> folders = new ArrayList<String>();
              List<I_CmsXmlContentValue> folderValues = content.getValues(N_SEARCH_FOLDER, locale);
              if (!folderValues.isEmpty()) {
                  for (I_CmsXmlContentValue value : folderValues) {
                      CmsLink val = ((CmsXmlVfsFileValue)value).getLink(cms);
                      if (val != null) {
                          // we are using root paths
                          folders.add(cms.getRequestContext().addSiteRoot(val.getSitePath(cms)));
                      }
                  }
              }
              result.setFolders(folders);
              List<CmsUUID> blackList = new ArrayList<CmsUUID>();
              List<I_CmsXmlContentValue> blacklistValues = content.getValues(N_BLACKLIST, locale);
              if (!blacklistValues.isEmpty()) {
                  for (I_CmsXmlContentValue value : blacklistValues) {
                      CmsLink link = ((CmsXmlVfsFileValue)value).getLink(cms);
                      if (link != null) {
                          blackList.add(link.getStructureId());
                      }
                  }
              }
              result.setBlacklist(blackList);
          } catch (CmsException e) {
              e.printStackTrace();
          }
          return result;
      }