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