ImageExportRequestBuilder
using Castle.Core;
using kCura.WinEDDS.Exporters;
using Relativity.DataExchange.Export.VolumeManagerV2.Directories;
using Relativity.DataExchange.Export.VolumeManagerV2.Statistics;
using Relativity.DataExchange.Logger;
using Relativity.Logging;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
namespace Relativity.DataExchange.Export.VolumeManagerV2.Download
{
public class ImageExportRequestBuilder : IExportRequestBuilder
{
private readonly IFilePathProvider _filePathProvider;
private readonly IExportFileValidator _validator;
private readonly IFileProcessingStatistics _fileProcessingStatistics;
private readonly ILog _logger;
public ImageExportRequestBuilder(ImageFilePathProvider filePathProvider, IExportFileValidator validator, ILog logger, IFileProcessingStatistics fileProcessingStatistics)
: this((IFilePathProvider)filePathProvider, validator, logger, fileProcessingStatistics)
{
}
[DoNotSelect]
public ImageExportRequestBuilder(IFilePathProvider filePathProvider, IExportFileValidator validator, ILog logger, IFileProcessingStatistics fileProcessingStatistics)
{
_filePathProvider = filePathProvider;
_validator = validator;
_logger = logger;
_fileProcessingStatistics = fileProcessingStatistics;
}
public IList<ExportRequest> Create(ObjectExportInfo artifact, CancellationToken cancellationToken)
{
List<ExportRequest> list = new List<ExportRequest>();
_logger.LogVerbose("Creating image files ExportRequests for artifact {artifactId}.", new object[1] {
artifact.ArtifactID
});
foreach (ImageExportInfo item in artifact.Images.Cast<ImageExportInfo>()) {
if (cancellationToken.IsCancellationRequested)
return Enumerable.Empty<ExportRequest>().ToList();
if (TryCreate(artifact, item, out ExportRequest exportRequest))
list.Add(exportRequest);
}
return list;
}
private bool TryCreate(ObjectExportInfo artifact, ImageExportInfo image, out ExportRequest exportRequest)
{
if (string.IsNullOrWhiteSpace(image.FileGuid)) {
_logger.LogInformation("Image {imageId} has no GUID so assuming there is nothing to download.", new object[1] {
image.ArtifactID
});
exportRequest = null;
return false;
}
_logger.LogVerbose("Creating image file ExportRequest for image {image}.", new object[1] {
image.FileName.Secure()
});
string text = image.TempLocation = GetExportDestinationLocation(artifact, image);
string warningUserMessage = "Overwriting image for " + image.BatesNumber + ".";
if (!_validator.CanExport(text, warningUserMessage)) {
_logger.LogVerbose("File {file} already exists - updating statistics.", new object[1] {
text.Secure()
});
_fileProcessingStatistics.UpdateStatisticsForFile(text);
exportRequest = null;
return false;
}
_logger.LogVerbose("Image file will be export to {destinationLocation}.", new object[1] {
text.Secure()
});
exportRequest = PhysicalFileExportRequest.CreateRequestForImage(image, text);
return true;
}
private string GetExportDestinationLocation(ObjectExportInfo artifact, ImageExportInfo image)
{
string fileName = image.FileName;
return _filePathProvider.GetPathForFile(fileName, artifact.ArtifactID);
}
}
}