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

ImportLoadFileProcess

using kCura.EDDS.WebAPI.AuditManagerBase; using kCura.EDDS.WebAPI.BulkImportManagerBase; using kCura.WinEDDS.Api; using kCura.WinEDDS.Service; using Microsoft.VisualBasic.CompilerServices; using Monitoring; using Monitoring.Sinks; using Relativity.DataExchange; using Relativity.DataExchange.Io; using Relativity.DataExchange.Logger; using Relativity.DataExchange.Process; using Relativity.DataExchange.Service; using Relativity.DataExchange.Transfer; using Relativity.Logging; using System; using System.Collections; using System.IO; using System.Runtime.CompilerServices; namespace kCura.WinEDDS { public class ImportLoadFileProcess : MonitoredProcessBase { public LoadFile LoadFile; [CompilerGenerated] [AccessedThroughProperty("_loadFileImporter")] private BulkLoadFileImporter __loadFileImporter; [CompilerGenerated] [AccessedThroughProperty("_IoReporterContext")] private IoReporterContext __IoReporterContext; private int _errorCount; private int _perBatchErrorCount; private int _warningCount; private int _timeZoneOffset; private string _uploadModeText; private bool _disableUserSecutityCheck; private bool? _disableNativeValidation; private bool? _disableNativeLocationValidation; private ImportAuditLevel _auditLevel; [CompilerGenerated] private TelemetryConstants.TransferDirection _TransferDirection; [CompilerGenerated] private bool _OIFileIdMapped; [CompilerGenerated] private string _OIFileIdColumnName; [CompilerGenerated] private string _OIFileTypeColumnName; [CompilerGenerated] private bool _FileSizeMapped; [CompilerGenerated] private string _FileSizeColumn; [CompilerGenerated] private string _FileNameColumn; [CompilerGenerated] private string _SupportedByViewerColumn; [CompilerGenerated] private bool _DisableExtractedTextFileLocationValidation; [CompilerGenerated] private int? _MaximumErrorCount; [CompilerGenerated] private bool? _SkipExtractedTextEncodingCheck; [CompilerGenerated] private bool _LoadImportedFullTextFromServer; [CompilerGenerated] private string _BulkLoadFileFieldDelimiter; [CompilerGenerated] private bool _CloudInstance; private bool isDisposed; protected virtual BulkLoadFileImporter _loadFileImporter { [CompilerGenerated] get { return __loadFileImporter; } [MethodImpl(MethodImplOptions.Synchronized)] [CompilerGenerated] set { BulkLoadFileImporter.FieldMappedEventHandler obj = _loadFileImporter_FieldMapped; BulkLoadFileImporter.StatusMessageEventHandler obj2 = _loadFileImporter_StatusMessage; BulkLoadFileImporter.FatalErrorEventEventHandler obj3 = _loadFileImporter_FatalErrorEvent; ImportTapiBase.UploadModeChangeEventEventHandler obj4 = _loadFileImporter_UploadModeChangeEvent; BulkLoadFileImporter.DataSourcePrepEventEventHandler obj5 = _loadFileImporter_DataSourcePrepEvent; BulkLoadFileImporter.ReportErrorEventEventHandler obj6 = _loadFileImporter_ReportErrorEvent; BulkLoadFileImporter.EndFileImportEventHandler obj7 = _loadFileImporter_EndFileImport; ImportTapiBase.BatchCompletedEventHandler obj8 = _loadFileImporter_OnBatchCompleted; BulkLoadFileImporter _loadFileImporter = __loadFileImporter; if (_loadFileImporter != null) { _loadFileImporter.FieldMapped -= obj; _loadFileImporter.StatusMessage -= obj2; _loadFileImporter.FatalErrorEvent -= obj3; _loadFileImporter.UploadModeChangeEvent -= obj4; _loadFileImporter.DataSourcePrepEvent -= obj5; _loadFileImporter.ReportErrorEvent -= obj6; _loadFileImporter.EndFileImport -= obj7; _loadFileImporter.BatchCompleted -= obj8; } __loadFileImporter = value; _loadFileImporter = __loadFileImporter; if (_loadFileImporter != null) { _loadFileImporter.FieldMapped += obj; _loadFileImporter.StatusMessage += obj2; _loadFileImporter.FatalErrorEvent += obj3; _loadFileImporter.UploadModeChangeEvent += obj4; _loadFileImporter.DataSourcePrepEvent += obj5; _loadFileImporter.ReportErrorEvent += obj6; _loadFileImporter.EndFileImport += obj7; _loadFileImporter.BatchCompleted += obj8; } } } protected virtual IoReporterContext _IoReporterContext { [CompilerGenerated] get { return __IoReporterContext; } [MethodImpl(MethodImplOptions.Synchronized)] [CompilerGenerated] set { EventHandler<IoWarningEventArgs> value2 = _loadFileImporter_IoErrorEvent; IoReporterContext _IoReporterContext = __IoReporterContext; if (_IoReporterContext != null) _IoReporterContext.IoWarningEvent -= value2; __IoReporterContext = value; _IoReporterContext = __IoReporterContext; if (_IoReporterContext != null) _IoReporterContext.IoWarningEvent += value2; } } public bool DisableNativeValidation { set { _disableNativeValidation = value; } } public bool DisableNativeLocationValidation { set { _disableNativeLocationValidation = value; } } protected override TelemetryConstants.TransferDirection TransferDirection { get; } protected override TapiClient TapiClient { get { if (_loadFileImporter != null) return _loadFileImporter.TapiClient; return TapiClient.None; } } private ImportStatistics ImportStatistics => _loadFileImporter.Statistics; protected override Statistics Statistics => ImportStatistics; public bool OIFileIdMapped { get; set; } public string OIFileIdColumnName { get; set; } public string OIFileTypeColumnName { get; set; } public bool FileSizeMapped { get; set; } public string FileSizeColumn { get; set; } public string FileNameColumn { get; set; } public string SupportedByViewerColumn { get; set; } public bool DisableUserSecurityCheck { set { _disableUserSecutityCheck = value; } } public ImportAuditLevel AuditLevel { set { _auditLevel = value; } } public bool DisableExtractedTextFileLocationValidation { get; set; } public int? MaximumErrorCount { get; set; } public bool? SkipExtractedTextEncodingCheck { get; set; } public bool LoadImportedFullTextFromServer { get; set; } public string BulkLoadFileFieldDelimiter { get; set; } public bool CloudInstance { get; set; } public int TimeZoneOffset { get { return _timeZoneOffset; } set { _timeZoneOffset = value; } } [Obsolete("This constructor is marked for deprecation. Please use the constructor that requires a logger instance.")] public ImportLoadFileProcess(Func<string> correlationIdFunc) : this(new MetricService(new ImportApiMetricSinkConfig()), new RunningContext(), correlationIdFunc) { } [Obsolete("This constructor is marked for deprecation. Please use the constructor that requires a logger instance.")] public ImportLoadFileProcess(IMetricService metricService, IRunningContext runningContext, Func<string> correlationIdFunc) : this(metricService, runningContext, RelativityLogger.Instance, correlationIdFunc) { } public ImportLoadFileProcess(IMetricService metricService, IRunningContext runningContext, ILog logger, Func<string> correlationIdFunc) : base(metricService, runningContext, logger, correlationIdFunc) { _uploadModeText = null; _auditLevel = Config.AuditLevel; _TransferDirection = TelemetryConstants.TransferDirection.Import; } public virtual BulkLoadFileImporter GetImporter() { _IoReporterContext = new IoReporterContext(base.FileSystem, base.AppSettings, new WaitAndRetryPolicy(base.AppSettings)); IIoReporter reporter = CreateIoReporter(_IoReporterContext); return new BulkLoadFileImporter(LoadFile, base.Context, reporter, base.Logger, _timeZoneOffset, true, base.ProcessId, true, BulkLoadFileFieldDelimiter, base.CancellationTokenSource, _correlationIdFunc, base.RunningContext); } protected override long GetTotalRecordsCount() { return _loadFileImporter.TotalRecords; } protected override long GetCompletedRecordsCount() { return _loadFileImporter.CompletedRecords; } protected override void OnSuccess() { base.OnSuccess(); base.Context.PublishProcessCompleted(false, "", true); } protected override void OnHasErrors() { base.OnHasErrors(); base.Context.PublishProcessCompleted(false, Guid.NewGuid().ToString(), true); } protected override bool HasErrors() { return _loadFileImporter.HasErrors; } protected override bool IsCancelled() { return _loadFileImporter.IsCancelledByUser; } protected override bool Run() { bool result = Conversions.ToBoolean(_loadFileImporter.ReadFile(LoadFile.FilePath)) && !_hasFatalErrorOccured; base.RunId = _loadFileImporter.RunId; return result; } protected override void Initialize() { base.Initialize(); _warningCount = 0; _errorCount = 0; _perBatchErrorCount = 0; _loadFileImporter = GetImporter(); if (_disableNativeValidation.HasValue) _loadFileImporter.DisableNativeValidation = _disableNativeValidation.Value; if (_disableNativeLocationValidation.HasValue) _loadFileImporter.DisableNativeLocationValidation = _disableNativeLocationValidation.Value; if (MaximumErrorCount.HasValue && MaximumErrorCount.Value > 0 && MaximumErrorCount.Value < 2147483647) _loadFileImporter.MaxNumberOfErrorsInGrid = checked(MaximumErrorCount.Value + 1); if (SkipExtractedTextEncodingCheck.HasValue && SkipExtractedTextEncodingCheck.GetValueOrDefault()) _loadFileImporter.SkipExtractedTextEncodingCheck = true; _loadFileImporter.SkipExtractedTextEncodingCheck = (_loadFileImporter.SkipExtractedTextEncodingCheck || base.AppSettings.DisableTextFileEncodingCheck); _loadFileImporter.DisableExtractedTextFileLocationValidation = DisableExtractedTextFileLocationValidation; _loadFileImporter.AuditLevel = _auditLevel; _loadFileImporter.DisableUserSecurityCheck = _disableUserSecutityCheck; _loadFileImporter.OIFileIdColumnName = OIFileIdColumnName; _loadFileImporter.OIFileIdMapped = OIFileIdMapped; _loadFileImporter.OIFileTypeColumnName = OIFileTypeColumnName; _loadFileImporter.FileSizeColumn = FileSizeColumn; _loadFileImporter.FileSizeMapped = FileSizeMapped; _loadFileImporter.FileNameColumn = FileNameColumn; _loadFileImporter.SupportedByViewerColumn = SupportedByViewerColumn; _loadFileImporter.LoadImportedFullTextFromServer = (LoadImportedFullTextFromServer || base.AppSettings.LoadImportedFullTextFromServer); base.Context.InputArgs = LoadFile.FilePath; } protected override void SetBaseMetrics(MetricJobBase metric) { base.SetBaseMetrics(metric); metric.ImportObjectType = ImportStatistics.ImportObjectType; } protected override MetricJobStarted BuildStartMetric() { MetricJobStarted metricJobStarted = base.BuildStartMetric(); metricJobStarted.CustomData["OverwriteDestination"] = LoadFile.OverwriteDestination; metricJobStarted.CustomData["RunId"] = _loadFileImporter.RunId; metricJobStarted.CustomData["DestinationFolderID"] = LoadFile.DestinationFolderID; metricJobStarted.CustomData["FirstLineContainsHeaders"] = LoadFile.FirstLineContainsHeaders; metricJobStarted.CustomData["LoadNativeFiles"] = LoadFile.LoadNativeFiles; metricJobStarted.CustomData["RecordDelimiter"] = LoadFile.RecordDelimiter; metricJobStarted.CustomData["QuoteDelimiter"] = LoadFile.QuoteDelimiter; metricJobStarted.CustomData["NewlineDelimiter"] = LoadFile.NewlineDelimiter; metricJobStarted.CustomData["MultiRecordDelimiter"] = LoadFile.MultiRecordDelimiter; metricJobStarted.CustomData["HierarchicalValueDelimiter"] = LoadFile.HierarchicalValueDelimiter; metricJobStarted.CustomData["ArtifactTypeID"] = LoadFile.ArtifactTypeID; metricJobStarted.CustomData["StartLineNumber"] = LoadFile.StartLineNumber; metricJobStarted.CustomData["IdentityFieldId"] = LoadFile.IdentityFieldId; metricJobStarted.CustomData["SendEmailOnLoadCompletion"] = LoadFile.SendEmailOnLoadCompletion; metricJobStarted.CustomData["ForceFolderPreview"] = LoadFile.ForceFolderPreview; metricJobStarted.CustomData["OIFileIdMapped"] = LoadFile.OIFileIdMapped; metricJobStarted.CustomData["FileSizeMapped"] = LoadFile.FileSizeMapped; metricJobStarted.CustomData["MoveDocumentsInAppendOverlayMode"] = LoadFile.MoveDocumentsInAppendOverlayMode; metricJobStarted.CustomData["Billable"] = LoadFile.Billable; metricJobStarted.CustomData["TotalMappedFieldsCount"] = LoadFile.FieldMap.Count; metricJobStarted.CustomData["OverlayBehavior"] = LoadFile.OverlayBehavior; metricJobStarted.CustomData["IsFolderIncluded"] = LoadFile.CreateFolderStructure; metricJobStarted.CustomData["IsExtractedTextIncluded"] = (LoadFile.ExtractedTextFileEncoding != null); string longTextColumnThatContainsPathToFullText = LoadFile.LongTextColumnThatContainsPathToFullText; DocumentField[] documentFields = LoadFile.FieldMap.DocumentFields; checked { int num = default(int); int num2 = default(int); int num3 = default(int); int num4 = default(int); int num5 = default(int); foreach (DocumentField documentField in documentFields) { if (documentField.FieldCategory == global::Relativity.DataExchange.Service.FieldCategory.FullText) { num++; if (Operators.CompareString(documentField.FieldName, longTextColumnThatContainsPathToFullText, false) == 0) metricJobStarted.CustomData["IsExtractedTextDataGridEnabled"] = documentField.EnableDataGrid; } else if (documentField.FieldTypeID == 10) { num2++; } else if (documentField.FieldTypeID == 13) { num3++; } else if (documentField.FieldTypeID == 5) { num4++; } else if (documentField.FieldTypeID == 8) { num5++; } } metricJobStarted.CustomData["FullTextsCount"] = num; metricJobStarted.CustomData["SingleObjectsCount"] = num2; metricJobStarted.CustomData["MultiObjectsCount"] = num3; metricJobStarted.CustomData["SingleChoicesCount"] = num4; metricJobStarted.CustomData["MultiChoicesCount"] = num5; return metricJobStarted; } } protected override MetricJobProgress BuildProgressMetric(Statistics statistics) { MetricJobProgress metricJobProgress = base.BuildProgressMetric(statistics); ImportStatistics importStatistics = statistics as ImportStatistics; if (importStatistics != null) { metricJobProgress.SqlBulkLoadThroughputRecordsPerSecond = Statistics.CalculateThroughput(checked(importStatistics.DocumentsCreated + importStatistics.DocumentsUpdated), statistics.MassImportDuration.TotalSeconds); return metricJobProgress; } base.Logger.LogWarning("Unable to parse ImportStatistics in BuildProgressMetric", new object[0]); return metricJobProgress; } protected override MetricJobEndReport BuildEndMetric(TelemetryConstants.JobStatus jobStatus) { MetricJobEndReport metricJobEndReport = base.BuildEndMetric(jobStatus); metricJobEndReport.SqlBulkLoadThroughputRecordsPerSecond = Statistics.CalculateThroughput(checked(ImportStatistics.DocumentsCreated + ImportStatistics.DocumentsUpdated), Statistics.MassImportDuration.TotalSeconds); return metricJobEndReport; } private void AuditRun(string runID) { try { ObjectImportStatistics objectImportStatistics = new ObjectImportStatistics(); objectImportStatistics.ArtifactTypeID = LoadFile.ArtifactTypeID; objectImportStatistics.BatchSizes = _loadFileImporter.BatchSizeHistoryList.ToArray(); objectImportStatistics.Bound = LoadFile.QuoteDelimiter; objectImportStatistics.Delimiter = LoadFile.RecordDelimiter; objectImportStatistics.NestedValueDelimiter = LoadFile.HierarchicalValueDelimiter; objectImportStatistics.DestinationFolderArtifactID = LoadFile.DetermineDestinationFolderID(); if (LoadFile.ArtifactTypeID != 10) objectImportStatistics.DestinationFolderArtifactID = -1; ArrayList arrayList = new ArrayList(); bool flag = false; IEnumerator enumerator = default(IEnumerator); try { enumerator = LoadFile.FieldMap.GetEnumerator(); while (enumerator.MoveNext()) { LoadFileFieldMap.LoadFileFieldMapItem loadFileFieldMapItem = (LoadFileFieldMap.LoadFileFieldMapItem)enumerator.Current; if (loadFileFieldMapItem.DocumentField != null && loadFileFieldMapItem.NativeFileColumnIndex > -1) { arrayList.Add(new int[2] { loadFileFieldMapItem.NativeFileColumnIndex, loadFileFieldMapItem.DocumentField.FieldID }); if (loadFileFieldMapItem.DocumentField.FieldCategory == global::Relativity.DataExchange.Service.FieldCategory.FullText) flag = true; } } } finally { if (enumerator is IDisposable) (enumerator as IDisposable).Dispose(); } objectImportStatistics.ExtractedTextPointsToFile = (LoadFile.FullTextColumnContainsFileLocation && flag); if (LoadFile.CopyFilesToDocumentRepository) objectImportStatistics.FilesCopiedToRepository = LoadFile.SelectedCasePath; else objectImportStatistics.FilesCopiedToRepository = string.Empty; objectImportStatistics.FieldsMapped = (int[][])arrayList.ToArray(typeof(int[])); if (LoadFile.LoadNativeFiles) objectImportStatistics.FileFieldColumnName = LoadFile.NativeFilePathColumn; else objectImportStatistics.FileFieldColumnName = string.Empty; if (LoadFile.CreateFolderStructure) objectImportStatistics.FolderColumnName = LoadFile.FolderStructureContainedInColumn; else objectImportStatistics.FolderColumnName = ""; if (objectImportStatistics.FolderColumnName == null) objectImportStatistics.FolderColumnName = string.Empty; objectImportStatistics.LoadFileEncodingCodePageID = LoadFile.SourceFileEncoding.CodePage; objectImportStatistics.LoadFileName = Path.GetFileName(LoadFile.FilePath); objectImportStatistics.MultiValueDelimiter = LoadFile.MultiRecordDelimiter; objectImportStatistics.NewlineProxy = LoadFile.NewlineDelimiter; checked { objectImportStatistics.NumberOfChoicesCreated = _loadFileImporter.CodesCreated + _loadFileImporter.SingleCodesCreated; objectImportStatistics.NumberOfDocumentsCreated = _loadFileImporter.Statistics.DocumentsCreated; objectImportStatistics.NumberOfDocumentsUpdated = _loadFileImporter.Statistics.DocumentsUpdated; objectImportStatistics.NumberOfErrors = _errorCount; objectImportStatistics.NumberOfFilesLoaded = _loadFileImporter.Statistics.FilesProcessed; objectImportStatistics.NumberOfFoldersCreated = _loadFileImporter.FoldersCreated; objectImportStatistics.NumberOfWarnings = _warningCount; objectImportStatistics.OverlayIdentifierFieldArtifactID = LoadFile.IdentityFieldId; if (LoadFile.ExtractedTextFileEncoding != null) objectImportStatistics.ExtractedTextFileEncodingCodePageID = LoadFile.ExtractedTextFileEncoding.CodePage; switch (Conversions.ToInteger(Enum.Parse(typeof(ImportOverwriteType), LoadFile.OverwriteDestination, true))) { case 1: objectImportStatistics.Overwrite = kCura.EDDS.WebAPI.AuditManagerBase.OverwriteType.Overlay; break; case 2: objectImportStatistics.Overwrite = kCura.EDDS.WebAPI.AuditManagerBase.OverwriteType.Both; break; default: objectImportStatistics.Overwrite = kCura.EDDS.WebAPI.AuditManagerBase.OverwriteType.Append; break; } if (LoadFile.OverlayBehavior.HasValue) { switch (LoadFile.OverlayBehavior.Value) { case LoadFile.FieldOverlayBehavior.MergeAll: objectImportStatistics.OverlayBehavior = kCura.EDDS.WebAPI.AuditManagerBase.OverlayBehavior.MergeAll; break; case LoadFile.FieldOverlayBehavior.ReplaceAll: objectImportStatistics.OverlayBehavior = kCura.EDDS.WebAPI.AuditManagerBase.OverlayBehavior.ReplaceAll; break; default: objectImportStatistics.OverlayBehavior = kCura.EDDS.WebAPI.AuditManagerBase.OverlayBehavior.UseRelativityDefaults; break; } } if (LoadFile.CopyFilesToDocumentRepository) { switch (_loadFileImporter.UploadConnection) { case TapiClient.Direct: objectImportStatistics.RepositoryConnection = RepositoryConnectionType.Direct; break; case TapiClient.Web: objectImportStatistics.RepositoryConnection = RepositoryConnectionType.Web; break; } objectImportStatistics.TotalFileSize = _loadFileImporter.Statistics.FileTransferredBytes; } objectImportStatistics.RunTimeInMilliseconds = (int)Math.Round(DateTime.Now.Subtract(base.StartTime).TotalMilliseconds); objectImportStatistics.StartLine = (int)Math.Min(LoadFile.StartLineNumber, 2147483647); objectImportStatistics.TotalMetadataBytes = _loadFileImporter.Statistics.MetadataTransferredBytes; objectImportStatistics.SendNotification = LoadFile.SendEmailOnLoadCompletion; ManagerFactory.CreateAuditManager(LoadFile.Credentials, LoadFile.CookieContainer, base.GetCorrelationId).AuditObjectImport(LoadFile.CaseInfo.ArtifactID, runID, _hasFatalErrorOccured, objectImportStatistics); } } catch (Exception ex) { ProjectData.SetProjectError(ex); Exception ex2 = ex; base.Logger.LogError(ex2, "An error has occurred during audit", new object[0]); ProjectData.ClearProjectError(); } } private void _loadFileImporter_FieldMapped(string sourceField, string workspaceField) { base.Context.PublishFieldMapped(sourceField, workspaceField); } private unsafe void _loadFileImporter_StatusMessage(StatusEventArgs e) { lock (base.Context) { IDictionary metadata = null; if (e.AdditionalInfo != null) metadata = (IDictionary)e.AdditionalInfo; checked { long currentRecordIndex; switch (e.EventType) { case EventType2.End: { base.Context.PublishProgress(e.TotalRecords, e.CurrentRecordIndex, _warningCount, _errorCount, base.StartTime, DateTime.Now, e.Statistics.MetadataTransferThroughput, e.Statistics.FileTransferThroughput, base.ProcessId, null, null, metadata); ProcessContext context6 = base.Context; currentRecordIndex = e.CurrentRecordIndex; context6.PublishStatusEvent(currentRecordIndex.ToString(), e.Message); base.Context.PublishProcessEnded(e.Statistics.FileTransferredBytes, e.Statistics.MetadataTransferredBytes, e.Statistics.GetSqlProcessRate()); break; } case EventType2.Error: { ref int warningCount; *(ref warningCount = ref _errorCount) = warningCount + 1; *(ref warningCount = ref _perBatchErrorCount) = warningCount + 1; base.Context.PublishProgress(e.TotalRecords, e.CurrentRecordIndex, _warningCount, _errorCount, base.StartTime, default(DateTime), e.Statistics.MetadataTransferThroughput, e.Statistics.FileTransferThroughput, base.ProcessId, null, null, metadata); ProcessContext context5 = base.Context; currentRecordIndex = e.CurrentRecordIndex; context5.PublishErrorEvent(currentRecordIndex.ToString(), e.Message); break; } case EventType2.Progress: { base.Context.PublishRecordProcessed(e.CurrentRecordIndex); base.Context.PublishProgress(e.TotalRecords, e.CurrentRecordIndex, _warningCount, _errorCount, base.StartTime, default(DateTime), e.Statistics.MetadataTransferThroughput, e.Statistics.FileTransferThroughput, base.ProcessId, null, null, metadata); ProcessContext context4 = base.Context; currentRecordIndex = e.CurrentRecordIndex; context4.PublishStatusEvent(currentRecordIndex.ToString(), e.Message); break; } case EventType2.Statistics: SendMetricJobProgress(e.Statistics, true); break; case EventType2.ResetProgress: { base.Context.PublishProgress(e.TotalRecords, e.CurrentRecordIndex, _warningCount, _errorCount, base.StartTime, default(DateTime), e.Statistics.MetadataTransferThroughput, e.Statistics.FileTransferThroughput, base.ProcessId, null, null, metadata); ProcessContext context3 = base.Context; currentRecordIndex = e.CurrentRecordIndex; context3.PublishStatusEvent(currentRecordIndex.ToString(), e.Message); break; } case EventType2.Status: { ProcessContext context2 = base.Context; currentRecordIndex = e.CurrentRecordIndex; context2.PublishStatusEvent(currentRecordIndex.ToString(), e.Message); break; } case EventType2.Warning: { ref int warningCount; *(ref warningCount = ref _warningCount) = warningCount + 1; ProcessContext context = base.Context; currentRecordIndex = e.CurrentRecordIndex; context.PublishWarningEvent(currentRecordIndex.ToString(), e.Message); break; } case EventType2.ResetStartTime: SetStartTime(); break; case EventType2.Count: base.Context.PublishRecordCountIncremented(); break; } } } } private void _loadFileImporter_FatalErrorEvent(string message, Exception ex, string runID) { if (!_hasFatalErrorOccured) { lock (base.Context) { base.Context.PublishFatalException(ex); base.Context.PublishProcessCompleted(false, "", true); _hasFatalErrorOccured = true; } } } private void _loadFileImporter_UploadModeChangeEvent(string statusBarText) { if (_uploadModeText == null) _uploadModeText = TapiModeHelper.BuildDocText(); OnTapiClientChanged(); base.Context.PublishStatusBarChanged(statusBarText, _uploadModeText); } private void _loadFileImporter_DataSourcePrepEvent(DataSourcePrepEventArgs e) { lock (base.Context) { string totalBytesDisplay = FileSizeHelper.ConvertBytesNumberToDisplayString(e.TotalBytes); string processedBytesDisplay = FileSizeHelper.ConvertBytesNumberToDisplayString(e.BytesRead); switch (e.Type) { case DataSourcePrepEventArgs.EventType.Close: base.Context.PublishProgressInBytes(e.TotalBytes, e.TotalBytes, e.StartTime, DateTime.Now, base.ProcessId, totalBytesDisplay, processedBytesDisplay); break; case DataSourcePrepEventArgs.EventType.Open: base.Context.PublishProgressInBytes(e.TotalBytes, e.BytesRead, e.StartTime, DateTime.Now, base.ProcessId, totalBytesDisplay, processedBytesDisplay); base.Context.PublishStatusEvent(string.Empty, "Preparing file for import"); break; case DataSourcePrepEventArgs.EventType.ReadEvent: base.Context.PublishProgressInBytes(e.TotalBytes, e.BytesRead, e.StartTime, DateTime.Now, base.ProcessId, totalBytesDisplay, processedBytesDisplay); base.Context.PublishStatusEvent(string.Empty, "Preparing file for import"); break; } } } private void _loadFileImporter_ReportErrorEvent(IDictionary row) { base.Context.PublishErrorReport(row); } private void _loadFileImporter_IoErrorEvent(object sender, IoWarningEventArgs e) { lock (base.Context) { base.Context.PublishWarningEvent(checked(e.CurrentLineNumber + 1).ToString(), e.Message); } } private void _loadFileImporter_EndFileImport(string runID) { Statistics.DocumentsCount = _loadFileImporter.TotalTransferredFilesCount; Statistics.DocsErrorsCount = _errorCount; AuditRun(runID); } private void _loadFileImporter_OnBatchCompleted(BatchInformation batchInformation) { batchInformation.NumberOfRecordsWithErrors = _perBatchErrorCount; _perBatchErrorCount = 0; SendMetricJobBatch(batchInformation); } protected override void Dispose(bool disposing) { if (!isDisposed) { _loadFileImporter?.Dispose(); isDisposed = true; } base.Dispose(disposing); } } }