/// <summary> /// CSV項目を検証します。検証に失敗した場合は例外をスローします。 /// </summary> /// <param name="column"><see cref="CsvColumn"/>。</param> /// <param name="context"><see cref="ICsvItemContext"/>。</param> private static void Validate(CsvColumn column, ICsvItemContext context) { if (!column.Validate(context, out string errorMessage)) { throw new CsvValidationException(errorMessage, context); } }
/// <summary> /// オブジェクト項目に変換します。変更に失敗した場合は例外をスローします。 /// </summary> /// <param name="column"><see cref="CsvColumn"/>。</param> /// <param name="context"><see cref="ICsvItemContext"/>。</param> /// <returns>変換結果。</returns> private static object ConvertToObjectItem(CsvColumn column, ICsvItemContext context) { if (!column.TryConvertToObjectItem(context, out object value, out string errorMessage)) { throw new CsvValidationException(errorMessage, context); } return(value); }
/// <summary> /// 精度エラーの場合のメッセージを返します。 /// </summary> /// <param name="context"><see cref="ICsvItemContext"/>。</param> /// <returns>精度エラーの場合のメッセージ。</returns> private string GetPrecisionErrorMessage(ICsvItemContext context) { if (this.scale == 0) { return(CsvConfig.Current.ValidationMessage.GetPrecisionError(context, this.precision)); } else { return(CsvConfig.Current.ValidationMessage.GetPrecisionAndScaleError(context, this.precision, this.scale)); } }
/// <summary> /// <see cref="ICsvItemContext"/>の作成を試みます。 /// </summary> /// <param name="items"><see cref="CsvItems"/>。</param> /// <param name="context"><see cref="ICsvItemContext"/>。</param> /// <returns>作成できた場合にtrue。</returns> public bool TryCreateCsvItemContext(CsvItems items, out ICsvItemContext context) { if (!items.TryGetItem(this.attribute.Index, out string csvItem)) { context = new CsvItemContext(this.Name, items.LineNumber, string.Empty); return(false); } context = new CsvItemContext(this.Name, items.LineNumber, csvItem); return(true); }
/// <inheritdoc/> public virtual string GetRequiredError(ICsvItemContext context) { return($"{context.Name} is required."); }
/// <inheritdoc/> public virtual string GetMaxLengthError(ICsvItemContext context, int length) { return($"{context.Name} must be set within {length} digits."); }
/// <inheritdoc/> public virtual string GetBooleanConvertError(ICsvItemContext context) { return($"Set {context.Name} to a value that can be converted to a truth value."); }
/// <inheritdoc/> public virtual string GetDateTimeFormatError(ICsvItemContext context, string format) { return($"The format of {context.Name} is incorrect. Please set it in {format} format."); }
/// <inheritdoc/> public override bool TryConvertToObjectItem(ICsvItemContext context, out object result, out string errorMessage) { result = null; errorMessage = string.Empty; return(true); }
/// <summary> /// <see cref="CsvValidationException"/>クラスの新しいインスタンスを初期化します。 /// </summary> /// <param name="message">メッセージ。</param> /// <param name="context"><see cref="ICsvItemContext"/>。</param> public CsvValidationException(string message, ICsvItemContext context) : base(message) { this.Context = context; }
/// <inheritdoc/> public virtual string GetNumberMaxValueError(ICsvItemContext context, decimal maxValue) { return($"{context.Name} must be less than or equal to {maxValue}."); }
/// <inheritdoc/> public override bool Validate(ICsvItemContext context, out string errorMessage) { errorMessage = string.Empty; return(true); }
/// <summary> /// CSV項目を検証します。 /// </summary> /// <param name="context"><see cref="ICsvItemContext"/>。</param> /// <param name="errorMessage">エラーメッセージ。</param> /// <returns>検証に成功した場合にtrue。</returns> public virtual bool Validate(ICsvItemContext context, out string errorMessage) { return(this.property.Validate(new CsvValidationContext(context), out errorMessage)); }
/// <summary> /// CSV項目からオブジェクト項目への変換を試みます。 /// </summary> /// <param name="context"><see cref="ICsvItemContext"/>。</param> /// <param name="result">変換結果。</param> /// <param name="errorMessage">エラーメッセージ。</param> /// <returns>変換に成功した場合にtrue。</returns> public virtual bool TryConvertToObjectItem(ICsvItemContext context, out object result, out string errorMessage) { return(this.converter.TryConvertToObjectItem(new ConvertToObjectItemContext(this.property, context), out result, out errorMessage)); }
/// <summary> /// <see cref="CsvValidationContext"/>クラスの新しいインスタンスを初期化します。 /// </summary> /// <param name="context"><see cref="ICsvItemContext"/>。</param> public CsvValidationContext(ICsvItemContext context) { this.LineNumber = context.LineNumber; this.Name = context.Name; this.Value = context.Value; }
/// <summary> /// <see cref="CsvValidationException"/>クラスの新しいインスタンスを初期化します。 /// </summary> /// <param name="message">メッセージ。</param> /// <param name="context"><see cref="ICsvItemContext"/>。</param> /// <param name="innerException">例外のもととなった例外。</param> public CsvValidationException(string message, ICsvItemContext context, Exception innerException) : base(message, innerException) { this.Context = context; }
/// <inheritdoc/> public virtual string GetNumberOutOfRangeError(ICsvItemContext context, decimal minValue, decimal maxValue) { return($"Set {context.Name} to a number from {minValue} to {maxValue}."); }
/// <inheritdoc/> public virtual string GetPrecisionAndScaleError(ICsvItemContext context, int precision, int scale) { return($"The {context.Name} must be within {precision - scale} digits of the integer and {scale} digits of the decimal."); }
/// <inheritdoc/> public virtual string GetNumberMinValueError(ICsvItemContext context, decimal minValue) { return($"{context.Name} must be set to a value greater than or equal to {minValue}."); }
/// <inheritdoc/> public virtual string GetNumericConvertError(ICsvItemContext context) { return($"{context.Name} must be set to a numeric value."); }
/// <inheritdoc/> public virtual string GetPrecisionError(ICsvItemContext context, int precision) { return($"The {context.Name} must be set within {precision} digits."); }
/// <summary> /// <see cref="CsvErrorItem"/>クラスの新しいインスタンスを初期化します。 /// </summary> /// <param name="errorMessage">エラーメッセージ。</param> /// <param name="context"><see cref="ICsvItemContext"/>。</param> public CsvErrorItem(string errorMessage, ICsvItemContext context) { this.Context = context; this.ErrorMessage = errorMessage; }
/// <inheritdoc/> public virtual string GetInvalidFormatError(ICsvItemContext context) { return($"The format of {context.Name} is invalid."); }
/// <summary> /// <see cref="ConvertToObjectItemContext"/>クラスの新しいインスタンスを初期化します。 /// </summary> /// <param name="property"><see cref="CsvProperty"/>。</param> /// <param name="context"><see cref="ICsvItemContext"/>。</param> public ConvertToObjectItemContext(CsvProperty property, ICsvItemContext context) : base(property, context.Name) { this.LineNumber = context.LineNumber; this.CsvItem = context.Value; }
/// <inheritdoc/> public virtual string GetDateTimeConvertError(ICsvItemContext context) { return($"Set {context.Name} to a value that can be converted to a date and time."); }
/// <summary> /// エラーメッセージを返します。 /// </summary> /// <param name="context"><see cref="ICsvItemContext"/>。</param> /// <returns>エラーメッセージ。</returns> protected virtual string GetErrorMessage(ICsvItemContext context) { return(CsvConfig.Current.ValidationMessage.GetInvalidFormatError(context)); }