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;
import com.gh.mygreen.xlsmapper.XlsMapperConfig;
/**
* シートの書き込み後に、このアノテーションを付与した任意のメソッドが実行されます。
* <p>実装方法として、JavaBeanに直接処理を実装する方法と、リスナークラスを指定して別のクラスで実装する方法の2種類があります。</p>
* <p>戻り値なしのpublicメソッドに付与する必要があります。</p>
* <p>引数は、次の任意の値が指定可能です。定義順は関係ありません。
* <br>引数を取らないことも可能です。
* </p>
* <ul>
* <li>処理対象のシートオブジェクト {@link org.apache.poi.ss.usermodel.Sheet}</li>
* <li>XlsMapperの設定オブジェクト {@link com.gh.mygreen.xlsmapper.XlsMapperConfig}</li>
* <li>シートのエラー情報を格納するオブジェクト {@link com.gh.mygreen.xlsmapper.validation.SheetBindingErrors}</li>
* <li>処理対象のBeanオブジェクト</li>
* </ul>
*
* <h3 class="description">JavaBeanクラスに実装する場合</h3>
*
* <p>シート用クラス、レコード用クラスのどちらにも定義できます。
* <br>実行順は、親であるシートクラスの処理が先に処理されます。
* </p>
*
* <pre class="highlight"><code class="java">
* // シートクラス
* {@literal @XlsSheet(name="Users")}
* public class SampleSheet {
*
* {@literal @XlsHorizontalRecords(tableLabel="ユーザ一覧")}
* private {@literal List<UserRecord>} records;
*
* {@literal @XlsPostSave}
* public void onPostSave(Sheet sheet) {
* // 書き込み後に実行される処理
* // 本ライブラリで提供されていない、数式やセルの補正などを実装します。
* }
* }
*
* // レコードクラス
* public class UserRecord {
*
* {@literal @XlsColumn(columnName="ID")}
* private int id;
*
* {@literal @XlsColumn(columnName="名前")}
* private String name;
*
* {@literal @XlsPostSave}
* public void onPostSave(Sheet sheet, XlsMapperConfig config, SheetBindingErrors errors) {
* // 書き込み後に実行される処理
* }
*
* }
* </code></pre>
*
* <h3 class="description">リスナークラスに実装する場合</h3>
* <p>クラスにアノテーション{@link XlsListener#listenerClass()} で処理が実装されたクラスを指定します。 </p>
* <p>インスタンスは、システム設定{@link XlsMapperConfig#getBeanFactory()}経由で作成されるため、
* SpringFrameworkのコンテナからインスタンスを取得することもできます。
* </p>
*
*
* <pre class="highlight"><code class="java">
* // シートクラス
* {@literal @XlsSheet(name="Users")}
* {@literal @XlsListener(listenerClass=SampleSheetListener.class)}
* public class SampleSheet {
*
* {@literal @XlsHorizontalRecords(tableLabel="ユーザ一覧")}
* private {@literal List<UserRecord>} records;
* }
*
* // SampleSheetクラスのリスナー
* public static class SampleSheetListener {
*
* {@literal @XlsPostSave}
* public void onPostSave(SampleSheet targetObj, Sheet sheet) {
* // 書き込み後に実行される処理
* // 本ライブラリで提供されていない、数式やセルの補正などを実装します。
* }
* }
*
* // レコードクラス
* {@literal @XlsListener(listenerClass=UserRecordListener.class)}
* public class UserRecord {
*
* {@literal @XlsColumn(columnName="ID")}
* private int id;
*
* {@literal @XlsColumn(columnName="名前")}
* private String name;
*
* }
*
* // UserRecordクラスのリスナー
* public static class UserRecordListener {
*
* {@literal @XlsPostSave}
* public void onPostSave(UserRecord targetObj, Sheet sheet, XlsMapperConfig config, SheetBindingErrors errors) {
* // 書き込み後に実行される処理
* }
* }
* </code></pre>
*
*
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface XlsPostSave {
}