WebApiInstanceSettingsRetriever
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Runtime.Serialization;
using System.Threading;
using System.Threading.Tasks;
using System;
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.Runtime.Serialization;
using System.CodeDom.Compiler;
using System.ComponentModel;
namespace Relativity.Transfer
{
[GeneratedCode("wsdl", "4.6.1055.0")]
public delegate void RemoveFillCompletedEventHandler (object sender, AsyncCompletedEventArgs e);
}
namespace Relativity.Transfer
{
[Serializable]
public class RelativityNotSupportedException : Exception
{
public RelativityNotSupportedException()
{
}
public RelativityNotSupportedException(string message)
: base(message)
{
}
public RelativityNotSupportedException(string message, Exception innerException)
: base(message, innerException)
{
}
protected RelativityNotSupportedException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
public override void GetObjectData(SerializationInfo info, StreamingContext context)
{
if (info == null)
throw new ArgumentNullException("info");
base.GetObjectData(info, context);
}
}
}
namespace Relativity.Transfer
{
internal class WebApiInstanceSettingsRetriever : IInstanceSettingRetriever
{
private readonly IRelativityServiceFactory serviceFactory;
private readonly RelativityConnectionInfo connectionInfo;
private readonly ITransferLog transferLog;
public WebApiInstanceSettingsRetriever(IRelativityServiceFactory serviceFactory, RelativityConnectionInfo connectionInfo, ITransferLog transferLog)
{
this.transferLog = transferLog;
this.connectionInfo = connectionInfo;
this.serviceFactory = serviceFactory;
}
public async Task<IEnumerable<InstanceSetting>> GetAllAsync(CancellationToken token)
{
using (MemoryCacheRepository cacheRepository = new MemoryCacheRepository(TransferCache.Default)) {
WebApiInstanceSettingsRetriever webApiInstanceSettingsRetriever = default(WebApiInstanceSettingsRetriever);
string key = CoreMemoryCacheKeys.CreateInstanceSettingsKey(webApiInstanceSettingsRetriever.connectionInfo.Host);
IEnumerable<InstanceSetting> instanceSettings2 = cacheRepository.SelectByKey<List<InstanceSetting>>(key);
if (instanceSettings2 != null)
return instanceSettings2;
CancellationToken token2 = default(CancellationToken);
instanceSettings2 = await webApiInstanceSettingsRetriever.GetAllFromRelativityAsync(token2).ConfigureAwait(false);
cacheRepository.Upsert(key, instanceSettings2);
return instanceSettings2;
}
}
private async Task<IEnumerable<InstanceSetting>> GetAllFromRelativityAsync(CancellationToken token)
{
List<InstanceSetting> instanceSettings = new List<InstanceSetting>();
ClientConfiguration configuration = new ClientConfiguration();
using (IUserManagerService userManagerService = serviceFactory.CreateUserManagerService(configuration))
using (IRelativityManagerService relativityManagerService = serviceFactory.CreateRelativityManagerService(userManagerService, configuration)) {
transferLog.LogDebug("Preparing to retrieve instance settings from the '{Host}' Relativity server...", connectionInfo.Host);
userManagerService.Login();
instanceSettings.AddRange(await relativityManagerService.GetInstanceSettingsAsync(token).ConfigureAwait(false));
transferLog.LogDebug("Successfully retrieved {Count} instance settings from the '{Host}' Relativity server.", instanceSettings.Count, connectionInfo.Host);
}
return instanceSettings;
}
public async Task<InstanceSetting> GetSingleAsync(string section, string name, CancellationToken token)
{
return Enumerable.FirstOrDefault(await GetAllAsync(token).ConfigureAwait(false), (InstanceSetting x) => string.Compare(x.Section, section, StringComparison.OrdinalIgnoreCase) == 0 && string.Compare(x.Name, name, StringComparison.OrdinalIgnoreCase) == 0);
}
}
}