TransferClientStrategy
using System;
using System.Collections.Generic;
using System.Linq;
namespace Relativity.Transfer
{
public class TransferClientStrategy : ITransferClientStrategy
{
private static readonly List<WellKnownTransferClient> DefaultClientOrder = new List<WellKnownTransferClient>(new WellKnownTransferClient[3] {
WellKnownTransferClient.FileShare,
WellKnownTransferClient.Aspera,
WellKnownTransferClient.Http
});
private readonly List<WellKnownTransferClient> clients = new List<WellKnownTransferClient>();
public TransferClientStrategy()
{
clients.AddRange(DefaultClientOrder);
}
public TransferClientStrategy(IEnumerable<WellKnownTransferClient> candidates)
{
if (candidates == null)
throw new ArgumentNullException("candidates");
clients.AddRange(candidates);
}
public TransferClientStrategy(IEnumerable<string> candidates)
{
if (candidates == null)
throw new ArgumentNullException("candidates");
clients.AddRange(from x in candidates
select (WellKnownTransferClient)Enum.Parse(typeof(WellKnownTransferClient), x));
}
public TransferClientStrategy(string delimitedCandidates)
{
if (string.IsNullOrEmpty(delimitedCandidates))
throw new ArgumentNullException("delimitedCandidates");
string[] source = delimitedCandidates.Split(new string[1] {
";"
}, StringSplitOptions.RemoveEmptyEntries);
clients.AddRange(from x in source
select (WellKnownTransferClient)Enum.Parse(typeof(WellKnownTransferClient), x));
}
public IEnumerable<ITransferClientMetadata> GetSortedCandidates(RelativityConnectionInfo connectionInfo, IEnumerable<ITransferClientMetadata> availableClients)
{
List<ITransferClientMetadata> availableList = availableClients.ToList();
return (from client in clients
select availableList.FirstOrDefault((ITransferClientMetadata x) => x.Client == client) into result
where result != null
select result).ToList();
}
}
}