BatchSerializer
class BatchSerializer
using Relativity.DataTransfer.Nodes;
using Relativity.Transfer.Dto;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
namespace Relativity.Transfer.Enumeration.Batches
{
internal class BatchSerializer
{
private const string _FILE_NAME_TEMPLATE = "transfer-batch-{0}.json";
private readonly TransferPathFactory _transferPathFactory;
private readonly BatchingParameters _parameters;
private readonly IFileSerializer _fileSerializer;
public BatchSerializer(BatchingParameters parameters, IFileSerializer fileSerializer)
{
_parameters = parameters;
_fileSerializer = fileSerializer;
_transferPathFactory = new TransferPathFactory(_parameters.TransferPathParameters);
}
public SerializedBatch SerializeBatch(BatchNodesBuffer buffer, int batchNumber, long totalFiles)
{
List<TransferPathDto> list = buffer.GetNodes().Select((INode node, int index) => _transferPathFactory.Create(node, _parameters.SourceRootDirectory, _parameters.TransferPathParameters.TransferDirection, totalFiles + index)).Select(TransferPathDto.ConvertToDto)
.ToList();
string batchFileName = GetBatchFileName(batchNumber);
string file = Path.Combine(_parameters.BatchSerializationDirectory.AbsolutePath, batchFileName);
SerializedPathsBatchDto serializedPathsBatchDto = new SerializedPathsBatchDto {
BatchNumber = batchNumber,
LocalPaths = (_parameters.TransferPathParameters.TransferDirection == TransferDirection.Upload),
MinSourcePathId = ((list.Count > 0) ? list.Min((TransferPathDto x) => x.SourcePathId.GetValueOrDefault()) : 0),
MaxSourcePathId = ((list.Count > 0) ? list.Max((TransferPathDto x) => x.SourcePathId.GetValueOrDefault()) : 0),
TotalBatchCount = batchNumber,
TotalByteCount = buffer.CurrentBatchBytesSize,
TotalDirectoryCount = buffer.DirectoriesInCurrentBatch,
TotalFileCount = buffer.FilesInCurrentBatch
};
serializedPathsBatchDto.Paths.AddRange(list);
_fileSerializer.Serialize(serializedPathsBatchDto, file);
return new SerializedBatch {
BatchNumber = serializedPathsBatchDto.BatchNumber,
File = file,
LocalPaths = serializedPathsBatchDto.LocalPaths,
MinSourcePathId = serializedPathsBatchDto.MinSourcePathId,
MaxSourcePathId = serializedPathsBatchDto.MaxSourcePathId,
TotalBatchCount = batchNumber,
TotalByteCount = serializedPathsBatchDto.TotalByteCount,
TotalDirectoryCount = serializedPathsBatchDto.TotalDirectoryCount,
TotalFileCount = serializedPathsBatchDto.TotalFileCount
};
}
private static string GetBatchFileName(int batchNumber)
{
return string.Format(CultureInfo.InvariantCulture, "transfer-batch-{0}.json", batchNumber);
}
}
}