private List <char[]> ProcessEnumerableDataProperty(IEdiSubDataRecordEnumerableSettings settings, CultureInfo cultureInfo) { var dataRecordEnumerable = settings.PropertyInfo.GetValue(settings.DataRecord) as System.Collections.IEnumerable; if (dataRecordEnumerable != null) { (var minIndex, var maxIndex) = GetRowIndexRange(settings.DataProperty, -1, -1); var dataRecordSettings = new EdiDataRecordSettings { DataProperty = settings.DataProperty, MaxLineLength = settings.MaxLineLength, MaxLineCount = settings.MaxLineCount, CultureInfo = cultureInfo }; foreach (var subItem in dataRecordEnumerable) { dataRecordSettings.DataRecord = subItem; var enumerableResult = ProcessDataRecord(dataRecordSettings); if (settings.DataProperty.IsSameDataRecord) { settings.TargetDataRows = CombineDataRows(settings.TargetDataRows, enumerableResult).ToList(); } else if (settings.DataProperty.CanRepeatEDI) { var resultSet = new EnumerableResultSet { TargetDataRows = settings.TargetDataRows, ResultdataRows = enumerableResult, MinLineIndex = minIndex, MaxLineIndex = maxIndex, MaxLineLength = settings.MaxLineLength }; AddEnumerableResultToDataRows(resultSet); } else { settings.SubDataRows.Add(enumerableResult); } } } return(settings.TargetDataRows); }
private string ProcessDataRecord <T>(T dataRecord, DataProperty dataProperty, CultureInfo cultureInfo) where T : class { var maxLineLength = GetMaximumLineLength(dataProperty); var maxLineCount = GetMaxLineCount(dataProperty); var dataRecordSettings = new EdiDataRecordSettings { DataRecord = dataRecord, DataProperty = dataProperty, MaxLineLength = maxLineLength, MaxLineCount = maxLineCount, CultureInfo = cultureInfo }; var dataRows = ProcessDataRecord(dataRecordSettings).ToList(); return(TransformDataRowArraysToDataRowString(dataRows)); }
private IEnumerable <char[]> ProcessDataRecord(EdiDataRecordSettings dataRecordSettings) { var dataRows = new List <char[]>(); var subDataRows = new List <IEnumerable <char[]> >(); var propertyInfos = dataRecordSettings.DataRecord.GetType().GetProperties(); foreach (var childDataProperty in dataRecordSettings.DataProperty.DataProperties) { var propertyInfo = propertyInfos.SingleOrDefault(pi => pi.Name.Equals(childDataProperty.PropertyTarget)); if (propertyInfo != null) { var subDataRecordSettings = new EdiSubDataRecordSettings { DataRecord = dataRecordSettings.DataRecord, DataProperty = childDataProperty, PropertyInfo = propertyInfo, PropertyInfos = propertyInfos, TargetDataRows = dataRows, SubDataRows = subDataRows, MaxLineLength = dataRecordSettings.MaxLineLength, MaxLineCount = dataRecordSettings.MaxLineCount }; if (CheckIfIEnumerable(propertyInfo)) { dataRows = ProcessEnumerableDataProperty(subDataRecordSettings, dataRecordSettings.CultureInfo); } else if (CheckIfClass(propertyInfo)) { dataRows = ProcessClassDataProperty(subDataRecordSettings, dataRecordSettings.CultureInfo); } else if (!childDataProperty.HasMapping) { ProcessPrimitiveDataProperty(subDataRecordSettings, dataRecordSettings.CultureInfo); } } dataRows = CombineDataRows(dataRows, subDataRows).ToList(); } return(dataRows); }
private List <char[]> ProcessClassDataProperty(IEdiSubDataRecordSettings settings, CultureInfo cultureInfo) { var dataRecordClass = settings.PropertyInfo.GetValue(settings.DataRecord); if (dataRecordClass != null) { var dataRecordSettings = new EdiDataRecordSettings { DataRecord = dataRecordClass, DataProperty = settings.DataProperty, MaxLineLength = settings.MaxLineLength, MaxLineCount = settings.MaxLineCount, CultureInfo = cultureInfo }; var classResult = ProcessDataRecord(dataRecordSettings).ToList(); settings.TargetDataRows = CombineDataRows(settings.TargetDataRows, classResult).ToList(); } return(settings.TargetDataRows); }
private string ProcessDataRecords <T>(IEnumerable <T> dataRecords, DataProperty dataProperty, CultureInfo cultureInfo) where T : class { var dataRows = new List <char[]>(); var maxLineLength = GetMaximumLineLength(dataProperty); var maxLineCount = GetMaxLineCount(dataProperty); var dataRecordSettings = new EdiDataRecordSettings { DataProperty = dataProperty, MaxLineLength = maxLineLength, MaxLineCount = maxLineCount, CultureInfo = cultureInfo }; foreach (var dataRecord in dataRecords) { dataRecordSettings.DataRecord = dataRecord; dataRows.AddRange(ProcessDataRecord(dataRecordSettings)); } return(TransformDataRowArraysToDataRowString(dataRows)); }