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>シートの読み込み時に、{@link XlsHorizontalRecords}、{@link XlsVerticalRecords} の処理対象のレコードが、
* 空の場合に読み飛ばしたい時に利用します。
* </p>
* <p>このアノテーションを付与するメソッドは、引数なしで、戻り値がbooleanである必要があります。</p>
* <p>{@link com.gh.mygreen.xlsmapper.IsEmptyBuilder}を利用して簡単に判定することもできます。</p>
*
*
* <pre class="highlight"><code class="java">
* // シート用クラス
* {@literal @XlsSheet(name="Users")}
* public class SampleSheet {
*
* // レコードの読み飛ばしを有効にします。
* {@literal @XlsHorizontalRecords(tableLabel="ユーザ一覧"), terminal=RecordTerminal.Border, ignoreEmptyRecord=true)}
* private {@literal List<UserRecord>} records;
*
* }
*
* // レコード用クラス
* public class UserRecord {
*
* {@literal @XlsColumn(columnName="ID")}
* private int id;
*
* {@literal @XlsColumn(columnName="名前")}
* private String name;
*
* {@literal @XlsColumn(columnName="住所")}
* private String address;
*
* // レコードが空と判定するためのメソッド
* // 列「ID」は空の判定には含まない。
* {@literal @XlsIsEmpty}
* public boolean isEmpty() {
* if(name != null || !name.isEmpty()) {
* return false;
* }
*
* if(address != null || !address.isEmpty()) {
* return false;
* }
* }
* }
* </code></pre>
*
* <h3 class="description">{@link com.gh.mygreen.xlsmapper.IsEmptyBuilder}を使った記述の簡単化</h3>
*
* アノテーション{@link XlsIsEmpty}を付与したメソッドの実装において、{@link com.gh.mygreen.xlsmapper.IsEmptyBuilder}を使用すると、
* より簡潔に記述することができます。
*
* * <pre class="highlight"><code class="java">
* // レコード用クラス
* public class UserRecord {
*
* {@literal @XlsColumn(columnName="ID")}
* private int id;
*
* {@literal @XlsColumn(columnName="名前")}
* private String name;
*
* {@literal @XlsColumn(columnName="住所")}
* private String address;
*
* // レコードが空と判定するためのメソッド
* {@literal @XlsIsEmpty}
* public boolean isEmpty() {
* // 列「ID」は空の判定には含まないよう除外する。
* return IsEmptyBuilder.reflectionIsEmpty(this, "id");
* }
* }
* </code></pre>
*
*
* @since 0.2
* @author T.TSUCHIE
*
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface XlsIsEmpty {
}