com.github.mygreen.supercsv.annotation.format.CsvEnumFormat Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of super-csv-annotation Show documentation
Show all versions of super-csv-annotation Show documentation
CSVのJavaライブラリであるSuperCSVに、アノテーション機能を追加したライブラリです。
package com.github.mygreen.supercsv.annotation.format;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.Collection;
import org.supercsv.cellprocessor.ift.CellProcessor;
/**
* 列挙型の書式を定義するためのアノテーションです。
*
* 基本的な使い方
* 列挙型の場合、アノテーションを付与しなくてもマッピングできます。
*
その際は、カラムの値と列挙型の要素の値をマッピングさせます。
*
要素の値とは、{@link Enum#name()}で取得できる値です。
*
*
* - 属性{@link #ignoreCase()}で、読み込み時に大文字・小文字の区別なく比較するか指定します。
*
*
*
* {@literal @CsvBean}
* public class SampleCsv {
*
* {@literal @CsvColumn(number=1, label="権限")}
* private RoleType role;
*
* // 読み込み時に大文字・小文字の区別を行いません。
* {@literal @CsvColumn(number=2, label="権限2")}
* {@literal @CsvEnumFormat(ignoreCase=true)}
* private RoleType role2;
*
* // setter/getterは省略
* }
*
* // 列挙型の定義
* public enum RoleType {
* Normal, Admin;
* }
*
*
* 別名でマッピングする場合
* 別名でマッピングする場合、属性{@link #selector()} で列挙型の要素の別名を取得するメソッド名を指定します。
* 以下の例では、読み込み時に入力値が {@literal 一般権限} の場合、 {@literal RoleType.Normal} にマッピングされます。
*
*
* {@literal @CsvBean}
* public class SampleCsv {
*
* {@literal @CsvColumn(number=1, label="権限")}
* {@literal @CsvEnumFormat(selector="localeName")}
* private RoleType role;
*
* // setter/getterは省略
* }
*
* // 列挙型の定義
* public enum RoleType {
* Normal("一般権限"), Admin("管理者権限");
*
* // 別名の設定
* private String localeName;
*
* private RoleType(String localeName) {
* this.localeName = localeName;
* }
*
* // 別名の取得用メソッド
* public String localeName() {
* return this.localeName;
* }
* }
*
*
* @version 2.0
* @author T.TSUCHIE
*
*/
@Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CsvEnumFormat {
/**
* 読み込み時に、大文字・小文字を区別なく候補の値と比較して判定するか指定します。
* @return trueの場合、大文字・小文字の区別は行いません。
*/
boolean ignoreCase() default false;
/**
* 列挙型を{@link Enum#name()}メソッド以外から取得するときに指定します。
* 例). Color.label()のlabel()メソッドを指定するときには、'label'と指定します。
* @return 独自に実装した引数なしの文字列型を返すメソッドを指定します。省略した場合は、{@link Enum#name()}から取得できる値が採用されます。
*/
String selector() default "";
/**
* エラー時のメッセージを指定します。
*
{@literal {key}}の書式の場合、プロパティファイルから取得した値を指定できます。
* このメッセージは、文字列を列挙型にパースする際に失敗したときに適用されるメッセージに使用します。
*
* 使用可能なメッセージ中の変数は下記の通りです。
*
* - lineNumber : カラムの値に改行が含まれている場合を考慮した実際の行番号です。1から始まります。
* - rowNumber : CSVの行番号です。1から始まります。
* - columnNumber : CSVの列番号です。1から始まります。
* - label : カラムの見出し名です。
* - validatedValue : 実際のカラムの値です。
* - ignoreCase : アノテーションの属性{@link #ignoreCase()}の値です。
* - selector : アノテーションの属性{@link #selector()}の値です。
* - enums : 列挙型の値を{@link Collection}型に変換した値です。
*
*
* @return 省略した場合は、適用された{@link CellProcessor}に基づいたメッセージが出力されます。
*/
String message() default "{com.github.mygreen.supercsv.annotation.format.CsvEnumFormat.message}";
}