Exemplo n.º 1
0
        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);
        }