ExportRequestBuilder
using kCura.WinEDDS;
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 abstract class ExportRequestBuilder : IExportRequestBuilder
{
protected readonly IFileNameProvider FileNameProvider;
private readonly IFilePathProvider _filePathProvider;
private readonly IExportFileValidator _validator;
private readonly IFileProcessingStatistics _fileProcessingStatistics;
private readonly ILog _logger;
protected ExportRequestBuilder(IFilePathProvider filePathProvider, IFileNameProvider fileNameProvider, IExportFileValidator validator, IFileProcessingStatistics fileProcessingStatistics, ILog logger)
{
_filePathProvider = filePathProvider;
FileNameProvider = fileNameProvider;
_validator = validator;
_fileProcessingStatistics = fileProcessingStatistics;
_logger = logger;
}
public IList<ExportRequest> Create(ObjectExportInfo artifact, CancellationToken cancellationToken)
{
if (!IsFileToExport(artifact)) {
_logger.LogVerbose("No native file to export for artifact {artifactId}.", new object[1] {
artifact.ArtifactID
});
return Enumerable.Empty<ExportRequest>().ToList();
}
_logger.LogVerbose("Creating native file ExportRequest for artifact {artifactId}.", new object[1] {
artifact.ArtifactID
});
if (cancellationToken.IsCancellationRequested)
return Enumerable.Empty<ExportRequest>().ToList();
string text = RetrieveFileNameAndDestinationLocation(artifact);
string warningUserMessage = "Overwriting document " + text + ".";
if (!_validator.CanExport(text, warningUserMessage)) {
_logger.LogVerbose("File {file} already exists - updating statistics.", new object[1] {
text.Secure()
});
_fileProcessingStatistics.UpdateStatisticsForFile(text);
return new List<ExportRequest>();
}
_logger.LogVerbose("Native file for artifact {artifactId} will be export to {destinationLocation}.", new object[2] {
artifact.ArtifactID,
text.Secure()
});
return CreateExportRequest(artifact, text).InList();
}
protected virtual string RetrieveFileNameAndDestinationLocation(ObjectExportInfo artifact)
{
string fileName = GetFileName(artifact);
string exportDestinationLocation = GetExportDestinationLocation(fileName, artifact.ArtifactID);
SaveDestinationLocation(artifact, exportDestinationLocation);
return exportDestinationLocation;
}
protected abstract ExportRequest CreateExportRequest(ObjectExportInfo artifact, string destinationLocation);
protected abstract bool IsFileToExport(ObjectExportInfo artifact);
protected virtual string GetFileName(ObjectExportInfo artifact)
{
return FileNameProvider.GetName(artifact);
}
protected virtual void SaveDestinationLocation(ObjectExportInfo artifact, string destinationLocation)
{
artifact.NativeTempLocation = destinationLocation;
}
private string GetExportDestinationLocation(string fileName, int artifactId)
{
return _filePathProvider.GetPathForFile(fileName, artifactId);
}
}
}