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

ImageFileBatchValidator

using kCura.WinEDDS.Exporters; using Relativity.DataExchange.Export.VolumeManagerV2.Metadata.Writers; using Relativity.DataExchange.Io; using Relativity.DataExchange.Logger; using Relativity.DataExchange.Resources; using Relativity.Logging; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Threading; namespace Relativity.DataExchange.Export.VolumeManagerV2.Batches { public class ImageFileBatchValidator : IBatchValidator { private readonly IErrorFileWriter _errorFileWriter; private readonly IFile _fileWrapper; private readonly IAppSettings _settings; private readonly ILog _logger; public ImageFileBatchValidator(IErrorFileWriter errorFileWriter, IFile fileWrapper, ILog logger) : this(errorFileWriter, fileWrapper, AppSettings.Instance, logger) { } public ImageFileBatchValidator(IErrorFileWriter errorFileWriter, IFile fileWrapper, IAppSettings settings, ILog logger) { _errorFileWriter = errorFileWriter.ThrowIfNull("errorFileWriter"); _fileWrapper = fileWrapper.ThrowIfNull("fileWrapper"); _settings = settings.ThrowIfNull("settings"); _logger = logger.ThrowIfNull<ILog>("logger"); } public void ValidateExportedBatch(ObjectExportInfo[] artifacts, CancellationToken cancellationToken) { for (int i = 0; i < artifacts.Length; i++) { if (cancellationToken.IsCancellationRequested) break; ValidateImagesForArtifact(artifacts[i]); } } private void ValidateImagesForArtifact(ObjectExportInfo artifact) { if (artifact.ImageCount != 0) { List<ImageExportInfo> list = artifact.Images.Cast<ImageExportInfo>().ToList(); if (list[0].SuccessfulRollup) { _logger.LogVerbose("Image {image} successfully rollup, so checking single image.", new object[1] { list[0].BatesNumber }); ValidateSingleImage(artifact, list[0]); } else { _logger.LogVerbose("Image {image} wasn't rollup, so checking multiple images.", new object[1] { list[0].BatesNumber }); foreach (ImageExportInfo item in list) { ValidateSingleImage(artifact, item); } } } } private void ValidateSingleImage(ObjectExportInfo artifact, ImageExportInfo image) { if (!string.IsNullOrWhiteSpace(image.FileGuid)) { bool flag = _fileWrapper.Exists(image.TempLocation); if (!flag || _fileWrapper.GetFileSize(image.TempLocation) == 0) { if (flag && !_settings.CreateErrorForEmptyNativeFile) _logger.LogVerbose("Image file {File} contains zero bytes for artifact {ArtifactId} but the export is configured to skip creating an error.", new object[2] { artifact.NativeTempLocation.Secure(), artifact.ArtifactID }); else { string errorText = string.Format(CultureInfo.CurrentCulture, flag ? ExportStrings.FileValidationZeroByteFile : ExportStrings.FileValidationFileMissing, artifact.ArtifactID); if (string.IsNullOrWhiteSpace(image.SourceLocation)) { errorText = string.Format(CultureInfo.CurrentCulture, ExportStrings.FileValidationEmptyRemoteSourcePath, artifact.ArtifactID); _logger.LogError("Image file remote source path is empty for image artifact {ArtifactId} and suggests a back-end database issue.", new object[1] { artifact.ArtifactID }); } else _logger.LogError(flag ? "Image file contains zero bytes for for image {BatesNumber} in {ArtifactId}." : "Image file is missing for for image {BatesNumber} in {ArtifactId}.", new object[2] { image.BatesNumber, artifact.ArtifactID }); _errorFileWriter.Write(ErrorFileWriter.ExportFileType.Image, artifact, image.TempLocation, errorText); } } } } } }