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

FileStorageSearch

using Relativity.Transfer.Resources; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; namespace Relativity.Transfer { internal class FileStorageSearch : IFileStorageSearch { private readonly ITransferLog transferLog; private readonly IServiceFactory serviceFactory; public RelativityConnectionInfo ConnectionInfo { get; } public int MaxRetryAttempts { get; set; } public double TimeoutSeconds { get; set; } public FileStorageSearch(RelativityConnectionInfo connectionInfo, ClientConfiguration configuration, ITransferLog log) : this(connectionInfo, new ServiceFactory(connectionInfo, configuration, log), log, configuration.MaxHttpRetryAttempts, configuration.HttpTimeoutSeconds) { } internal FileStorageSearch(RelativityConnectionInfo connectionInfo, IServiceFactory serviceFactory, ITransferLog log) : this(connectionInfo, serviceFactory, log, 5, 300) { } private FileStorageSearch(RelativityConnectionInfo connectionInfo, IServiceFactory serviceFactory, ITransferLog log, int maxRetryAttempts, double timeoutSeconds) { if (connectionInfo == null) throw new ArgumentNullException("connectionInfo"); if (serviceFactory == null) throw new ArgumentNullException("serviceFactory"); if (log == null) throw new ArgumentNullException("log"); this.serviceFactory = serviceFactory; transferLog = log; ConnectionInfo = connectionInfo; MaxRetryAttempts = maxRetryAttempts; TimeoutSeconds = timeoutSeconds; } public Task<FileStorageSearchResults> SearchAsync() { return SearchAsync(CancellationToken.None); } public Task<FileStorageSearchResults> SearchAsync(CancellationToken token) { return SearchAsync(FileStorageSearchContext.Empty, token); } public Task<FileStorageSearchResults> SearchAsync(FileStorageSearchContext context) { return SearchAsync(context, CancellationToken.None); } [AsyncStateMachine(typeof(<SearchAsync>d__19))] public Task<FileStorageSearchResults> SearchAsync(FileStorageSearchContext context, CancellationToken token) { <SearchAsync>d__19 stateMachine = default(<SearchAsync>d__19); stateMachine.<>t__builder = AsyncTaskMethodBuilder<FileStorageSearchResults>.Create(); stateMachine.<>4__this = this; stateMachine.context = context; stateMachine.token = token; stateMachine.<>1__state = -1; stateMachine.<>t__builder.Start(ref stateMachine); return stateMachine.<>t__builder.Task; } private static bool ValidateCloudRelativityFileShare(RelativityFileShareBase fileShare, bool validateUrl) { try { bool flag = string.IsNullOrEmpty(fileShare.Error) && fileShare.AsperaCredential != (AsperaCredential)null && !string.IsNullOrEmpty(fileShare.DocRoot) && !string.IsNullOrEmpty(fileShare.Name); if (validateUrl) flag = (flag && !string.IsNullOrEmpty(fileShare.Url)); return flag; } catch (Exception) { return false; } } [AsyncStateMachine(typeof(<GetAllResourceServersAsync>d__21))] private Task<IEnumerable<ResourceServer>> GetAllResourceServersAsync(CancellationToken token) { <GetAllResourceServersAsync>d__21 stateMachine = default(<GetAllResourceServersAsync>d__21); stateMachine.<>t__builder = AsyncTaskMethodBuilder<IEnumerable<ResourceServer>>.Create(); stateMachine.<>4__this = this; stateMachine.token = token; stateMachine.<>1__state = -1; stateMachine.<>t__builder.Start(ref stateMachine); return stateMachine.<>t__builder.Task; } [AsyncStateMachine(typeof(<GetResourceServersByResourcePoolConditionAsync>d__22))] private Task<IEnumerable<ResourceServer>> GetResourceServersByResourcePoolConditionAsync(string condition, CancellationToken token) { <GetResourceServersByResourcePoolConditionAsync>d__22 stateMachine = default(<GetResourceServersByResourcePoolConditionAsync>d__22); stateMachine.<>t__builder = AsyncTaskMethodBuilder<IEnumerable<ResourceServer>>.Create(); stateMachine.<>4__this = this; stateMachine.condition = condition; stateMachine.token = token; stateMachine.<>1__state = -1; stateMachine.<>t__builder.Start(ref stateMachine); return stateMachine.<>t__builder.Task; } [AsyncStateMachine(typeof(<GetResourceServerConditionSearchResultsAsync>d__23))] private Task<FileStorageSearchResults> GetResourceServerConditionSearchResultsAsync(string condition, bool cloudInstance, CancellationToken token) { <GetResourceServerConditionSearchResultsAsync>d__23 stateMachine = default(<GetResourceServerConditionSearchResultsAsync>d__23); stateMachine.<>t__builder = AsyncTaskMethodBuilder<FileStorageSearchResults>.Create(); stateMachine.<>4__this = this; stateMachine.condition = condition; stateMachine.cloudInstance = cloudInstance; stateMachine.token = token; stateMachine.<>1__state = -1; stateMachine.<>t__builder.Start(ref stateMachine); return stateMachine.<>t__builder.Task; } [AsyncStateMachine(typeof(<GetWorkspaceConditionSearchResultsAsync>d__24))] private Task<FileStorageSearchResults> GetWorkspaceConditionSearchResultsAsync(string condition, bool cloudInstance, CancellationToken token) { <GetWorkspaceConditionSearchResultsAsync>d__24 stateMachine = default(<GetWorkspaceConditionSearchResultsAsync>d__24); stateMachine.<>t__builder = AsyncTaskMethodBuilder<FileStorageSearchResults>.Create(); stateMachine.<>4__this = this; stateMachine.condition = condition; stateMachine.cloudInstance = cloudInstance; stateMachine.token = token; stateMachine.<>1__state = -1; stateMachine.<>t__builder.Start(ref stateMachine); return stateMachine.<>t__builder.Task; } [AsyncStateMachine(typeof(<GetRelativityFileSharesAsync>d__25))] private Task<IEnumerable<RelativityFileShare>> GetRelativityFileSharesAsync(IEnumerable<ResourceServer> resourceServers, bool cloudInstance, CancellationToken token) { <GetRelativityFileSharesAsync>d__25 stateMachine = default(<GetRelativityFileSharesAsync>d__25); stateMachine.<>t__builder = AsyncTaskMethodBuilder<IEnumerable<RelativityFileShare>>.Create(); stateMachine.<>4__this = this; stateMachine.resourceServers = resourceServers; stateMachine.cloudInstance = cloudInstance; stateMachine.token = token; stateMachine.<>1__state = -1; stateMachine.<>t__builder.Start(ref stateMachine); return stateMachine.<>t__builder.Task; } private IEnumerable<RelativityFileShare> GetRelativityFileShares(IEnumerable<FileShareResourceServer> fileShareResourceServers, bool cloudInstance) { List<RelativityFileShare> list = new List<RelativityFileShare>(); foreach (FileShareResourceServer fileShareResourceServer in fileShareResourceServers) { string docRoot = null; string error = null; if (cloudInstance) try { if (fileShareResourceServer.AsperaCredential == (AsperaCredential)null) error = CoreStrings.FileShareTransferCredentialDoesNotExistErrorMessage; else docRoot = UncPathToDocRootConverter.Convert(fileShareResourceServer.UncPath, true); } catch (Exception ex) { error = ex.Message; } list.Add(new RelativityFileShare(fileShareResourceServer, docRoot, error)); } return list; } [AsyncStateMachine(typeof(<GetRelativityBulkLoadFileSharesAsync>d__27))] private Task<IEnumerable<RelativityBulkLoadFileShare>> GetRelativityBulkLoadFileSharesAsync(IEnumerable<ResourceServer> resourceServers, bool cloudInstance, CancellationToken token) { <GetRelativityBulkLoadFileSharesAsync>d__27 stateMachine = default(<GetRelativityBulkLoadFileSharesAsync>d__27); stateMachine.<>t__builder = AsyncTaskMethodBuilder<IEnumerable<RelativityBulkLoadFileShare>>.Create(); stateMachine.<>4__this = this; stateMachine.resourceServers = resourceServers; stateMachine.cloudInstance = cloudInstance; stateMachine.token = token; stateMachine.<>1__state = -1; stateMachine.<>t__builder.Start(ref stateMachine); return stateMachine.<>t__builder.Task; } private IEnumerable<RelativityBulkLoadFileShare> GetRelativityBulkLoadFileShares(IEnumerable<SqlResourceServer> sqlResourceServers, bool cloudInstance) { List<RelativityBulkLoadFileShare> list = new List<RelativityBulkLoadFileShare>(); foreach (SqlResourceServer sqlResourceServer in sqlResourceServers) { string docRoot = null; string error = null; if (cloudInstance) try { if (sqlResourceServer.AsperaCredential == (AsperaCredential)null) error = CoreStrings.SqlResourceAsperaCredentialDoesNotExistErrorMessage; else if (sqlResourceServer.AsperaCredential == (AsperaCredential)null) { error = CoreStrings.SqlResourceTransferCredentialDoesNotExistErrorMessage; } else { docRoot = sqlResourceServer.BcpPath; } } catch (Exception ex) { error = ex.Message; } list.Add(new RelativityBulkLoadFileShare(sqlResourceServer, docRoot, error)); } return list; } private FileStorageSearchResults CreateFileStorageSearchResults(IEnumerable<RelativityFileShare> fileShares, IEnumerable<RelativityBulkLoadFileShare> bulkLoadFileShares, bool cloudInstance) { List<RelativityFileShare> list = new List<RelativityFileShare>(); List<RelativityFileShare> list2 = new List<RelativityFileShare>(); List<RelativityBulkLoadFileShare> list3 = new List<RelativityBulkLoadFileShare>(); List<RelativityBulkLoadFileShare> list4 = new List<RelativityBulkLoadFileShare>(); foreach (RelativityFileShare fileShare in fileShares) { if (!cloudInstance || ValidateCloudRelativityFileShare(fileShare, true)) list2.Add(fileShare); else list.Add(fileShare); } foreach (RelativityBulkLoadFileShare bulkLoadFileShare in bulkLoadFileShares) { if (!cloudInstance || ValidateCloudRelativityFileShare(bulkLoadFileShare, false)) list3.Add(bulkLoadFileShare); else list4.Add(bulkLoadFileShare); } list2 = list2.Except(list).ToList(); list3 = list3.Except(list4).ToList(); return new FileStorageSearchResults(ConnectionInfo, cloudInstance, list2, list, list3, list4); } } }