package com.github.mygreen.supercsv.annotation.conversion; 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 com.github.mygreen.supercsv.builder.AbstractProcessorBuilder; import com.github.mygreen.supercsv.cellprocessor.ConversionProcessorFactory; /** * 変換のアノテーションを表現するためのメタアノテーションです。 * <p>変換のアノテーションには必ず付与します。</p> * * <h3 class="description">基本的な使い方</h3> * <ul> * <li>{@literal @Target}として、{@link ElementType#FIELD}と{@link ElementType#ANNOTATION_TYPE}の2つを指定します。 * <br>アノテーションを合成する際にはアノテーションにも付与するため、{@link ElementType#ANNOTATION_TYPE}を追加しておきます。 * </li> * <li>繰り返しのアノテーションとして利用できるよう {@literal @Repeatable}を付与します。 * <br>繰り返しのアノテーションを格納する内部アノテーションとして、{@literal List}を定義します。 * </li> * <li>検証用のアノテーションであることを示すためのメタアノテーション {@literal @CsvContraint}を指定します。 * <br>属性{@link #value()}で、{@link ConversionProcessorFactory}の実装クラスを指定します。 * </li> * <li>共通の属性として、{@literal cases, groups, order}を定義します。 * <br>省略した場合は、それぞれのデフォルト値が適用されます。 * </li> * <li>必要であれば、固有の属性を定義します。</li> * </ul> * * <pre class="highlight"><code class="java"> * // 独自の値の検証用のアノテーション * {@literal @Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})} * {@literal @Retention(RetentionPolicy.RUNTIME)} * {@literal @Documented} * {@literal @Repeatable(CsvCustomConversion.List.class)} * {@literal @CsvConstraint(CustomConversionFactory.class)} // ファクトリクラスを指定 * public {@literal @interface} CsvCustomConversion { * * // 固有の属性 - 必要であれば定義します。 * String text(); * * // 共通の属性 - ケース * BuildCase[] cases() default {}; * * // 共通の属性 - グループ * {@literal Class<?>[]} groups() default {}; * * // 共通の属性 - 並び順 * int order() default 0; * * // 繰り返しのアノテーションの格納用アノテーションの定義 * {@literal @Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})} * {@literal @Retention(RetentionPolicy.RUNTIME)} * {@literal @Documented} * {@literal @interface} List { * * CsvCustomConversion[] value(); * } * } * </code></pre> * * * @since 2.0 * @author T.TSUCHIE * */ @Target({ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface CsvConversion { /** * アノテーションに対応したCellProcessorを作成するファクトリクラスを指定します。 * <p>省略した場合、{@link AbstractProcessorBuilder#registerForConversion(Class, ConversionProcessorFactory)}で手動で登録する必要があります。</p> * @return {@link ConversionProcessorFactory}を実装したクラスを指定します。 */ Class<? extends ConversionProcessorFactory<?>>[] value(); }