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

DataReaderReader

using kCura.EDDS.WebAPI.DocumentManagerBase; using kCura.WinEDDS.Api; using kCura.WinEDDS.Exceptions; using Microsoft.VisualBasic.CompilerServices; using Relativity.DataExchange; using Relativity.DataExchange.Io; using Relativity.DataExchange.Service; using System; using System.Data; using System.Globalization; using System.IO; using System.Linq; using System.Runtime.CompilerServices; using System.Runtime.Serialization.Formatters.Binary; using System.Threading; namespace kCura.WinEDDS.ImportExtension { public class DataReaderReader : IArtifactReader { private const string _KCURAMARKERFILENAME = "kcuramarkerfilename"; private IDataReader _reader; private readonly FileSettings _FileSettings; private LoadFile _loadFileSettings; protected long _currentLineNumber; private long _size; private string[] _columnNames; private ArtifactFieldCollection _allFields; private string _tempLocalDirectory; private bool? _markerNameIsMapped; private int _identifierFieldIndex; private string _lastSourceIdentifier; private int _fileSettingsFileNameColumnIndex; private int _fileSettingsFileSizeColumnIndex; private int _fileSettingsTypeColumnNameIndex; private int _fileSettingsIDColumnNameIndex; private int _fileSupportedByViewerColumnNameIndex; [CompilerGenerated] private IArtifactReader.StatusMessageEventHandler StatusMessageEvent; [CompilerGenerated] private IArtifactReader.FieldMappedEventHandler FieldMappedEvent; [CompilerGenerated] private IArtifactReader.DataSourcePrepEventHandler DataSourcePrepEvent; [CompilerGenerated] private IArtifactReader.OnIoWarningEventHandler OnIoWarningEvent; public string TemporaryLocalDirectory { get { return _tempLocalDirectory; } set { _tempLocalDirectory = value; } } public long BytesProcessed { get { checked { if (SizeInBytes >= 1 && !_reader.IsClosed) return (long)Math.Round(unchecked((double)_currentLineNumber / 1 * (double)SizeInBytes)); return 0; } } } public int CurrentLineNumber => checked((int)_currentLineNumber); public bool HasMoreRecords => !_reader.IsClosed; public long SizeInBytes { get { if (_size == -1) { MemoryStream memoryStream = new MemoryStream(); new BinaryFormatter().Serialize(memoryStream, _reader); _size = memoryStream.Length; memoryStream.Close(); } return _size; } } public event IArtifactReader.StatusMessageEventHandler StatusMessage { [CompilerGenerated] add { IArtifactReader.StatusMessageEventHandler statusMessageEventHandler = StatusMessageEvent; IArtifactReader.StatusMessageEventHandler statusMessageEventHandler2; do { statusMessageEventHandler2 = statusMessageEventHandler; IArtifactReader.StatusMessageEventHandler value2 = (IArtifactReader.StatusMessageEventHandler)Delegate.Combine(statusMessageEventHandler2, value); statusMessageEventHandler = Interlocked.CompareExchange(ref StatusMessageEvent, value2, statusMessageEventHandler2); } while ((object)statusMessageEventHandler != statusMessageEventHandler2); } [CompilerGenerated] remove { IArtifactReader.StatusMessageEventHandler statusMessageEventHandler = StatusMessageEvent; IArtifactReader.StatusMessageEventHandler statusMessageEventHandler2; do { statusMessageEventHandler2 = statusMessageEventHandler; IArtifactReader.StatusMessageEventHandler value2 = (IArtifactReader.StatusMessageEventHandler)Delegate.Remove(statusMessageEventHandler2, value); statusMessageEventHandler = Interlocked.CompareExchange(ref StatusMessageEvent, value2, statusMessageEventHandler2); } while ((object)statusMessageEventHandler != statusMessageEventHandler2); } } public event IArtifactReader.FieldMappedEventHandler FieldMapped { [CompilerGenerated] add { IArtifactReader.FieldMappedEventHandler fieldMappedEventHandler = FieldMappedEvent; IArtifactReader.FieldMappedEventHandler fieldMappedEventHandler2; do { fieldMappedEventHandler2 = fieldMappedEventHandler; IArtifactReader.FieldMappedEventHandler value2 = (IArtifactReader.FieldMappedEventHandler)Delegate.Combine(fieldMappedEventHandler2, value); fieldMappedEventHandler = Interlocked.CompareExchange(ref FieldMappedEvent, value2, fieldMappedEventHandler2); } while ((object)fieldMappedEventHandler != fieldMappedEventHandler2); } [CompilerGenerated] remove { IArtifactReader.FieldMappedEventHandler fieldMappedEventHandler = FieldMappedEvent; IArtifactReader.FieldMappedEventHandler fieldMappedEventHandler2; do { fieldMappedEventHandler2 = fieldMappedEventHandler; IArtifactReader.FieldMappedEventHandler value2 = (IArtifactReader.FieldMappedEventHandler)Delegate.Remove(fieldMappedEventHandler2, value); fieldMappedEventHandler = Interlocked.CompareExchange(ref FieldMappedEvent, value2, fieldMappedEventHandler2); } while ((object)fieldMappedEventHandler != fieldMappedEventHandler2); } } public event IArtifactReader.DataSourcePrepEventHandler DataSourcePrep { [CompilerGenerated] add { IArtifactReader.DataSourcePrepEventHandler dataSourcePrepEventHandler = DataSourcePrepEvent; IArtifactReader.DataSourcePrepEventHandler dataSourcePrepEventHandler2; do { dataSourcePrepEventHandler2 = dataSourcePrepEventHandler; IArtifactReader.DataSourcePrepEventHandler value2 = (IArtifactReader.DataSourcePrepEventHandler)Delegate.Combine(dataSourcePrepEventHandler2, value); dataSourcePrepEventHandler = Interlocked.CompareExchange(ref DataSourcePrepEvent, value2, dataSourcePrepEventHandler2); } while ((object)dataSourcePrepEventHandler != dataSourcePrepEventHandler2); } [CompilerGenerated] remove { IArtifactReader.DataSourcePrepEventHandler dataSourcePrepEventHandler = DataSourcePrepEvent; IArtifactReader.DataSourcePrepEventHandler dataSourcePrepEventHandler2; do { dataSourcePrepEventHandler2 = dataSourcePrepEventHandler; IArtifactReader.DataSourcePrepEventHandler value2 = (IArtifactReader.DataSourcePrepEventHandler)Delegate.Remove(dataSourcePrepEventHandler2, value); dataSourcePrepEventHandler = Interlocked.CompareExchange(ref DataSourcePrepEvent, value2, dataSourcePrepEventHandler2); } while ((object)dataSourcePrepEventHandler != dataSourcePrepEventHandler2); } } public event IArtifactReader.OnIoWarningEventHandler OnIoWarning { [CompilerGenerated] add { IArtifactReader.OnIoWarningEventHandler onIoWarningEventHandler = OnIoWarningEvent; IArtifactReader.OnIoWarningEventHandler onIoWarningEventHandler2; do { onIoWarningEventHandler2 = onIoWarningEventHandler; IArtifactReader.OnIoWarningEventHandler value2 = (IArtifactReader.OnIoWarningEventHandler)Delegate.Combine(onIoWarningEventHandler2, value); onIoWarningEventHandler = Interlocked.CompareExchange(ref OnIoWarningEvent, value2, onIoWarningEventHandler2); } while ((object)onIoWarningEventHandler != onIoWarningEventHandler2); } [CompilerGenerated] remove { IArtifactReader.OnIoWarningEventHandler onIoWarningEventHandler = OnIoWarningEvent; IArtifactReader.OnIoWarningEventHandler onIoWarningEventHandler2; do { onIoWarningEventHandler2 = onIoWarningEventHandler; IArtifactReader.OnIoWarningEventHandler value2 = (IArtifactReader.OnIoWarningEventHandler)Delegate.Remove(onIoWarningEventHandler2, value); onIoWarningEventHandler = Interlocked.CompareExchange(ref OnIoWarningEvent, value2, onIoWarningEventHandler2); } while ((object)onIoWarningEventHandler != onIoWarningEventHandler2); } } public DataReaderReader(DataReaderReaderInitializationArgs args, LoadFile fieldMap, IDataReader reader) : this(args, fieldMap, reader, new FileSettings { OIFileIdMapped = false, FileSizeMapped = false, FileNameColumn = null }) { } public DataReaderReader(DataReaderReaderInitializationArgs args, LoadFile fieldMap, IDataReader reader, FileSettings fileSettings) { _currentLineNumber = 0; _size = -1; _reader = reader; if (fileSettings == null) fileSettings = new FileSettings { FileNameColumn = null, FileSizeColumn = null, FileSizeMapped = false, IDColumnName = null, OIFileIdMapped = false, TypeColumnName = null }; _FileSettings = fileSettings; _reader.ThrowIfNull("_reader"); if (_reader.IsClosed || _reader.FieldCount == 0) throw new ArgumentException("The reader is closed or empty"); _loadFileSettings = fieldMap; _allFields = args.AllFields; if (args.TemporaryLocalDirectory == null) _tempLocalDirectory = Path.GetTempPath() + "FlexMigrationFiles\\"; else _tempLocalDirectory = args.TemporaryLocalDirectory; checked { if (fieldMap != null) { int num = reader.FieldCount - 1; for (int i = 0; i <= num; i++) { if (reader.GetName(i).Equals(fieldMap.SelectedIdentifierField.FieldName, StringComparison.CurrentCultureIgnoreCase)) { _identifierFieldIndex = i; break; } } } else _identifierFieldIndex = -1; _fileSettingsFileNameColumnIndex = -1; _fileSettingsFileSizeColumnIndex = -1; _fileSettingsTypeColumnNameIndex = -1; _fileSettingsIDColumnNameIndex = -1; _fileSupportedByViewerColumnNameIndex = -1; } } public string SourceIdentifierValue() { return _lastSourceIdentifier; } string IArtifactReader.SourceIdentifierValue() { return this.SourceIdentifierValue(); } public unsafe void AdvanceRecord() { try { if (!_reader.Read()) _reader.Close(); } finally { ref long currentLineNumber; *(ref currentLineNumber = ref _currentLineNumber) = checked(currentLineNumber + 1); } } void IArtifactReader.AdvanceRecord() { this.AdvanceRecord(); } public long? CountRecords() { return (!_reader.IsClosed) ? null : new long?(CurrentLineNumber); } long? IArtifactReader.CountRecords() { return this.CountRecords(); } public string[] GetColumnNames(object args) { if (_columnNames == null) _columnNames = (from fieldIndex in Enumerable.Range(0, _reader.FieldCount) select _reader.GetName(fieldIndex)).ToArray(); return _columnNames; } string[] IArtifactReader.GetColumnNames(object args) { return this.GetColumnNames(args); } public void ValidateColumnNames(Action<string> invalidNameAction) { foreach (string item in from columnName in GetColumnNames(null) where _allFields[columnName.ToLower()] == null select columnName) { invalidNameAction(item); } } void IArtifactReader.ValidateColumnNames(Action<string> invalidNameAction) { this.ValidateColumnNames(invalidNameAction); } private bool DoesFilenameMarkerFieldExistInIDataReader() { if (!_markerNameIsMapped.HasValue) try { _reader.GetOrdinal("kcuramarkerfilename"); _markerNameIsMapped = true; } catch (IndexOutOfRangeException ex) { ProjectData.SetProjectError(ex); IndexOutOfRangeException ex2 = ex; _markerNameIsMapped = false; ProjectData.ClearProjectError(); } catch (ArgumentException ex3) { ProjectData.SetProjectError(ex3); ArgumentException ex4 = ex3; _markerNameIsMapped = false; ProjectData.ClearProjectError(); } return _markerNameIsMapped.Value; } private string nameWithoutIndex(string nameWithIndex) { if (nameWithIndex != null) { int num = nameWithIndex.LastIndexOf('('); if (num < 0) return nameWithIndex; return nameWithIndex.Substring(0, num); } return null; } public ArtifactFieldCollection ReadArtifact() { try { return ReadArtifactData(); } catch (Exception ex) { ProjectData.SetProjectError(ex); Exception ex2 = ex; throw; } finally { AdvanceRecord(); } } ArtifactFieldCollection IArtifactReader.ReadArtifact() { return this.ReadArtifact(); } private ArtifactFieldCollection ReadArtifactData() { ArtifactFieldCollection artifactFieldCollectionWithBasicFields = GetArtifactFieldCollectionWithBasicFields(); string right = nameWithoutIndex(_loadFileSettings.FolderStructureContainedInColumn); if (_identifierFieldIndex > -1) _lastSourceIdentifier = _reader[_identifierFieldIndex].ToString(); checked { int num = _reader.FieldCount - 1; for (int i = 0; i <= num; i++) { ArtifactField artifactField = _allFields[_reader.GetName(i).ToLower()]; if (artifactField != null && Operators.CompareString(artifactField.DisplayName, right, false) != 0) { ArtifactField field = artifactField.Copy(); SetFieldValueInvoker(i, field, artifactField.DisplayName); artifactFieldCollectionWithBasicFields.Add(field); } } if (_loadFileSettings.ArtifactTypeID == 10 && _loadFileSettings.LoadNativeFiles && _loadFileSettings.NativeFilePathColumn != null && Operators.CompareString(_loadFileSettings.NativeFilePathColumn, string.Empty, false) != 0) { int num2 = int.Parse(_loadFileSettings.NativeFilePathColumn.Substring(_loadFileSettings.NativeFilePathColumn.LastIndexOf("(")).Trim("()".ToCharArray())); string name = _reader.GetName(num2 - 1); ArtifactField field2 = new ArtifactField(new DocumentField(name, -1, 9, 10, 0, 0, 0, true, kCura.EDDS.WebAPI.DocumentManagerBase.ImportBehaviorChoice.LeaveBlankValuesUnchanged, false)); SetFieldValueInvoker(num2 - 1, field2, name); artifactFieldCollectionWithBasicFields.Add(field2); } if (_loadFileSettings.DataGridIDColumn != null && Operators.CompareString(_loadFileSettings.DataGridIDColumn, string.Empty, false) != 0) { int num3 = int.Parse(_loadFileSettings.DataGridIDColumn.Substring(_loadFileSettings.DataGridIDColumn.LastIndexOf("(")).Trim("()".ToCharArray())); string name2 = _reader.GetName(num3 - 1); ArtifactField field3 = new ArtifactField(new Field { ArtifactID = -3, DisplayName = "DataGridID" }); SetFieldValueInvoker(num3 - 1, field3, name2); artifactFieldCollectionWithBasicFields.Add(field3); } if (_loadFileSettings.CopyFilesToDocumentRepository) { if (!Directory.Exists(_tempLocalDirectory)) Directory.CreateDirectory(_tempLocalDirectory); if (DoesFilenameMarkerFieldExistInIDataReader()) { foreach (ArtifactField item in artifactFieldCollectionWithBasicFields) { if (item.Type == global::Relativity.DataExchange.Service.FieldType.File && Operators.CompareString(item.ValueAsString, string.Empty, false) != 0 && System.IO.File.Exists(item.ValueAsString)) { string text; try { string path = _reader["kcuramarkerfilename"].ToString(); text = Path.Combine(_tempLocalDirectory, path); } catch (Exception ex) { ProjectData.SetProjectError(ex); Exception ex2 = ex; text = Path.Combine(_tempLocalDirectory, Path.GetFileName(item.ValueAsString)); ProjectData.ClearProjectError(); } if (System.IO.File.Exists(text)) try { FileSystem.Instance.File.Delete(text); } catch (Exception ex3) { ProjectData.SetProjectError(ex3); Exception ex4 = ex3; System.IO.File.SetAttributes(text, FileAttributes.Normal); FileSystem.Instance.File.Delete(text); ProjectData.ClearProjectError(); } System.IO.File.Copy(item.ValueAsString, text); System.IO.File.SetAttributes(text, FileAttributes.Normal); item.Value = text; break; } } } } if (_loadFileSettings.CreateFolderStructure && _loadFileSettings.FolderStructureContainedInColumn != null && Operators.CompareString(_loadFileSettings.FolderStructureContainedInColumn, string.Empty, false) != 0) { int num4 = int.Parse(_loadFileSettings.FolderStructureContainedInColumn.Substring(_loadFileSettings.FolderStructureContainedInColumn.LastIndexOf("(")).Trim("()".ToCharArray())); string name3 = _reader.GetName(num4 - 1); ArtifactField field4 = new ArtifactField(name3, -2, global::Relativity.DataExchange.Service.FieldType.Object, global::Relativity.DataExchange.Service.FieldCategory.ParentArtifact, 0, 255, 0, false); SetFieldValueInvoker(num4 - 1, field4, name3); artifactFieldCollectionWithBasicFields.Add(field4); } if (CurrentLineNumber == 0) DisplayFieldMap(_reader, artifactFieldCollectionWithBasicFields); return artifactFieldCollectionWithBasicFields; } } private ArtifactFieldCollection GetArtifactFieldCollectionWithBasicFields() { FileTypeInfo fileTypeIdInfo = GetFileTypeIdInfo(); long? fileSizeData = GetFileSizeData(); return InjectableArtifactFieldCollection.CreateFieldCollection(GetFileNameData(), fileTypeIdInfo, fileSizeData); } private string GetFileNameData() { string text = null; checked { if (!string.IsNullOrEmpty(_FileSettings.FileNameColumn)) { if (_fileSettingsFileNameColumnIndex == -1) { int num = _reader.FieldCount - 1; for (int i = 0; i <= num; i++) { if (Operators.CompareString(_reader.GetName(i), _FileSettings.FileNameColumn, false) == 0) { object objectValue = RuntimeHelpers.GetObjectValue(_reader.GetValue(i)); if (objectValue != null) text = objectValue.ToString(); _fileSettingsFileNameColumnIndex = i; break; } } } else if (Operators.CompareString(_reader.GetName(_fileSettingsFileNameColumnIndex), _FileSettings.FileNameColumn, false) == 0) { object objectValue2 = RuntimeHelpers.GetObjectValue(_reader.GetValue(_fileSettingsFileNameColumnIndex)); if (objectValue2 != null) text = objectValue2.ToString(); } } if (string.IsNullOrEmpty(text)) return null; return text; } } private long? GetFileSizeData() { checked { long? result; if (!_FileSettings.FileSizeMapped) result = null; else { long? result2 = null; if (_fileSettingsFileSizeColumnIndex == -1) { int num = _reader.FieldCount - 1; for (int i = 0; i <= num; i++) { if (Operators.CompareString(_reader.GetName(i), _FileSettings.FileSizeColumn, false) == 0) { long result3 = -1; long.TryParse(Convert.ToString(RuntimeHelpers.GetObjectValue(_reader.GetValue(i))), out result3); result2 = result3; _fileSettingsFileSizeColumnIndex = i; break; } } } else if (Operators.CompareString(_reader.GetName(_fileSettingsFileSizeColumnIndex), _FileSettings.FileSizeColumn, false) == 0) { long result4 = -1; long.TryParse(Convert.ToString(RuntimeHelpers.GetObjectValue(_reader.GetValue(_fileSettingsFileSizeColumnIndex))), out result4); result2 = result4; } if (result2.HasValue) return result2; result = null; } return result; } } private bool? GetSupportedByViewerData() { checked { bool? result; if (string.IsNullOrEmpty(_FileSettings.SupportedByViewerColumn)) result = null; else { bool? result2 = null; if (_fileSupportedByViewerColumnNameIndex == -1) { int num = _reader.FieldCount - 1; for (int i = 0; i <= num; i++) { if (Operators.CompareString(_reader.GetName(i), _FileSettings.SupportedByViewerColumn, false) == 0) { bool result3 = false; bool.TryParse(Convert.ToString(RuntimeHelpers.GetObjectValue(_reader.GetValue(i))), out result3); result2 = result3; _fileSupportedByViewerColumnNameIndex = i; break; } } } else if (Operators.CompareString(_reader.GetName(_fileSupportedByViewerColumnNameIndex), _FileSettings.SupportedByViewerColumn, false) == 0) { bool result4 = false; bool.TryParse(_reader.GetValue(_fileSupportedByViewerColumnNameIndex).ToString(), out result4); result2 = result4; } if (result2.HasValue) return result2; result = null; } return result; } } private FileTypeInfo GetFileTypeIdInfo() { checked { if (_FileSettings.OIFileIdMapped) { string text = ""; int id = default(int); if ((_fileSettingsTypeColumnNameIndex == -1) | (_fileSettingsIDColumnNameIndex == -1)) { int num = _reader.FieldCount - 1; for (int i = 0; i <= num; i++) { if (Operators.CompareString(_reader.GetName(i), _FileSettings.TypeColumnName, false) == 0) { text = Convert.ToString(RuntimeHelpers.GetObjectValue(_reader.GetValue(i))); _fileSettingsTypeColumnNameIndex = i; } else if (Operators.CompareString(_reader.GetName(i), _FileSettings.IDColumnName, false) == 0) { int result = -1; int.TryParse(_reader.GetValue(i).ToString(), out result); id = result; _fileSettingsIDColumnNameIndex = i; } } } else if (Operators.CompareString(_reader.GetName(_fileSettingsTypeColumnNameIndex), _FileSettings.TypeColumnName, false) == 0) { text = _reader.GetValue(_fileSettingsTypeColumnNameIndex).ToString(); } else if (Operators.CompareString(_reader.GetName(_fileSettingsIDColumnNameIndex), _FileSettings.IDColumnName, false) == 0) { int result2 = -1; int.TryParse(_reader.GetValue(_fileSettingsIDColumnNameIndex).ToString(), out result2); id = result2; } if (!string.IsNullOrEmpty(text)) { bool? nullable = null; if (string.IsNullOrEmpty(_FileSettings.IDColumnName)) nullable = GetSupportedByViewerData(); if (nullable.HasValue) return new ExtendedFileTypeInfo(text, nullable.Value); return new FileTypeInfo(id, text); } return null; } return null; } } protected void SetFieldValueInvoker(int idx, ArtifactField field, string displayName) { try { SetFieldValue(field, RuntimeHelpers.GetObjectValue(_reader[idx])); } catch (Exception ex) { ProjectData.SetProjectError(ex); Exception ex2 = ex; throw new FieldValueImportException(ex2, checked(_currentLineNumber + 1), displayName, ex2.Message); } } private void DisplayFieldMap(IDataReader sourceData, ArtifactFieldCollection destination) { string str = "\r\n" + "----------" + "\r\n" + "Field Mapping:" + "\r\n"; string format = "Source field [{0}] --> Destination field [{1}]" + "\r\n"; checked { int num = sourceData.FieldCount - 1; for (int i = 0; i <= num; i++) { ArtifactField artifactField = destination[_reader.GetName(i).ToLower()]; if (artifactField == null) { if (_loadFileSettings.CopyFilesToDocumentRepository & (Operators.CompareString(_reader.GetName(i).ToLower(), "kcuramarkerfilename".ToLower(), false) == 0)) { str += string.Format(format, _reader.GetName(i).ToLower(), "*Filename*"); FieldMappedEvent?.Invoke(_reader.GetName(i), "*Filename*"); } else if (_loadFileSettings.NativeFilePathColumn != null && Operators.CompareString(_reader.GetName(i).ToLower(), nameWithoutIndex(_loadFileSettings.NativeFilePathColumn.ToLower()), false) == 0) { str += string.Format(format, _reader.GetName(i).ToLower(), "*NativeFilePath*"); FieldMappedEvent?.Invoke(_reader.GetName(i), "*NativeFilePath*"); } else { str += string.Format(format, _reader.GetName(i).ToLower(), "NOT MAPPED (Target field not found)"); FieldMappedEvent?.Invoke(_reader.GetName(i), "NOT MAPPED (Target field not found)"); } } else { str += string.Format(format, _reader.GetName(i).ToLower(), artifactField.DisplayName.ToLower()); FieldMappedEvent?.Invoke(_reader.GetName(i), artifactField.DisplayName); } } str = str + "----------" + "\r\n"; StatusMessageEvent?.Invoke(str); } } private bool NonTextField(global::Relativity.DataExchange.Service.FieldType fieldType) { if ((uint)(fieldType - 1) > 2 && (uint)(fieldType - 6) > 1) return false; return true; } protected void SetFieldValue(ArtifactField field, object value) { if (value == null) field.Value = null; else if ((value is string) & NonTextField(field.Type)) { string value2 = Conversions.ToString(value); SetNativeFieldFromTextValue(field, value2); } else { SetNativeFieldValue(field, RuntimeHelpers.GetObjectValue(value)); } } private void SetNativeFieldFromTextValue(ArtifactField field, string value) { if (value.Trim().Length != 0) { switch (field.Type) { case global::Relativity.DataExchange.Service.FieldType.Boolean: field.Value = NullableTypesHelper.GetNullableBoolean(value); break; case global::Relativity.DataExchange.Service.FieldType.Decimal: case global::Relativity.DataExchange.Service.FieldType.Currency: field.Value = NullableTypesHelper.ToNullableDecimal(value.Trim(), NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite | NumberStyles.AllowLeadingSign | NumberStyles.AllowTrailingSign | NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands | NumberStyles.AllowCurrencySymbol); break; case global::Relativity.DataExchange.Service.FieldType.Date: field.Value = NullableTypesHelper.GetNullableDateTime(value); break; case global::Relativity.DataExchange.Service.FieldType.Integer: field.Value = NullableTypesHelper.ToNullableInt32(value.Replace(",", "")); break; default: throw new ArgumentException("Unsupported field type '" + field.Type.ToString() + "'"); } } else field.Value = null; } private void SetNativeFieldValue(ArtifactField field, object value) { switch (field.Type) { case global::Relativity.DataExchange.Service.FieldType.Boolean: field.Value = NullableTypesHelper.DBNullConvertToNullable<bool>(RuntimeHelpers.GetObjectValue(value)); break; case global::Relativity.DataExchange.Service.FieldType.Code: field.Value = NullableTypesHelper.DBNullString(RuntimeHelpers.GetObjectValue(value)); break; case global::Relativity.DataExchange.Service.FieldType.Text: case global::Relativity.DataExchange.Service.FieldType.OffTableText: if (value is Stream) field.Value = RuntimeHelpers.GetObjectValue(value); else field.Value = NullableTypesHelper.DBNullString(RuntimeHelpers.GetObjectValue(value)); break; case global::Relativity.DataExchange.Service.FieldType.User: field.Value = NullableTypesHelper.DBNullString(RuntimeHelpers.GetObjectValue(value)); break; case global::Relativity.DataExchange.Service.FieldType.Varchar: field.Value = NullableTypesHelper.DBNullString(RuntimeHelpers.GetObjectValue(value)); break; case global::Relativity.DataExchange.Service.FieldType.Object: field.Value = NullableTypesHelper.DBNullString(RuntimeHelpers.GetObjectValue(value)); break; case global::Relativity.DataExchange.Service.FieldType.Decimal: case global::Relativity.DataExchange.Service.FieldType.Currency: field.Value = NullableTypesHelper.DBNullConvertToNullable<decimal>(RuntimeHelpers.GetObjectValue(value)); break; case global::Relativity.DataExchange.Service.FieldType.Date: field.Value = NullableTypesHelper.DBNullConvertToNullable<DateTime>(RuntimeHelpers.GetObjectValue(value)); break; case global::Relativity.DataExchange.Service.FieldType.File: field.Value = NullableTypesHelper.DBNullString(RuntimeHelpers.GetObjectValue(value)); break; case global::Relativity.DataExchange.Service.FieldType.Integer: field.Value = NullableTypesHelper.DBNullConvertToNullable<int>(RuntimeHelpers.GetObjectValue(value)); break; case global::Relativity.DataExchange.Service.FieldType.MultiCode: case global::Relativity.DataExchange.Service.FieldType.Objects: field.Value = LoadFileReader.GetStringArrayFromDelimitedFieldValue(RuntimeHelpers.GetObjectValue(value), _loadFileSettings.MultiRecordDelimiter); break; default: throw new ArgumentException("Unsupported field type '" + field.Type.ToString() + "'"); } } public void Halt() { } void IArtifactReader.Halt() { this.Halt(); } public void Close() { while (!_reader.IsClosed) { AdvanceRecord(); } } void IArtifactReader.Close() { this.Close(); } public string ManageErrorRecords(string errorMessageFileLocation, string prePushErrorLineNumbersFileName) { return (_reader as IArtifactReader)?.ManageErrorRecords(errorMessageFileLocation, prePushErrorLineNumbersFileName); } string IArtifactReader.ManageErrorRecords(string errorMessageFileLocation, string prePushErrorLineNumbersFileName) { return this.ManageErrorRecords(errorMessageFileLocation, prePushErrorLineNumbersFileName); } public void OnFatalErrorState() { } void IArtifactReader.OnFatalErrorState() { this.OnFatalErrorState(); } [CompilerGenerated] private string _Lambda$__29-0(int fieldIndex) { return _reader.GetName(fieldIndex); } [CompilerGenerated] private bool _Lambda$__30-0(string columnName) { return _allFields[columnName.ToLower()] == null; } } }