LengthMaxValidator.java
package com.gh.mygreen.xlsmapper.validation.fieldvalidation.impl;
import java.util.Map;
import com.gh.mygreen.xlsmapper.util.ArgUtils;
import com.gh.mygreen.xlsmapper.validation.fieldvalidation.AbstractFieldValidator;
import com.gh.mygreen.xlsmapper.validation.fieldvalidation.CellField;
/**
* 文字列が指定した文字長以内かどうか検証します。
* <ul>
* <li>メッセージキーは、「cellFieldError.lengthMax」。</li>
* <li>「validatedValue」:検証対象の値のオブジェクト。</li>
* <li>「length」:実際の値の文字長。</li>
* <li>「max」:指定した最大文字長。</li>
* </ul>
*
* @since 2.0
* @author T.TSUCHIE
*/
public class LengthMaxValidator extends AbstractFieldValidator<String> {
/** 最大文字長 */
private final int max;
/**
* 制約の文字長を指定するコンストラクタ。
*
* @param max 最大文字長
* @throws IllegalArgumentException {@literal max <= 0}
*/
public LengthMaxValidator(final int max) {
ArgUtils.notMin(max, 0, "max");
this.max = max;
}
@Override
public LengthMaxValidator addGroup(final Class<?>... group) {
return (LengthMaxValidator)super.addGroup(group);
}
@Override
public String getMessageKey() {
return "cellFieldError.lengthMax";
}
@Override
protected Map<String, Object> getMessageVariables(final CellField<String> cellField) {
final Map<String, Object> vars = super.getMessageVariables(cellField);
vars.put("length", cellField.getValue().length());
vars.put("max", getMax());
return vars;
}
@Override
protected void onValidate(final CellField<String> cellField) {
final int valueLength = cellField.getValue().length();
if(valueLength <= getMax()) {
return;
}
error(cellField);
}
/**
* 指定した最大文字長を取得します。
* @return 最大文字長
*/
public int getMax() {
return max;
}
}