ImageLoadFileMetadataBuilder
using kCura.WinEDDS.Exporters;
using Relativity.DataExchange.Export.VolumeManagerV2.Metadata.Writers;
using Relativity.Logging;
using System;
using System.Threading;
namespace Relativity.DataExchange.Export.VolumeManagerV2.Metadata.Images
{
    public class ImageLoadFileMetadataBuilder : IImageLoadFileMetadataBuilder
    {
        private readonly IImageLoadFileMetadataForArtifactBuilder _forArtifactBuilder;
        private readonly IImageLoadFileMetadataForArtifactBuilder _unsuccessfulRollupForArtifactBuilder;
        private readonly IRetryableStreamWriter _writer;
        private readonly ILog _logger;
        public ImageLoadFileMetadataBuilder(IImageLoadFileMetadataForArtifactBuilder forArtifactBuilder, IImageLoadFileMetadataForArtifactBuilder unsuccessfulRollupForArtifactBuilder, IRetryableStreamWriter writer, ILog logger)
        {
            _forArtifactBuilder = forArtifactBuilder;
            _unsuccessfulRollupForArtifactBuilder = unsuccessfulRollupForArtifactBuilder;
            _logger = logger;
            _writer = writer;
        }
        public void CreateLoadFileEntries(ObjectExportInfo[] artifacts, CancellationToken cancellationToken)
        {
            _logger.LogVerbose("Creating metadata for image load file for current batch.", Array.Empty<object>());
            _writer.InitializeFile(cancellationToken);
            foreach (ObjectExportInfo objectExportInfo in artifacts) {
                if (cancellationToken.IsCancellationRequested)
                    return;
                _logger.LogVerbose("Creating image load file entry for artifact {artifactId}.", new object[1] {
                    objectExportInfo.ArtifactID
                });
                if (objectExportInfo.Images.Count > 0) {
                    ImageExportInfo imageExportInfo = (ImageExportInfo)objectExportInfo.Images[0];
                    if (imageExportInfo.SuccessfulRollup) {
                        _logger.LogVerbose("Rollup successful for image {batesNumber}. Continuing with default metadata builder.", new object[1] {
                            imageExportInfo.BatesNumber
                        });
                        _forArtifactBuilder.WriteLoadFileEntry(objectExportInfo, _writer, cancellationToken);
                    } else {
                        _logger.LogVerbose("Rollup unsuccessful for image {batesNumber}. Continuing with metadata builder for unsuccessful rollup.", new object[1] {
                            imageExportInfo.BatesNumber
                        });
                        _unsuccessfulRollupForArtifactBuilder.WriteLoadFileEntry(objectExportInfo, _writer, cancellationToken);
                    }
                } else
                    _logger.LogVerbose("No images for artifact {artifactId}.", new object[1] {
                        objectExportInfo.ArtifactID
                    });
            }
            _logger.LogVerbose("Successfully create metadata for images.", Array.Empty<object>());
        }
    }
}