InstanceSettingsWithFallbackRetriever
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace Relativity.Transfer
{
internal class InstanceSettingsWithFallbackRetriever : IInstanceSettingRetriever
{
private readonly IList<IInstanceSettingRetriever> retrievers;
private readonly ITransferLog log;
public InstanceSettingsWithFallbackRetriever(ITransferLog transferLog)
{
log = transferLog;
retrievers = new List<IInstanceSettingRetriever>();
}
public void Register(IInstanceSettingRetriever retriever)
{
retrievers.Add(retriever);
}
public async Task<IEnumerable<InstanceSetting>> GetAllAsync(CancellationToken token)
{
foreach (IInstanceSettingRetriever retriever in retrievers) {
try {
IEnumerable<InstanceSetting> instanceSettings = await retriever.GetAllAsync(token).ConfigureAwait(false);
if (instanceSettings != null)
return instanceSettings;
} catch (Exception e) {
log.LogWarning(e, "There was and error during fetching of the instance settings.", Array.Empty<object>());
}
}
return null;
}
public async Task<InstanceSetting> GetSingleAsync(string section, string name, CancellationToken token)
{
foreach (IInstanceSettingRetriever retriever in retrievers) {
try {
InstanceSetting instanceSetting = await retriever.GetSingleAsync(section, name, token).ConfigureAwait(false);
if (instanceSetting != null)
return instanceSetting;
} catch (Exception e) {
log.LogWarning(e, "There was and error during fetching of the instance setting: " + section + " " + name + ".", Array.Empty<object>());
}
}
return null;
}
}
}