<PackageReference Include="Relativity.Server.Import.SDK" Version="2.9.2" />

FileIO

public class FileIO : FileIO, IFileIO
using kCura.EDDS.WebAPI.FileIOBase; using kCura.WinEDDS.Service.Replacement; using Microsoft.VisualBasic.CompilerServices; using Relativity.DataExchange; using Relativity.DataExchange.Service; using System; using System.Collections.Specialized; using System.Net; using System.Runtime.Caching; using System.Runtime.CompilerServices; using System.Runtime.Serialization; using System.Web.Services.Protocols; using System.Xml; using System.Xml.Serialization; namespace kCura.WinEDDS.Service { public class FileIO : kCura.EDDS.WebAPI.FileIOBase.FileIO, IFileIO { [Serializable] public class CustomException : Exception { public CustomException(string message, Exception innerException) : base(message, innerException) { } protected CustomException(SerializationInfo info, StreamingContext context) : base(info, context) { } public override string ToString() { if (base.InnerException != null) return base.ToString() + "\r\n" + base.InnerException.ToString(); return base.ToString(); } } [CompilerGenerated] internal sealed class _Closure$__10-0 { public int $VB$Local_caseContextArtifactID; public string $VB$Local_documentDirectory; public string $VB$Local_fileName; public FileIO $VB$Me; internal void _Lambda$__0() { ((kCura.EDDS.WebAPI.FileIOBase.FileIO)$VB$Me).RemoveFill($VB$Local_caseContextArtifactID, $VB$Local_documentDirectory, $VB$Local_fileName); } } [CompilerGenerated] internal sealed class _Closure$__11-0 { public int $VB$Local_caseContextArtifactID; public string $VB$Local_fileName; public FileIO $VB$Me; internal void _Lambda$__0() { ((kCura.EDDS.WebAPI.FileIOBase.FileIO)$VB$Me).RemoveTempFile($VB$Local_caseContextArtifactID, $VB$Local_fileName); } } [CompilerGenerated] internal sealed class _Closure$__12-0 { public int $VB$Local_appID; public FileIO $VB$Me; internal bool _Lambda$__0() { return ((kCura.EDDS.WebAPI.FileIOBase.FileIO)$VB$Me).ValidateBcpShare($VB$Local_appID); } } [CompilerGenerated] internal sealed class _Closure$__13-0 { public int $VB$Local_appID; public FileIO $VB$Me; internal string[][] _Lambda$__0() { return ((kCura.EDDS.WebAPI.FileIOBase.FileIO)$VB$Me).GetBcpShareSpaceReport($VB$Local_appID); } } [CompilerGenerated] internal sealed class _Closure$__14-0 { public int $VB$Local_appID; public FileIO $VB$Me; internal string[][] _Lambda$__0() { return ((kCura.EDDS.WebAPI.FileIOBase.FileIO)$VB$Me).GetDefaultRepositorySpaceReport($VB$Local_appID); } } [CompilerGenerated] internal sealed class _Closure$__7-0 { public Action $VB$Local_f; internal bool _Lambda$__0() { $VB$Local_f(); return true; } } [CompilerGenerated] internal sealed class _Closure$__8-0 { public int $VB$Local_caseContextArtifactID; public byte[] $VB$Local_b; public string $VB$Local_documentDirectory; public string $VB$Local_fileGuid; public FileIO $VB$Me; internal IoResponse _Lambda$__0() { return ((kCura.EDDS.WebAPI.FileIOBase.FileIO)$VB$Me).BeginFill($VB$Local_caseContextArtifactID, $VB$Local_b, $VB$Local_documentDirectory, $VB$Local_fileGuid); } } [CompilerGenerated] internal sealed class _Closure$__9-0 { public int $VB$Local_caseContextArtifactID; public string $VB$Local_documentDirectory; public string $VB$Local_fileName; public byte[] $VB$Local_b; public FileIO $VB$Me; internal IoResponse _Lambda$__0() { return ((kCura.EDDS.WebAPI.FileIOBase.FileIO)$VB$Me).FileFill($VB$Local_caseContextArtifactID, $VB$Local_documentDirectory, $VB$Local_fileName, $VB$Local_b); } } private static MemoryCache BCPCache = new MemoryCache("BCPCache", (NameValueCollection)null); public FileIO(ICredentials credentials, CookieContainer cookieContainer) { this.set_Credentials(credentials); this.set_CookieContainer(cookieContainer); base.Url = $"{AppSettings.Instance.WebApiServiceUrl}"""; this.set_Timeout(Settings.DefaultTimeOut); } protected override WebRequest GetWebRequest(Uri uri) { HttpWebRequest obj = (HttpWebRequest)this.GetWebRequest(uri); obj.UnsafeAuthenticatedConnectionSharing = true; obj.Credentials = this.get_Credentials(); return obj; } private bool IsRetryableException(Exception ex) { bool result = false; if (ex is SoapException && ex.ToString().IndexOf("NeedToReLoginException") != -1) result = true; else if (Operators.CompareString(ex.Message, "The server committed a protocol violation. Section=ResponseStatusLine", false) == 0) { result = true; } return result; } private T ExecuteWithRetry<T>(Func<T> f) { int num = 0; while (num < AppSettings.Instance.MaxReloginTries) { num = checked(num + 1); try { return f(); } catch (Exception ex) { ProjectData.SetProjectError(ex); Exception ex2 = ex; if (!IsRetryableException(ex2) || num >= AppSettings.Instance.MaxReloginTries) { Exception ex3 = ConvertExpectedSoapExceptionToRelativityException(ex2); if (ex3 != null) throw ex3; throw; } Helper.AttemptReLogin(this.get_Credentials(), this.get_CookieContainer(), num, true); ProjectData.ClearProjectError(); } } return default(T); } public Exception ConvertExpectedSoapExceptionToRelativityException(Exception ex) { SoapException val = ex as SoapException; if (val != null) { Exception result = null; try { if (Operators.CompareString(val.get_Detail().SelectNodes("ExceptionType").Item(0) .InnerText, "Relativity.Core.Exception.InsufficientAccessControlListPermissions", false) == 0) result = new BulkImportManager.InsufficientPermissionsForImportException(val.get_Detail().SelectNodes("ExceptionMessage")[0].InnerText); else if (Operators.CompareString(val.get_Detail().SelectNodes("ExceptionType").Item(0) .InnerText, "System.ArgumentException", false) == 0) { result = new ArgumentException(val.get_Detail().SelectNodes("ExceptionMessage")[0].InnerText); } } catch (Exception projectError) { ProjectData.SetProjectError(projectError); ProjectData.ClearProjectError(); } return result; } return null; } private void ExecuteWithRetry(Action f) { ExecuteWithRetry(delegate { f(); return true; }); } public new IoResponse BeginFill(int caseContextArtifactID, byte[] b, string documentDirectory, string fileGuid) { return ExecuteWithRetry(() => base.BeginFill(caseContextArtifactID, b, documentDirectory, fileGuid)); } public new IoResponse FileFill(int caseContextArtifactID, string documentDirectory, string fileName, byte[] b) { return ExecuteWithRetry(() => base.FileFill(caseContextArtifactID, documentDirectory, fileName, b)); } public new void RemoveFill(int caseContextArtifactID, string documentDirectory, string fileName) { ExecuteWithRetry(delegate { base.RemoveFill(caseContextArtifactID, documentDirectory, fileName); }); } public new void RemoveTempFile(int caseContextArtifactID, string fileName) { ExecuteWithRetry(delegate { base.RemoveTempFile(caseContextArtifactID, fileName); }); } void IFileIO.RemoveTempFile(int caseContextArtifactID, string fileName) { this.RemoveTempFile(caseContextArtifactID, fileName); } public new bool ValidateBcpShare(int appID) { return ExecuteWithRetry(() => base.ValidateBcpShare(appID)); } bool IFileIO.ValidateBcpShare(int appID) { return this.ValidateBcpShare(appID); } public new string[][] GetBcpShareSpaceReport(int appID) { return ExecuteWithRetry(() => base.GetBcpShareSpaceReport(appID)); } string[][] IFileIO.GetBcpShareSpaceReport(int appID) { return this.GetBcpShareSpaceReport(appID); } public new string[][] GetDefaultRepositorySpaceReport(int appID) { return ExecuteWithRetry(() => base.GetDefaultRepositorySpaceReport(appID)); } public new int RepositoryVolumeMax() { return ExecuteWithRetry(() => base.RepositoryVolumeMax()); } int IFileIO.RepositoryVolumeMax() { return this.RepositoryVolumeMax(); } public new string GetBcpSharePath(int appID) { object objectValue = RuntimeHelpers.GetObjectValue(BCPCache.Get(appID.ToString(), (string)null)); if (objectValue == null) { int num = 0; while (num < AppSettings.Instance.MaxReloginTries) { num = checked(num + 1); try { string bcpSharePath = base.GetBcpSharePath(appID); if (!string.IsNullOrEmpty(bcpSharePath)) { MemoryCache bCPCache = BCPCache; string text = appID.ToString(); string text2 = bcpSharePath; CacheItemPolicy val = new CacheItemPolicy(); val.set_AbsoluteExpiration(DateTimeOffset.UtcNow.AddSeconds(60)); bCPCache.Add(text, (object)text2, val, (string)null); return bcpSharePath; } Helper.AttemptReLogin(this.get_Credentials(), this.get_CookieContainer(), num, true); } catch (Exception ex) { ProjectData.SetProjectError(ex); Exception ex2 = ex; if (!(ex2 is SoapException) || ex2.ToString().IndexOf("NeedToReLoginException") == -1 || num >= AppSettings.Instance.MaxReloginTries) { if (ex2 is SoapException) throw ParseExceptionForMoreInfo(ex2); throw; } Helper.AttemptReLogin(this.get_Credentials(), this.get_CookieContainer(), num, true); ProjectData.ClearProjectError(); } } throw new Exception("Unable to retrieve BCP share path from the server"); } return objectValue.ToString(); } string IFileIO.GetBcpSharePath(int appID) { return this.GetBcpSharePath(appID); } public static Exception ParseExceptionForMoreInfo(Exception ex) { Exception result = ex; SoapExceptionDetail soapExceptionDetail = null; if (ex is SoapException) { SoapException val = ex; XmlSerializer xmlSerializer = new XmlSerializer(typeof(SoapExceptionDetail)); XmlDocument xmlDocument = new XmlDocument(); xmlDocument.LoadXml(val.get_Detail().OuterXml); XmlReader xmlReader = xmlDocument.CreateNavigator().ReadSubtree(); soapExceptionDetail = (xmlSerializer.Deserialize(xmlReader) as SoapExceptionDetail); } if (soapExceptionDetail != null) result = new CustomException(soapExceptionDetail.ExceptionMessage, ex); return result; } [CompilerGenerated] private int _Lambda$__15-0() { return base.RepositoryVolumeMax(); } } }