Example #1
0
        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);
        }
Example #2
0
        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));
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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));
        }