Пример #1
0
 /// <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);
     }
 }
Пример #2
0
        /// <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);
        }
Пример #3
0
 /// <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));
     }
 }
Пример #4
0
        /// <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);
        }
Пример #5
0
 /// <inheritdoc/>
 public virtual string GetRequiredError(ICsvItemContext context)
 {
     return($"{context.Name} is required.");
 }
Пример #6
0
 /// <inheritdoc/>
 public virtual string GetMaxLengthError(ICsvItemContext context, int length)
 {
     return($"{context.Name} must be set within {length} digits.");
 }
Пример #7
0
 /// <inheritdoc/>
 public virtual string GetBooleanConvertError(ICsvItemContext context)
 {
     return($"Set {context.Name} to a value that can be converted to a truth value.");
 }
Пример #8
0
 /// <inheritdoc/>
 public virtual string GetDateTimeFormatError(ICsvItemContext context, string format)
 {
     return($"The format of {context.Name} is incorrect. Please set it in {format} format.");
 }
Пример #9
0
 /// <inheritdoc/>
 public override bool TryConvertToObjectItem(ICsvItemContext context, out object result, out string errorMessage)
 {
     result       = null;
     errorMessage = string.Empty;
     return(true);
 }
Пример #10
0
 /// <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;
 }
Пример #11
0
 /// <inheritdoc/>
 public virtual string GetNumberMaxValueError(ICsvItemContext context, decimal maxValue)
 {
     return($"{context.Name} must be less than or equal to {maxValue}.");
 }
Пример #12
0
 /// <inheritdoc/>
 public override bool Validate(ICsvItemContext context, out string errorMessage)
 {
     errorMessage = string.Empty;
     return(true);
 }
Пример #13
0
 /// <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));
 }
Пример #14
0
 /// <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));
 }
Пример #15
0
 /// <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;
 }
Пример #16
0
 /// <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;
 }
Пример #17
0
 /// <inheritdoc/>
 public virtual string GetNumberOutOfRangeError(ICsvItemContext context, decimal minValue, decimal maxValue)
 {
     return($"Set {context.Name} to a number from {minValue} to {maxValue}.");
 }
Пример #18
0
 /// <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.");
 }
Пример #19
0
 /// <inheritdoc/>
 public virtual string GetNumberMinValueError(ICsvItemContext context, decimal minValue)
 {
     return($"{context.Name} must be set to a value greater than or equal to {minValue}.");
 }
Пример #20
0
 /// <inheritdoc/>
 public virtual string GetNumericConvertError(ICsvItemContext context)
 {
     return($"{context.Name} must be set to a numeric value.");
 }
Пример #21
0
 /// <inheritdoc/>
 public virtual string GetPrecisionError(ICsvItemContext context, int precision)
 {
     return($"The {context.Name} must be set within {precision} digits.");
 }
Пример #22
0
 /// <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;
 }
Пример #23
0
 /// <inheritdoc/>
 public virtual string GetInvalidFormatError(ICsvItemContext context)
 {
     return($"The format of {context.Name} is invalid.");
 }
Пример #24
0
 /// <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;
 }
Пример #25
0
 /// <inheritdoc/>
 public virtual string GetDateTimeConvertError(ICsvItemContext context)
 {
     return($"Set {context.Name} to a value that can be converted to a date and time.");
 }
Пример #26
0
 /// <summary>
 /// エラーメッセージを返します。
 /// </summary>
 /// <param name="context"><see cref="ICsvItemContext"/>。</param>
 /// <returns>エラーメッセージ。</returns>
 protected virtual string GetErrorMessage(ICsvItemContext context)
 {
     return(CsvConfig.Current.ValidationMessage.GetInvalidFormatError(context));
 }