MultiPad.java
package com.github.mygreen.supercsv.cellprocessor.conversion;
import org.supercsv.cellprocessor.CellProcessorAdaptor;
import org.supercsv.cellprocessor.ift.CellProcessor;
import org.supercsv.cellprocessor.ift.StringCellProcessor;
import org.supercsv.util.CsvContext;
/**
* 固定長にそろえる{@link CellProcessor}。
*
* @since 2.1
* @author T.TSUCHIE
*
*/
public class MultiPad extends CellProcessorAdaptor implements StringCellProcessor {
/**
* パディングのサイズ
*/
private final int size;
/**
* パディング文字
*/
private final char padChar;
/**
* 右詰めかどうか。
*/
private final boolean rightAlign;
/**
* 固定長を超える場合に切り出しをするかどうか。
*/
private final boolean chopped;
/**
* パディング処理の実装
*/
private final PaddingProcessor paddingProcessor;
/**
* コンストラクタ
*
* @param size パディングのサイズ
* @param padChar パディングする文字。
* @param rightAlign 右詰めするかどうか。
* @param chopped 処理対象の文字が固定長を超えている場合に、切り出すかどうか。
* @param paddingProcessor パディング処理の実装
* @throws IllegalArgumentException {@literal length <= 0.}
*/
public MultiPad(final int size, final char padChar, final boolean rightAlign, final boolean chopped,
final PaddingProcessor paddingProcessor) {
super();
checkPreconditions(size, paddingProcessor);
this.size = size;
this.padChar = padChar;
this.rightAlign = rightAlign;
this.chopped = chopped;
this.paddingProcessor = paddingProcessor;
}
/**
* コンストラクタ
*
* @param size パディングのサイズ
* @param padChar パディングする文字。
* @param rightAlign 右詰めするかどうか。
* @param chopped 処理対象の文字が固定長を超えている場合に、切り出すかどうか。
* @param paddingProcessor パディング処理の実装
* @param next チェインの中で呼ばれる次の{@link CellProcessor}.
* @throws IllegalArgumentException {@literal length <= 0.}
*/
public MultiPad(final int size, final char padChar, final boolean rightAlign, final boolean chopped,
final PaddingProcessor paddingProcessor, final StringCellProcessor next) {
super(next);
checkPreconditions(size, paddingProcessor);
this.size = size;
this.padChar = padChar;
this.rightAlign = rightAlign;
this.chopped = chopped;
this.paddingProcessor = paddingProcessor;
}
private static void checkPreconditions(final int size, final PaddingProcessor paddingProcessor) {
if(size <= 0) {
throw new IllegalArgumentException(String.format("size should be > 0, but was %d.", size));
}
if(paddingProcessor == null) {
throw new IllegalArgumentException("paddingProcessor should not be null.");
}
}
/**
* {@inheritDoc}
*/
@Override
public <T> T execute(final Object value, final CsvContext context) {
final String result = paddingProcessor.pad(value == null ? "" : (String) value,
size, padChar, rightAlign, chopped);
return next.execute(result, context);
}
/**
* パディングのサイズを取得する。
* @return パディングのサイズ
*/
public int getSize() {
return size;
}
/**
* パディング文字を取得する。
* @return パディング文字
*/
public char getPadChar() {
return padChar;
}
/**
* 右詰めかどうかを取得する。
* @return 右詰めかどうか。
*/
public boolean isRightAlign() {
return rightAlign;
}
/**
* 固定長を超える場合に切り出しをするかどうか取得する。
* @return 固定長を超える場合に切り出しをするかどうか。
*/
public boolean isChopped() {
return chopped;
}
/**
* パディング処理の実装を取得する。
* @return パディング処理の実装
*/
public PaddingProcessor getPaddingProcessor() {
return paddingProcessor;
}
}