<PackageReference Include="Relativity.Server.Transfer.SDK" Version="7.7.0" />

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