BatchSerializer
using System;
using System.Threading.Tasks;
namespace Relativity.Transfer
{
internal class BatchSerializer : IBatchSerializer
{
private readonly PathEnumeratorContext context;
private readonly IPathValidationProvider pathValidator;
internal PathSearchStorage Storage { get; }
internal BatchSerializer(string batchDirectory, PathEnumeratorContext context, IPathValidationProvider pathValidator, ITransferLog logger)
: this(batchDirectory, TransferDirection.Upload, context, pathValidator, logger)
{
}
internal BatchSerializer(string batchDirectory, TransferDirection direction, PathEnumeratorContext context, IPathValidationProvider pathValidator, ITransferLog logger)
{
if (context == null)
throw new ArgumentNullException("context");
if (pathValidator == null)
throw new ArgumentNullException("pathValidator");
if (logger == null)
throw new ArgumentNullException("logger");
this.pathValidator = pathValidator;
this.context = context;
Storage = new PathSearchStorage(context, new JsonFileSerializer(), logger) {
BatchDirectory = batchDirectory,
LocalPaths = (direction == TransferDirection.Upload),
StartTime = DateTime.Now
};
}
public void AddTransferPath(TransferPath path)
{
PathValidationResult pathValidationResult = pathValidator.Validate(path);
Storage.Add(path, pathValidationResult);
if (pathValidationResult.IsOk)
context.PublishProgress(false, Storage);
}
public Task<SerializedPathsResult> CreateBatchAsync()
{
Storage.Save(true);
return Task.FromResult(new SerializedPathsResult(context.SearchPaths, Storage.SerializedPaths, Storage.PathErrors, true, DateTime.Now - Storage.StartTime));
}
}
}