All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.mygreen.supercsv.annotation.conversion.CsvFixedSize Maven / Gradle / Ivy

Go to download

CSVのJavaライブラリであるSuperCSVに、アノテーション機能を追加したライブラリです。

There is a newer version: 2.3
Show newest version
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.CsvComposition;
import com.github.mygreen.supercsv.annotation.CsvOverridesAttribute;
import com.github.mygreen.supercsv.annotation.DefaultGroup;
import com.github.mygreen.supercsv.builder.BuildCase;
import com.github.mygreen.supercsv.cellprocessor.conversion.ByteSizePaddingProcessor;
import com.github.mygreen.supercsv.cellprocessor.conversion.CharWidthPaddingProcessor;
import com.github.mygreen.supercsv.cellprocessor.conversion.PaddingProcessor;
import com.github.mygreen.supercsv.cellprocessor.conversion.SimplePaddingProcessor;

/**
 * 固定長のカラムを表現するためのアノテーションです。
 * 

このアノテーションは、次の合成のアノテーションによって、構成されています。

*
    *
  • 書き込み時は、アノテーション{@link CsvMultiPad}によって、パディングします。
  • *
  • 読み込み時は、アノテーション{@link CsvOneSideTrim}によって、トリムします。
  • *
* *

基本的な使い方

* *
    *
  • 属性{@link #size()}で文字のサイズを指定します。
  • *
  • 文字のサイズは、カウント方法の考え型によって変わるため、{@link #paddingProcessor()} で処理方式を指定します。 *
    例えば、{@link CharWidthPaddingProcessor}は、文字の幅(半角文字のサイズ=1、全角文字のサイズ=2)として書き込み時にパディングします。 *
  • *
  • 属性{@link #rightAlign()}によって、右寄せか左寄せか指定します。 *
    trueのとき右寄せ、falseのとき左よせで、デフォルトは左寄せです。 *
  • *
* *

 * {@literal @CsvBean}
 * public class SampleCsv {
 *     
 *     // 右詰めする
 *     {@literal @CsvColumn(number=1)}
 *     {@literal @CsvFixedSize(size=10, rightAlign=true)}
 *     private Integer value;
 *     
 *     // 全角空白で埋める。
 *     // ただし、文字の幅(半角のサイズ=1、全角のサイズ=2)として処理する。
 *     {@literal @CsvColumn(number=2)}
 *     {@literal @CsvFullChar}
 *     {@literal @CsvFixedSize(size=20, padChar=' ', paddingProcessor=CharWidthPaddingProcessor.class)}
 *     private String userName;
 *     
 *     // 他のオブジェクト型への変換を行う
 *     {@literal @CsvColumn(number=3)}
 *     {@literal @CsvFixedSize(size=10, padChar='_')}
 *     {@literal @CsvDateTimeFormat(pattern="uuuu-MM-dd")}
 *     private LocalDate birthday;
 *     
 *     // 指定した文字長を超えた場合、切り落とす。
 *     {@literal @CsvColumn(number=4, label="コメント")}
 *     {@literal @CsvFixedSize(size=20, chopped=true)}
 *     private String comment;
 *     
 *     // getter/setterは省略
 * }
 * 
* * @since 2.1 * @author T.TSUCHIE * */ @Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Repeatable(CsvFixedSize.List.class) @CsvComposition @CsvMultiPad(size=0, cases=BuildCase.Write, order=1000) @CsvOneSideTrim(cases=BuildCase.Read) public @interface CsvFixedSize { /** * カラムのサイズを指定します。 *

値は1以上を指定する必要があります。

*

サイズは考え型によってバイト数、文字幅など異なるため、 * 属性{@link #paddingProcessor()}によって、変更することができます。 *

* * @return カラムのサイズ。 */ @CsvOverridesAttribute(annotation=CsvMultiPad.class, name="size") int size(); /** * パディングする際の文字を指定します。 *
読み込み時には、トリム対象の文字となります。 * * @return パディング文字。 */ @CsvOverridesAttribute(annotation=CsvMultiPad.class, name="padChar") @CsvOverridesAttribute(annotation=CsvOneSideTrim.class, name="trimChar") char padChar() default ' '; /** * パディング時に指定したカラムの長さを超えた場合、切り出すかどうか指定します。 * @return trueの場合、指定したカラムの長さを超えた場合切り出します。 * */ @CsvOverridesAttribute(annotation=CsvMultiPad.class, name="chopped") boolean chopped() default false; /** * パディングの処理方法を指定します。 *

{@link PaddingProcessor}を実装したクラス指定します。 *
標準では次の実装が提供されています。 *

*
    *
  • {@link SimplePaddingProcessor}:文字の種別にかかわらず1文字としてカウントしてパディングします。
  • *
  • {@link CharWidthPaddingProcessor}:文字の幅(半角は1文字、全角は2文字)によってカウントしてパディングします。
  • *
  • {@link ByteSizePaddingProcessor}:バイト数によってカウントしてパディングします。
  • *
* * @return パディング処理の実装クラス。 */ @CsvOverridesAttribute(annotation=CsvMultiPad.class, name="paddingProcessor") Class paddingProcessor() default CharWidthPaddingProcessor.class; /** * 右寄せをするかどうか指定します。 *
読み込み時のトリム時は、逆の意味になるので注意。 *
falseの場合は、左詰めです。 * * @return パディング文字が右側にあるかどうか。 */ @CsvOverridesAttribute(annotation=CsvMultiPad.class, name="rightAlign") @CsvOverridesAttribute(annotation=CsvOneSideTrim.class, name="leftAlign") boolean rightAlign() default false; /** * グループのクラスを指定します。 *

処理ごとに適用するアノテーションを切り替えたい場合に指定します。 * @return 指定しない場合は、{@link DefaultGroup}が適用され全ての処理に適用されます。 */ Class[] groups() default {}; @Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @interface List { CsvFixedSize[] value(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy