All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.mygreen.supercsv.annotation.constraint.CsvDateTimeRange Maven / Gradle / Ivy

Go to download

CSVのJavaライブラリであるSuperCSVに、アノテーション機能を追加したライブラリです。

There is a newer version: 2.3
Show newest version
package com.github.mygreen.supercsv.annotation.constraint;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.supercsv.cellprocessor.ift.CellProcessor;

import com.github.mygreen.supercsv.annotation.DefaultGroup;
import com.github.mygreen.supercsv.builder.BuildCase;
import com.github.mygreen.supercsv.cellprocessor.format.TextPrinter;

/**
 * 値が指定した期間内かどうか検証するためのアノテーションです。
 * 

日時型に指定可能です。

* *

基本的な使い方

* *
    *
  • 属性{@link #min()}で、下限値としての日時を指定します。 *
    値は、クラスタイプや指定した書式に沿った形式で指定する必要があります。 *
  • *
  • 属性{@link #max()}で、上限値としての日時を指定します。 *
    値は、クラスタイプや指定した書式に沿った形式で指定する必要があります。 *
  • *
  • 属性{@link #inclusive()}で、値の検証時に属性{@link #min()}と{@link #max()}の値を含むかどうか指定します。 *
    初期値はtrueで、指定した値を含みます。
  • *
* *

 * {@literal @CsvBean}
 * public class SampleCsv {
 *     
 *     // 値は書式に沿った形式で入力します。
 *     {@literal @CsvColumn(number=1)}
 *     {@literal @CsvDateTimeFormat(pattern="yyyy/MM/dd")}
 *     {@literal @CsvDateTimeRange(min="1900/01/01", max="2050/12/31")}
 *     private LocalDate birthday;
 *     
 *     // 比較する際には指定した期間内(境界値を含まない)かどうかで判定します。
 *     {@literal @CsvColumn(number=2)}
 *     {@literal @CsvDateTimeRange(min="1970-01-01 00:00:00.000", max="9999-12-31 23:59:59.999", inclusive=false)}
 *     private Timestamp registerTime;
 *     
 *     // getter/setterは省略
 * }
 * 
* * @since 2.0 * @author T.TSUCHIE * */ @Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Repeatable(CsvDateTimeRange.List.class) @CsvConstraint(value={}) public @interface CsvDateTimeRange { /** * 下限値としての日時を指定します。 * @return 値は、クラスタイプやアノテーションで指定した書式に沿った形式で指定する必要があります。 */ String min(); /** * 上限値としての日時を指定します。 * @return 値は、クラスタイプやアノテーションで指定した書式に沿った値を指定する必要があります。 */ String max(); /** * 値を比較する際に指定した値を含むかどうかを指定します。 * @return {@code true}の場合、日時以降か、以前かどうかとして比較します。 * {@code false}の場合、値より後か、前かどうかとして比較します。 */ boolean inclusive() default true; /** * エラー時のメッセージを指定します。 *

{@literal {key}}の書式の場合、プロパティファイルから取得した値を指定できます。

* *

使用可能なメッセージ中の変数は下記の通りです。

*
    *
  • lineNumber : カラムの値に改行が含まれている場合を考慮した実際の行番号です。1から始まります。
  • *
  • rowNumber : CSVの行番号です。1から始まります。
  • *
  • columnNumber : CSVの列番号です。1から始まります。
  • *
  • label : カラムの見出し名です。
  • *
  • validatedValue : 実際のカラムの値です。
  • *
  • min : アノテーションの属性{@link #min()}をフィールドの型に変換した値です。
  • *
  • max : アノテーションの属性{@link #max()}をフィールドの型に変換した値です。
  • *
  • inclusive : アノテーションの属性{@link #inclusive()}の値です。
  • *
  • printer : カラムの値に対数するフォーマッタです。{@link TextPrinter#print(Object)}でvalidatedValue, min, maxの値を文字列に変換します。
  • *
* * @return 省略した場合は、適用された{@link CellProcessor}に基づいたメッセージが出力されます。 */ String message() default "{com.github.mygreen.supercsv.annotation.constraint.CsvDateTimeRange.message}"; /** * 適用するケースを指定します。 * @return 何も指定しない場合は全てのケースに適用されます。 */ BuildCase[] cases() default {}; /** * グループのクラスを指定します。 *

処理ごとに適用するアノテーションを切り替えたい場合に指定します。 * @return 指定しない場合は、{@link DefaultGroup}が適用され全ての処理に適用されます。 */ Class[] groups() default {}; /** * アノテーションの処理順序の定義。 * @return 値が大きいほど後に実行されます。 * 値が同じ場合は、アノテーションのクラス名の昇順になります。 */ int order() default 0; /** * アノテーションを複数個指定する際の要素です。 */ @Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @interface List { CsvDateTimeRange[] value(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy