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

TransferPathFactory

using Relativity.DataTransfer.Nodes; using Relativity.Transfer.Paths; using System; using System.Text; namespace Relativity.Transfer.Enumeration.Batches { internal class TransferPathFactory { private readonly TransferPathParameters _parameters; public TransferPathFactory(TransferPathParameters parameters) { _parameters = parameters; } public TransferPath Create(INode node, INode rootNode, TransferDirection direction, long fileNumber = 0) { IDirectory directory = node as IDirectory; if (directory != null) return CreateTransferPathForEmptyDirectory(rootNode, directory, fileNumber, direction); IFile file = node as IFile; if (file != null) return CreateFileTransferPath(rootNode, file, fileNumber, direction); throw new ArgumentException("node"); } private TransferPath CreateFileTransferPath(INode rootNode, IFile fileItem, long fileNumber, TransferDirection direction) { string targetPath = GetTargetPath(rootNode, fileItem); return new TransferPath(fileItem.AbsolutePath, TransferPathAttributes.File, targetPath, direction, fileItem.Name, fileItem.Size) { Order = Convert.ToInt32(fileNumber) }; } private TransferPath CreateTransferPathForEmptyDirectory(INode rootNode, INode emptyDirectoryNode, long fileNumber, TransferDirection direction) { string targetPath = GetTargetPath(rootNode, emptyDirectoryNode); return new TransferPath(emptyDirectoryNode.AbsolutePath, TransferPathAttributes.Directory | TransferPathAttributes.Empty, targetPath, direction) { Order = Convert.ToInt32(fileNumber) }; } private string GetTargetPath(INode rootNode, INode node) { if (!_parameters.PreserveDirectories) return _parameters.TargetDirectory.AbsolutePath; string subDirectory = rootNode.FindRelativePath(node); return BuildTargetPath(_parameters.TargetDirectory.AbsolutePath, subDirectory); } private string BuildTargetPath(string targetPath, string subDirectory) { StringBuilder stringBuilder = new StringBuilder(targetPath); if (stringBuilder.Length <= 0) return stringBuilder.ToString(); if (!string.IsNullOrEmpty(subDirectory)) { stringBuilder.Append(PathConstants.DirectorySeparatorAsString); stringBuilder.Append(subDirectory); } if (_parameters.IsTargetPathUnix) stringBuilder.Replace(PathConstants.DirectorySeparatorAsString, PathConstants.UnixDirectorySeparator); else stringBuilder.Replace(PathConstants.UnixDirectorySeparator, PathConstants.WindowsSingleCharDirectorySeparator.ToString()); return stringBuilder.ToString(); } } }