<PackageReference Include="Relativity.Transfer.Client" Version="7.1.40" />

TransferPathRepository

using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Threading; namespace Relativity.Transfer { internal class TransferPathRepository : ITransferPathRepository { private readonly ConcurrentDictionary<long, TransferPath> paths = new ConcurrentDictionary<long, TransferPath>(); private readonly ITransferPathKeyGenerator primaryKeyGenerator; private long count; public long Count => Interlocked.Read(ref count); public TransferPathRepository() : this(new PrimaryKeyGenerator()) { } public TransferPathRepository(ITransferPathKeyGenerator primaryKeyGenerator) { if (primaryKeyGenerator == null) throw new ArgumentNullException("primaryKeyGenerator"); this.primaryKeyGenerator = primaryKeyGenerator; } public void Clear() { paths.Clear(); Interlocked.Exchange(ref count, 0); } public void Delete(TransferPath path) { if (path == (TransferPath)null) throw new ArgumentNullException("path"); long key = primaryKeyGenerator.GetKey(path); if (paths.ContainsKey(key) && paths.TryRemove(key, out TransferPath _)) Interlocked.Decrement(ref count); } public void Delete(JobTransferPath jobPath) { if (jobPath == null) throw new ArgumentNullException("jobPath"); Delete(jobPath.Path); } public ICollection<TransferPath> SelectAll() { return paths.Values; } public TransferPath SelectByKey(string path) { long key = primaryKeyGenerator.GetKey(path); TransferPath value; return paths.TryGetValue(key, out value) ? value : null; } public void Upsert(TransferPath path) { if (path == (TransferPath)null) throw new ArgumentNullException("path"); bool exists = false; long key = primaryKeyGenerator.GetKey(path); paths.AddOrUpdate(key, path, delegate(long i, TransferPath transferPath) { exists = true; return transferPath; }); if (!exists) Interlocked.Increment(ref count); } } }