package com.gh.mygreen.xlsmapper.annotation;
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;
/**
* 列挙型に対する変換規則を指定するアノテーション。
*
* <h3 class="description">基本的な使い方</h3>
*
* <p>セルの値と列挙型の要素の値をマッピングさせます。
* <br>要素の値とは、 {@link Enum#name()} の値です。
* </p>
*
* <ul>
* <li>属性{@link #ignoreCase()}の値をtrueにすると、読み込み時に大文字/小文字の区別なく変換します。
* </ul>
*
* <pre class="highlight"><code class="java">
* public class SampleRecord {
*
* {@literal @XlsColumn(columnName="権限")}
* {@literal @XlsEnumConverter(ignoreCase=true)}
* private RoleType role;
*
* }
*
* // 列挙型の定義
* public enum RoleType {
* Normal, Admin;
* }
* </code></pre>
*
*
* @author T.TSUCHIE
*
*/
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface XlsEnumConverter {
/**
* 読み込み時に大文字/小文字を無視して比較するか指定します。
* @return trueの場合、大文字・小文字の区別は行いません。
*/
boolean ignoreCase() default false;
/**
* 列挙型のをname()メソッド以外から取得し、別名でマッピングするときに指定します。
* <p>例). RoleType.localeName()のlocaleName()メソッドを指定するときには、'localeName'と指定します。</p>
*
* <pre class="highlight"><code class="java">
* public class SampleRecord {
*
* {@literal @XlsColumn(columnName="権限")}
* {@literal @XlsEnumConverter(valueMethodName="localeName")}
* private RoleType role;
*
* }
*
* // 列挙型の定義
* public enum RoleType {
* Normal("一般権限"), Admin("管理者権限");
*
* // 別名の設定
* private String localeName;
*
* private RoleType(String localeName) {
* this.localeName = localeName;
* }
*
* // 別名の取得用メソッド
* public String localeName() {
* return this.localeName;
* }
* }
* </code></pre>
*/
String valueMethodName() default "";
}