protected ExportResult<?> copyIteration(
      UUID jobId,
      AuthData exportAuthData,
      AuthData importAuthData,
      Optional<ExportInformation> exportInformation,
      String jobIdPrefix,
      int copyIteration)
      throws CopyException {
    monitor.debug(() -> jobIdPrefix + "Copy iteration: " + copyIteration);

    ExportResult<?> exportResult =
        exportIteration(jobId, exportAuthData, exportInformation, jobIdPrefix, copyIteration);

    DataModel exportedData = exportResult.getExportedData();
    if (exportedData != null) {
      PortabilityJob job = jobStore.findJob(jobId);
      TransferMode transferMode =
          job.transferMode() == null ? TransferMode.DATA_TRANSFER : job.transferMode();
      switch (transferMode) {
        case DATA_TRANSFER:
          importIteration(jobId, importAuthData, jobIdPrefix, copyIteration, exportedData);
          break;
        case SIZE_CALCULATION:
          sizeCalculationIteration(jobId, jobIdPrefix, exportedData);
          break;
        default:
          throw new IllegalStateException(
              "Job mode " + transferMode.name() + " is not supported by "
                  + getClass().getSimpleName());
      }
    }

    return exportResult;
  }
Kicks off transfer job {@code jobId} from {@code exporter} to {@code importer}.
portability-transfer/src/main/java/org/datatransferproject/transfer/copier/PortabilityAbstractInMemoryDataCopier.java