FixedSizeHeaderMapper.java
package com.github.mygreen.supercsv.builder;
import java.util.Optional;
import com.github.mygreen.supercsv.annotation.conversion.CsvFixedSize;
import com.github.mygreen.supercsv.cellprocessor.conversion.PaddingProcessor;
/**
* アノテーション{@link CsvFixedSize}を元に、ヘッダーラベル情報を処理します。
* <p>パディング文字がゼロ埋めのときや、文字数を超えたとき切り出す設定の場合、
* 意図した結果とならない場合があるため、このクラスを参考に各自実装してください。
* </p>
*
* @since 2.1
* @author T.TSUCHIE
*
*/
public class FixedSizeHeaderMapper implements HeaderMapper {
@Override
public String toMap(final ColumnMapping column, final Configuration config, final Class<?>[] groups) {
// @CsvFixedSizeアノテーションを取得する
final Optional<CsvFixedSize> fixedLengthAnno = column.getField().getAnnotationsByGroup(CsvFixedSize.class, groups)
.stream().findFirst();
if(!fixedLengthAnno.isPresent()) {
return column.getLabel();
}
final PaddingProcessor paddingProcessor = (PaddingProcessor)config.getBeanFactory()
.create(fixedLengthAnno.get().paddingProcessor());
// アノテーションが存在する場合は、その情報を使ってパディングする。
String label = fixedLengthAnno.map(anno -> paddingProcessor.pad(column.getLabel(),
anno.size(), anno.padChar(), anno.rightAlign(), anno.chopped()))
.orElse(column.getLabel());
return label;
}
}