FileRequestRepository
using kCura.WinEDDS.Exporters;
using Relativity.DataExchange.Export.VolumeManagerV2.Download;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
namespace Relativity.DataExchange.Export.VolumeManagerV2.Repository
{
public class FileRequestRepository : IClearable
{
private readonly ConcurrentDictionary<int, FileRequest<ObjectExportInfo>> _filesByArtifactIdDictionary;
public FileRequestRepository()
{
_filesByArtifactIdDictionary = new ConcurrentDictionary<int, FileRequest<ObjectExportInfo>>();
}
public void Add(FileRequest<ObjectExportInfo> file)
{
_filesByArtifactIdDictionary[file.Artifact.ArtifactID] = file;
}
public FileRequest<ObjectExportInfo> GetFileRequest(int artifactId)
{
_filesByArtifactIdDictionary.TryGetValue(artifactId, out FileRequest<ObjectExportInfo> value);
return value;
}
public IList<FileRequest<ObjectExportInfo>> GetFileRequestByDestinationLocation(string destinationLocation)
{
string trimmedDestinationLocation = (destinationLocation != null) ? destinationLocation.TrimEnd(Array.Empty<char>()) : string.Empty;
return _filesByArtifactIdDictionary.Values.Where(delegate(FileRequest<ObjectExportInfo> x) {
if (x.ExportRequest?.DestinationLocation != null)
return string.Compare(x.ExportRequest.DestinationLocation.TrimEnd(Array.Empty<char>()), trimmedDestinationLocation, StringComparison.OrdinalIgnoreCase) == 0;
return false;
}).ToList();
}
public IList<FileRequest<ObjectExportInfo>> GetFileRequests()
{
return _filesByArtifactIdDictionary.Values.ToList();
}
public IEnumerable<ExportRequest> GetExportRequests()
{
return from x in _filesByArtifactIdDictionary.Values
where !x.TransferCompleted
select x.ExportRequest;
}
public bool AnyRequestForLocation(string destinationLocation)
{
if (string.IsNullOrWhiteSpace(destinationLocation))
return false;
return GetFileRequestByDestinationLocation(destinationLocation).Any((FileRequest<ObjectExportInfo> x) => !x.TransferCompleted);
}
public void Clear()
{
_filesByArtifactIdDictionary.Clear();
}
}
}