private Metadata newMetadata() {
    int val = _incMetadata.incrementAndGet();
    Metadata metadata = new Metadata().setUuid("uuid" + val).setData("metadata" + val);
    metadata.getDataInfo().setSchemaId("customSchema" + val);
    metadata.getSourceInfo().setSourceId("source" + val);
    metadata.getSourceInfo().setOwner(1);
    metadata.getHarvestInfo().setUuid("huuid" + val);
    metadata.getHarvestInfo().setHarvested(val % 2 == 0);

    return metadata;
  }
  /**
   * Create a metadata folder according to MEF {@link Version} 2 specification. If current record is
   * based on an ISO profil, the stylesheet /convert/to19139.xsl is used to map to ISO. Both files
   * are included in MEF file. Export relevant information according to format parameter.
   *
   * @param context
   * @param uuid Metadata record to export
   * @param zipFs Zip file to add new record
   * @param skipUUID
   * @param stylePath
   * @param format
   * @throws Exception
   */
  private static void createMetadataFolder(
      ServiceContext context,
      String uuid,
      FileSystem zipFs,
      boolean skipUUID,
      Path stylePath,
      Format format,
      boolean resolveXlink,
      boolean removeXlinkAttribute)
      throws Exception {

    final Path metadataRootDir = zipFs.getPath(uuid);
    Files.createDirectories(metadataRootDir);

    Pair<Metadata, String> recordAndMetadataForExport =
        MEFLib.retrieveMetadata(context, uuid, resolveXlink, removeXlinkAttribute);
    Metadata record = recordAndMetadataForExport.one();
    String xmlDocumentAsString = recordAndMetadataForExport.two();

    String id = "" + record.getId();
    String isTemp = record.getDataInfo().getType().codeString;

    if (!"y".equals(isTemp) && !"n".equals(isTemp))
      throw new Exception("Cannot export sub template");

    Path pubDir = Lib.resource.getDir(context, "public", id);
    Path priDir = Lib.resource.getDir(context, "private", id);

    final Path metadataXmlDir = metadataRootDir.resolve(MD_DIR);
    Files.createDirectories(metadataXmlDir);

    Collection<ExportFormat> formats =
        context.getApplicationContext().getBeansOfType(ExportFormat.class).values();
    for (ExportFormat exportFormat : formats) {
      for (Pair<String, String> output : exportFormat.getFormats(context, record)) {
        Files.write(metadataXmlDir.resolve(output.one()), output.two().getBytes(CHARSET));
      }
    }

    // --- save native metadata
    Files.write(metadataXmlDir.resolve(FILE_METADATA), xmlDocumentAsString.getBytes(CHARSET));

    // --- save Feature Catalog
    String ftUUID = getFeatureCatalogID(context, record.getId());
    if (!ftUUID.equals("")) {
      Pair<Metadata, String> ftrecordAndMetadata =
          MEFLib.retrieveMetadata(context, ftUUID, resolveXlink, removeXlinkAttribute);
      Path featureMdDir = metadataRootDir.resolve(SCHEMA);
      Files.createDirectories(featureMdDir);
      Files.write(featureMdDir.resolve(FILE_METADATA), ftrecordAndMetadata.two().getBytes(CHARSET));
    }

    // --- save info file
    byte[] binData =
        MEFLib.buildInfoFile(context, record, format, pubDir, priDir, skipUUID)
            .getBytes(Constants.ENCODING);

    Files.write(metadataRootDir.resolve(FILE_INFO), binData);

    // --- save thumbnails and maps

    if (format == Format.PARTIAL || format == Format.FULL) {
      IO.copyDirectoryOrFile(pubDir, metadataRootDir, true);
    }

    if (format == Format.FULL) {
      try {
        Lib.resource.checkPrivilege(context, id, ReservedOperation.download);
        IO.copyDirectoryOrFile(priDir, metadataRootDir, true);
      } catch (Exception e) {
        // Current user could not download private data
      }
    }
  }