Example #1
0
        private void SourceBeforeProcessDataRow(ProcessRowEventArgs <ParserContext20> e)
        {
            e.Context.CurrentDataRow20 = new DataRow20 {
                Row = e.Row
            };
            e.Context.DataRows.Add(e.Context.CurrentDataRow20);
            var kvp = FindDataRowProcessorDefinition(_fileProcessorDefinition, e);

            var hasValidDataType = ValidateDataRowProcessorDefinition(e, kvp.Value, kvp.Key);

            if (!hasValidDataType)
            {
                e.Context.UndecodedDataRows.Add(e.Context.CurrentDataRow20);
                return;
            }

            var lineType = $"Data Row '{e.Context.CurrentDataRow20.DataType}'";
            var hasValidateNumerOfFields = ParsedDataProcessorHelper.ValidateNumerOfFields(lineType, e.Row, kvp.Value.RowProcessorDefinition);

            if (!hasValidateNumerOfFields)
            {
                e.Context.UndecodedDataRows.Add(e.Context.CurrentDataRow20);
                return;
            }

            e.Context.DecodedDataRows.Add(e.Context.CurrentDataRow20);
        }
Example #2
0
        private void SourceBeforeProcessRow(object sender, ProcessRowEventArgs <ParserContext10> e)
        {
            DataProcessorGlobal.Debug($"Processing Row. Index: {e.Row.Index}, Raw Data: '{e.Row.Raw}'");

            string lineType;
            RowProcessorDefinition rowProcessorDefinition;

            if (IsHeaderRow(e.Row))
            {
                lineType = "Header Row";
                rowProcessorDefinition = _fileProcessorDefinition.HeaderRowProcessorDefinition;
                e.Context.Header       = e.Row;
                ParsedDataProcessorHelper.ValidateNumerOfFields(lineType, e.Row, rowProcessorDefinition);
                return;
            }

            if (IsTrailerRow(e.Context.IsCurrentRowTheLast))
            {
                lineType = "Trailer Row";
                rowProcessorDefinition = _fileProcessorDefinition.TrailerRowProcessorDefinition;
                e.Context.Trailer      = e.Row;
                ParsedDataProcessorHelper.ValidateNumerOfFields(lineType, e.Row, rowProcessorDefinition);
                return;
            }

            lineType = "Data Row";
            rowProcessorDefinition = _fileProcessorDefinition.DataRowProcessorDefinition;
            e.Context.DataRows.Add(e.Row);
            ParsedDataProcessorHelper.ValidateNumerOfFields(lineType, e.Row, rowProcessorDefinition);
        }
Example #3
0
        private void AfterProcessHeaderRow(ProcessRowEventArgs <ParserContext10> e)
        {
            if (!IsValidRow(e))
            {
                e.Context.Errors.Add("Header row is invalid");
                return;
            }

            if (_fileProcessorDefinition.CreateRowJsonEnabled)
            {
                ParsedDataProcessorHelper.SetJson(e.Row, _fileProcessorDefinition.HeaderRowProcessorDefinition.FieldProcessorDefinitions);
            }
        }
Example #4
0
        private void AfterProcessDataRow(ProcessRowEventArgs <ParserContext10> e)
        {
            if (!IsValidRow(e))
            {
                e.Context.InvalidDataRows.Add(e.Row);
                return;
            }

            if (_fileProcessorDefinition.CreateRowJsonEnabled)
            {
                ParsedDataProcessorHelper.SetJson(e.Row, _fileProcessorDefinition.DataRowProcessorDefinition.FieldProcessorDefinitions);
            }
        }
Example #5
0
        private bool ValidateDataRowProcessorDefinition(
            ProcessRowEventArgs <ParserContext20> e,
            DataRowProcessorDefinition dataRowProcessorDefinition,
            string dataType)
        {
            if (dataRowProcessorDefinition == null)
            {
                e.Row.ValidationResult = ValidationResultType.Error;
                var error = $"Unknown line type";
                e.Row.Errors.Add(error);
                return(false);
            }

            e.Context.CurrentDataRow20.DataType = dataType;
            e.Context.DataTypeFieldIndex        = dataRowProcessorDefinition.DataTypeFieldIndex;
            e.Context.DataKeyFieldIndex         = dataRowProcessorDefinition.DataKeyFieldIndex;
            return(true);
        }
Example #6
0
        private void SourceBeforeProcessRow(object sender, ProcessRowEventArgs <ParserContext20> e)
        {
            DataProcessorGlobal.Debug($"Processing Row. Index: {e.Row.Index}, Raw Data: '{e.Row.Raw}'");
            ClearContext(e.Context);

            if (IsHeaderRow(e.Row))
            {
                BeforeProcessHeaderRow(e);
                return;
            }

            if (IsTrailerRow(e.Context.IsCurrentRowTheLast))
            {
                BeforeProcessTrailerRow(e);
                return;
            }

            SourceBeforeProcessDataRow(e);
        }
Example #7
0
        private void SourceAfterProcessRow(object sender, ProcessRowEventArgs <ParserContext10> e)
        {
            e.Context.ValidationResult = ParsedDataProcessorHelper.GetMaxValidationResult(e.Context.ValidationResult, e.Row.ValidationResult);
            if (e.Context.ValidationResult == ValidationResultType.Critical)
            {
                e.Context.IsAborted = true;
            }

            if (IsHeaderRow(e.Row))
            {
                AfterProcessHeaderRow(e);
                return;
            }

            if (IsTrailerRow(e.Context.IsCurrentRowTheLast))
            {
                AfterProcessTrailerRow(e);
                return;
            }

            AfterProcessDataRow(e);
        }
Example #8
0
        private void CreateRow(TParserContext context)
        {
            if (IsLineCommentedOut(context.CurrentRowRaw))
            {
                return;
            }

            var row = new Row
            {
                Index            = context.CurrentRowIndex,
                Raw              = context.CurrentRowRaw,
                RawFields        = _lineParser.Parse(context.CurrentRowRaw),
                ValidationResult = ValidationResultType.Valid
            };

            context.CurrentRowRawFields = row.RawFields;

            var processRowEventArgs = new ProcessRowEventArgs <TParserContext>(row, context);

            OnBeforeProcessRow(processRowEventArgs);
            if (context.IsAborted)
            {
                return;
            }

            if (row.ValidationResult == ValidationResultType.Valid || row.ValidationResult == ValidationResultType.Warning)
            {
                CreateFieldsForRow(row, context);
                if (context.IsAborted)
                {
                    return;
                }
            }

            OnAfterProcessRow(processRowEventArgs);
        }
Example #9
0
        private static KeyValuePair <string, DataRowProcessorDefinition> FindDataRowProcessorDefinition(FileProcessorDefinition20 fileProcessorDefinition, ProcessRowEventArgs <ParserContext20> e)
        {
            foreach (var kvp in fileProcessorDefinition.DataRowProcessorDefinitions)
            {
                if (kvp.Value.DataTypeFieldIndex >= e.Row.RawFields.Length)
                {
                    continue;
                }

                if (e.Row.RawFields[kvp.Value.DataTypeFieldIndex] == kvp.Key)
                {
                    return(kvp);
                }
            }

            return(default);
Example #10
0
 private void BeforeProcessTrailerRow(ProcessRowEventArgs <ParserContext20> e)
 {
     e.Context.Trailer = e.Row;
     ParsedDataProcessorHelper.ValidateNumerOfFields("Trailer Row", e.Row, _fileProcessorDefinition.TrailerRowProcessorDefinition);
 }
Example #11
0
 protected bool IsValidRow(ProcessRowEventArgs <TParserContext> e)
 {
     return(e.Row.ValidationResult == ValidationResultType.Valid || e.Row.ValidationResult == ValidationResultType.Warning);
 }
Example #12
0
 protected virtual void OnAfterProcessRow(ProcessRowEventArgs <TParserContext> e)
 {
     AfterProcessRow?.Invoke(this, e);
 }