package com.github.mygreen.supercsv.annotation.conversion; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Repeatable; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import com.github.mygreen.supercsv.annotation.DefaultGroup; import com.github.mygreen.supercsv.builder.BuildCase; /** * 指定した最大文字長よりも長い場合、先頭から最大文字長分切り取るためのアノテーションです。 * <p>例えば、入力が「あいうえお」の場合、最大文字長を3、接尾語を「...」と指定したとき、「あいう...」という値となります。</p> * * <h3 class="description">基本的な使い方</h3> * * <ul> * <li>属性 {@link #maxSize()}で、最大文字長を指定します。</li> * <li>属性{@link #suffix()}で切り取り後に付与する接尾語を指定します。省略可能です。</li> * </ul> * * <pre class="highlight"><code class="java"> * {@literal @CsvBean} * public class SampleCsv { * * {@literal @CsvColumn(number=1)} * {@literal @CsvTruncate(maxSize=20, suffix="...")} * private String comment; * * * // getter/setterは省略 * } * </code></pre> * * @since 2.0 * @author T.TSUCHIE * */ @Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Repeatable(CsvTruncate.List.class) @CsvConversion(value={}) public @interface CsvTruncate { /** * 最大文字長を指定します。 * <p>1以上の値を指定します。</p> * @return 最大文字長。 */ int maxSize(); /** * 切り取り後に付与する接尾語を指定します。 * * @return 接尾語。 */ String suffix() default ""; /** * 適用するケースを指定します。 * @return 何も指定しない場合は全てのケースに適用されます。 */ BuildCase[] cases() default {}; /** * グループのクラスを指定します。 * <p>処理ごとに適用するアノテーションを切り替えたい場合に指定します。 * @return 指定しない場合は、{@link DefaultGroup}が適用され全ての処理に適用されます。 */ Class<?>[] groups() default {}; /** * アノテーションの処理順序の定義。 * @return 値が大きいほど後に実行されます。 * 値が同じ場合は、アノテーションのクラス名の昇順になります。 */ int order() default 0; /** * アノテーションを複数個指定する際の要素です。 */ @Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @interface List { CsvTruncate[] value(); } }