private static void ExportOneInstance <T, V>(IFileWriter writer, IMultiRecordMapper <T, V> recordMapper) where V : class, new() { if (null != recordMapper.SignatureRecordMapper) { recordMapper.SignatureRecordMapper.Value = recordMapper.Value; recordMapper.SignatureRecordMapper.Export(writer); } foreach (var m in recordMapper.RecordMappers) { m.Target = recordMapper.Value; m.Export(writer); } }
public static void Export <T, V>(this IMultiRecordMapper <T, V> recordMapper, IFileWriter writer) where V : class, new() { IEnumerable <V> vEnumerable = recordMapper.EnumerableOfV; if (null == vEnumerable) { recordMapper.Value = recordMapper.GetObject(); if (null != recordMapper.Value) { ExportOneInstance(writer, recordMapper); } } else { foreach (V v in vEnumerable) { recordMapper.Value = v; ExportOneInstance(writer, recordMapper); } } }
public static ExtractStatus Import <T, V>(this IMultiRecordMapper <T, V> recordMapper, IFileReader reader) where V : class, new() { ExtractStatus r = ExtractStatus.Failed; int count = 0; do { V v = null; if (null == recordMapper.SignatureRecordMapper) { v = new V(); r = ExtractStatus.Success; } else { recordMapper.SignatureRecordMapper.Target = recordMapper.Target; recordMapper.SignatureRecordMapper.Value = null; r = recordMapper.SignatureRecordMapper.Import(reader); v = recordMapper.SignatureRecordMapper.Value; if (r == ExtractStatus.Success && v == null || r == ExtractStatus.Failed) { if (count >= recordMapper.MinOccurrence && (recordMapper.MaxOccurrence == 0 || count <= recordMapper.MaxOccurrence)) { r = ExtractStatus.Success; } else { r = ExtractStatus.Failed; r.Message = String.Format(LessMessage, count, recordMapper.ToString(), recordMapper.MinOccurrence); } return(r); } else if (r == ExtractStatus.SkipTheRest) { break; } } if (r == ExtractStatus.Success) { ++count; recordMapper.Value = v; recordMapper.SetProperty(); if (null != recordMapper.RecordMappers) { foreach (var m in recordMapper.RecordMappers) { m.Target = v; r = m.Import(reader); if (r != ExtractStatus.Success) { break; } } } } } while (recordMapper.MaxOccurrence == 0 || count < recordMapper.MaxOccurrence); return(r); }