docs: private void createFolder(String foldername, int position, Hashtable properties) {
  
          String vfsFolderName = (String)m_fileIndex.get(foldername.replace('\\', '/'));
  
          m_report.print(Messages.get().container(Messages.RPT_CREATE_FOLDER_0), I_CmsReport.FORMAT_NOTE);
          m_report.print(
              org.opencms.report.Messages.get().container(org.opencms.report.Messages.RPT_ARGUMENT_1, vfsFolderName));
          m_report.print(org.opencms.report.Messages.get().container(org.opencms.report.Messages.RPT_DOTS_0));
  
          if (vfsFolderName != null) {
              String path = vfsFolderName.substring(
                  0,
                  vfsFolderName.substring(0, vfsFolderName.length() - 1).lastIndexOf("/"));
              String folder = vfsFolderName.substring(path.length(), vfsFolderName.length());
              try {
                  // try to find a meta.properties file in the folder
                  String propertyFileName = foldername + File.separator + META_PROPERTIES;
  
                  boolean metaPropertiesFound = false;
                  CmsParameterConfiguration propertyFile = new CmsParameterConfiguration();
                  try {
                      propertyFile.load(new FileInputStream(new File(propertyFileName)));
                      metaPropertiesFound = true;
                  } catch (Exception e1) {
                      // do nothing if the property file could not be loaded since it is not required
                      // that such s file does exist
                  }
                  // now copy all values from the property file to the already found properties of the
                  // new folder in OpenCms
                  // only do this if we have found a meta.properties file
                  if (metaPropertiesFound) {
                      properties.putAll(propertyFile);
  
                      // check if we have to set the navpos property.
                      if (properties.get(CmsPropertyDefinition.PROPERTY_NAVPOS) == null) {
                          // set the position in the folder as navpos
                          // we have to add one to the position, since it is counted from 0
                          properties.put(CmsPropertyDefinition.PROPERTY_NAVPOS, (position + 1) + "");
                      }
                      // check if we have to set the navpos property.
                      if (properties.get(CmsPropertyDefinition.PROPERTY_NAVTEXT) == null) {
                          // set the foldername in the folder as navtext
                          String navtext = folder.substring(1, 2).toUpperCase()
                              + folder.substring(2, folder.length() - 1);
                          properties.put(CmsPropertyDefinition.PROPERTY_NAVTEXT, navtext);
                      }
                  } else {
                      // if there was no meta.properties file, no properties should be added to the
                      // folder
                      properties = new Hashtable();
                  }
                  // try to read the folder, it its there we must not create it again
                  try {
                      m_cmsObject.readFolder(path + folder);
                      m_cmsObject.lockResource(path + folder);
                  } catch (CmsException e1) {
                      // the folder was not there, so create it
                      m_cmsObject.createResource(
                          path + folder,
                          OpenCms.getResourceManager().getResourceType(
                              CmsResourceTypeFolder.getStaticTypeName()).getTypeId());
                  }
                  // create all properties and put them in an ArrayList
                  Enumeration enu = properties.keys();
                  List propertyList = new ArrayList();
                  while (enu.hasMoreElements()) {
                      // get property and value
                      String propertyKey = (String)enu.nextElement();
                      String propertyVal = (String)properties.get(propertyKey);
                      CmsProperty property = new CmsProperty(propertyKey, propertyVal, propertyVal);
                      // create implicitly if Property doesn't exist already
                      property.setAutoCreatePropertyDefinition(true);
                      // add new property to the list
                      propertyList.add(property);
                  }
                  // try to write the property Objects
                  try {
                      m_cmsObject.writePropertyObjects(path + folder, propertyList);
                  } catch (CmsException e1) {
                      e1.printStackTrace();
                  }
                  m_report.println(
                      org.opencms.report.Messages.get().container(org.opencms.report.Messages.RPT_OK_0),
                      I_CmsReport.FORMAT_OK);
              } catch (CmsException e) {
                  m_report.println(e);
                  LOG.error(e.getLocalizedMessage(), e);
              }
          }
      }