XlsRecordOption.java

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;

/**
 * {@link XlsHorizontalRecords}や{@link XlsVerticalRecords}の書き込み時のレコードの操作を指定するためのアノテーションです。
 *
 * @since 2.0
 * @author T.TSUCHIE
 *
 */
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface XlsRecordOption {

    /**
     * 書き込み時にJavaオブジェクトのレコード数に対して、シートのレコード数が足りない場合の操作を指定します。
     * <p>ただし、{@link XlsVerticalRecords}の場合、{@link OverOperation#Insert}は対応していません。</p>
     *
     * <pre class="highlight"><code class="java">
     * {@literal @XlsSheet(name="Users")}
     * // 書き込むデータ
     * {@literal List<UserRecord> data = new ArrayList<>()};
     * data.add(new UserRecord(1, "山田 太郎"));
     * data.add(new UserRecord(2, "山田 花子"));
     * data.add(new UserRecord(3, "鈴木 一郎"));
     *
     * // マッピングの定義
     * public class SampleSheet {
     *
     *     {@literal @XlsHorizontalRecords(tableLabel="ユーザ一覧")}
     *     {@literal @XlsRecordOption(overOperation=OverOperation.Insert)}
     *     private {@literal List<UserRecord>} records;
     *
     * }
     * </code></pre>
     *
     * <div class="picture">
     *    <img src="doc-files/RecordOption_overOperation.png" alt="">
     *    <p>属性overOperationの概要</p>
     * </div>
     *
     * @return {@link OverOperation#Break}の場合、足りないレコードがあるとそこで処理を終了します。
     */
    OverOperation overOperation() default OverOperation.Break;

    /**
     * 書き込み時にJavaオブジェクトのレコード数に対して、シートのレコード数が余っている場合の操作を指定します。
     *
     * <p>ただし、{@link XlsVerticalRecords}の場合、{@link RemainedOperation#Delete}は対応していません。</p>
     *
     * <pre class="highlight"><code class="java">
     * {@literal @XlsSheet(name="Users")}
     * // 書き込むデータ
     * {@literal List<UserRecord> data = new ArrayList<>()};
     * data.add(new UserRecord(1, "山田 太郎"));
     * data.add(new UserRecord(2, "山田 花子"));
     *
     * // マッピングの定義
     * public class SampleSheet {
     *
     *     {@literal @XlsHorizontalRecords(tableLabel="ユーザ一覧")}
     *     {@literal @XlsRecordOption(remainedOperation=RemainedOperation.Clear)}
     *     private {@literal List<UserRecord>} records;
     *
     * }
     * </code></pre>
     *
     * <div class="picture">
     *    <img src="doc-files/RecordOption_remainedOperation.png" alt="">
     *    <p>属性remainedOperationの概要</p>
     * </div>
     *
     * @return {@link RemainedOperation#None}の場合、余っているレコードがあっても何もしません。
     */
    RemainedOperation remainedOperation() default RemainedOperation.None;

    /**
     * アノテーション {@link XlsHorizontalRecords}や{@link XlsVerticalRecords}で、
     * 書き込み時にデータのレコード数に対してシートのレコードが足りない場合の操作を指定します。
     *
     * @since 2.0
     * @author T.TSUCHIE
     *
     */
    public static enum OverOperation {

        /** 前のセルをコピーします */
        Copy,

        /** 次のセルの前に行または列を挿入します */
        Insert,

        /** レコードの書き込みを中断します */
        Break,
        ;

    }

    /**
     * アノテーション {@link XlsHorizontalRecords}や{@link XlsVerticalRecords}で、
     * 書き込み時にデータのレコード数に対してシートのレコードが余っている際の操作を指定します。
     *
     * @since 2.0
     * @author T.TSUCHIE
     *
     */
    public static enum RemainedOperation {

        /** セルの値をクリアします */
        Clear,

        /** 行または列を削除します */
        Delete,

        /** 何もしません */
        None,
        ;

    }
}