LoadFileWriter
using kCura.WinEDDS.Exporters;
using kCura.WinEDDS.LoadFileEntry;
using Relativity.Logging;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
namespace Relativity.DataExchange.Export.VolumeManagerV2.Metadata.Writers
{
public class LoadFileWriter
{
private readonly ILog _logger;
public LoadFileWriter(ILog logger)
{
_logger = logger;
}
public void Write(StreamWriter streamWriter, IDictionary<int, ILoadFileEntry> linesToWrite, IEnumerator<ObjectExportInfo> artifacts, CancellationToken cancellationToken)
{
if (linesToWrite == null || linesToWrite.Count == 0)
_logger.LogVerbose("No lines to write to load file - skipping.", Array.Empty<object>());
else {
_logger.LogVerbose("Writing to load file with retry policy.", Array.Empty<object>());
WriteHeaderIfNeeded(streamWriter, linesToWrite);
WriteArtifacts(streamWriter, linesToWrite, artifacts, cancellationToken);
}
}
private void WriteHeaderIfNeeded(StreamWriter streamWriter, IDictionary<int, ILoadFileEntry> linesToWrite)
{
if (linesToWrite.TryGetValue(-1, out ILoadFileEntry value)) {
_logger.LogVerbose("Writing header to load file.", Array.Empty<object>());
value?.Write(ref streamWriter);
}
}
private void WriteArtifacts(StreamWriter streamWriter, IDictionary<int, ILoadFileEntry> linesToWrite, IEnumerator<ObjectExportInfo> artifacts, CancellationToken cancellationToken)
{
while (artifacts.MoveNext() && !cancellationToken.IsCancellationRequested) {
if (linesToWrite.TryGetValue(artifacts.Current.ArtifactID, out ILoadFileEntry value)) {
_logger.LogVerbose("Writing entry to load file for artifact {artifactId}.", new object[1] {
artifacts.Current.ArtifactID
});
value?.Write(ref streamWriter);
}
}
}
}
}