public Result <object, IValidationError> Map(string value, Type propertyType, int rowIndex, ColumnMapping columnMapping)
        {
            if (string.IsNullOrEmpty(value))
            {
                return(HandleEmptyValue(columnMapping.ColumnIndex, rowIndex, columnMapping));
            }

            if (columnMapping.CustomValueParser.IsNotNull())
            {
                try
                {
                    var parsedValue = columnMapping.CustomValueParser(value);
                    return(Result.Ok <object, IValidationError>(parsedValue));
                }
                catch (Exception)
                {
                    var parsingValidationError = ParsingValidationError.CouldNotParseValue(
                        columnMapping.ColumnIndex,
                        rowIndex,
                        columnMapping.DisplayName,
                        columnMapping.PropertyName);

                    return(Result.Fail <object, IValidationError>(parsingValidationError));
                }
            }

            return(_valueParser
                   .Parse(propertyType, value, columnMapping.Format)
                   .OnValidationSuccess(parsedValue => parsedValue)
                   .OnValidationFailure(error => ParsingValidationError.CouldNotParseValue(
                                            columnMapping.ColumnIndex,
                                            rowIndex,
                                            columnMapping.DisplayName,
                                            columnMapping.PropertyName)));
        }
Ejemplo n.º 2
0
        private static Maybe <IValidationError> HandleEmptyCell(ColumnMapping columnMapping, int rowIndex, string propertyName)
        {
            if (!columnMapping.IsRequired)
            {
                return(Maybe <IValidationError> .None);
            }

            var parsingValidationError = ParsingValidationError.CellNotFound(
                columnMapping.ColumnIndex,
                rowIndex,
                columnMapping.DisplayName,
                propertyName);

            return(Maybe <IValidationError> .From(parsingValidationError));
        }
Ejemplo n.º 3
0
        private List <IValidationError> HandleHeaderRow(Row firstRow, MappingConfig mappingConfig)
        {
            var validationErrors = new List <IValidationError>();

            foreach (var columnMapping in mappingConfig.ColumnMappings.OfType <IUseHeaderRow>())
            {
                var headerCell = firstRow.Cells.FirstOrDefault(c => c.Value.ToString().Equals(columnMapping.ColumnName.ToString(), StringComparison.OrdinalIgnoreCase));
                if (headerCell != null)
                {
                    columnMapping.SetColumnIndex(headerCell.ColumnIndex);
                }
                else if (columnMapping.IsRequiredInHeaderRow)
                {
                    validationErrors.Add(ParsingValidationError.CouldNotFindHeader(-1, 0, columnMapping.ColumnName, columnMapping.ColumnName));
                }
            }

            return(validationErrors);
        }