XlsArrayOption.java

  1. package com.gh.mygreen.xlsmapper.annotation;

  2. import java.lang.annotation.Documented;
  3. import java.lang.annotation.ElementType;
  4. import java.lang.annotation.Retention;
  5. import java.lang.annotation.RetentionPolicy;
  6. import java.lang.annotation.Target;

  7. import com.gh.mygreen.xlsmapper.AnnotationInvalidException;

  8. /**
  9.  * {@link XlsArrayCells}、{@link XlsLabelledArrayCells}、{@link XlsArrayColumns}の書き込み時の配列・リストの操作を指定するためのアノテーションです。
  10.  *
  11.  * @since 2.0
  12.  * @author T.TSUCHIE
  13.  *
  14.  */
  15. @Target({ElementType.METHOD, ElementType.FIELD})
  16. @Retention(RetentionPolicy.RUNTIME)
  17. @Documented
  18. public @interface XlsArrayOption {

  19.     /**
  20.      * 書き込み時にJavaオブジェクトの配列・リストのサイズに対して、属性size()の値が小さく、足りない場合の操作を指定します。
  21.      *
  22.      * <pre class="highlight"><code class="java">
  23.      * {@literal @XlsSheet(name="Users")}
  24.      * // 書き込むデータ
  25.      * String[] data = String[]{"や", "ま", "だ", " ", "た", "ろ", "う"};
  26.      *
  27.      * // マッピングの定義
  28.      * public class SampleSheet {
  29.      *
  30.      *     // ラベルの右側 + 横方向の隣接するセル
  31.      *     {@literal @XlsLabelledArrayCells(columnName="ふりがな", type=LabelledCellType.Right, size=6)}
  32.      *     {@literal @XlsArrayOption(overOperation=OverOperation.Error)}
  33.      *     private {@literal List<String>} nameRuby;
  34.      *
  35.      * }
  36.      * </code></pre>
  37.      *
  38.      * <div class="picture">
  39.      *    <img src="doc-files/ArrayOption_overOperation.png" alt="">
  40.      *    <p>属性overOperationの概要</p>
  41.      * </div>
  42.      *
  43.      *
  44.      * @return {@link OverOperation#Break}の場合、足りないセルがあるとそこで処理を終了します。
  45.      */
  46.     OverOperation overOpration() default OverOperation.Break;

  47.     /**
  48.      * 書き込み時にJavaオブジェクトの配列・リストのサイズに対して、属性size()の値が大きく、余っている場合の操作を指定します。
  49.      *
  50.      * <pre class="highlight"><code class="java">
  51.      * {@literal @XlsSheet(name="Users")}
  52.      * // 書き込むデータ
  53.      * String[] data = String[]{"あ", "べ", " ", "あ", "い"};
  54.      *
  55.      * // マッピングの定義
  56.      * public class SampleSheet {
  57.      *
  58.      *     // ラベルの右側 + 横方向の隣接するセル
  59.      *     {@literal @XlsLabelledArrayCells(columnName="ふりがな", type=LabelledCellType.Right, size=6)}
  60.      *     {@literal @XlsArrayOption(remainedOperation=RemainedOperation.Clear)}
  61.      *     private {@literal List<String>} nameRuby;
  62.      *
  63.      * }
  64.      * </code></pre>
  65.      *
  66.      * <div class="picture">
  67.      *    <img src="doc-files/ArrayOption_remainedOperation.png" alt="">
  68.      *    <p>属性remainedOperationの概要</p>
  69.      * </div>
  70.      *
  71.      *
  72.      * @return {@link RemainedOperation#None}の場合、余っているセルがあっても何もしません。
  73.      */
  74.     RemainedOperation remainedOperation() default RemainedOperation.None;

  75.     /**
  76.      * アノテーション {@link XlsArrayCells}や{@link XlsLabelledArrayCells}で、
  77.      * 書き込み時に、配列やリストのデータサイズ数に対して、属性size()の値が小さい場合の操作を指定します。
  78.      *
  79.      * @since 2.0
  80.      * @author T.TSUCHIE
  81.      *
  82.      */
  83.     public enum OverOperation {

  84.         /**
  85.          * 隣接するセルへの書き込みを中断します。
  86.          */
  87.         Break,

  88.         /**
  89.          * 書き込み処理の前に、例外 {@link AnnotationInvalidException}をスローします。
  90.          */
  91.         Error
  92.         ;

  93.     }

  94.     /**
  95.      * アノテーション {@link XlsArrayCells}や{@link XlsLabelledArrayCells}で、
  96.      * 書き込み時に、配列やリストのデータサイズ数に対して、属性size()の値が大きい場合の操作を指定します。
  97.      *
  98.      * @since 2.0
  99.      * @author T.TSUCHIE
  100.      *
  101.      */
  102.     public enum RemainedOperation {

  103.         /**
  104.          * 隣接するセルへの書き込み、その後、何もしません。
  105.          */
  106.         None,

  107.         /**
  108.          * 隣接するセルへの書き込み、その後、余っているセルの値をクリアします。
  109.          */
  110.         Clear
  111.         ;

  112.     }

  113. }