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