<PackageReference Include="Relativity.Server.Import.SDK" Version="2.9.2" />

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); } } }