package com.gh.mygreen.xlsmapper.validation.fieldvalidation;
import java.util.LinkedHashMap;
import java.util.regex.Pattern;
import com.gh.mygreen.xlsmapper.ArgUtils;
/**
* 正規表現を指定し、入力値チェックする。
* <ul>
* <li>メッセージキーは、「cellFieldError.pattern」。</li>
* </ul>
*
* @version 1.5.1
*
*/
public class PatternValidator extends AbstractFieldValidator<String> {
private final Pattern pattern;
private final String patternName;
/**
* 正規表現のパターンを指定するコンストラクタ。
* @param pattern 正規表現のパターン。
*/
public PatternValidator(final String pattern) {
this(Pattern.compile(pattern));
}
/**
* 正規表現のパターンを指定するコンストラクタ。
* @param pattern 正規表現のパターン。
*/
public PatternValidator(final Pattern pattern) {
this(pattern, null);
}
/**
* 正規表現のパターンとその名称を指定するコンストラクタ。
*
* @since 1.5.1
* @param pattern 正規表現のパターン。
* @param patternName エラーメッセージ中で使用するパターンの名称。
*/
public PatternValidator(final String pattern, final String patternName) {
this(Pattern.compile(pattern), patternName);
}
/**
* 正規表現のパターンとその名称を指定するコンストラクタ。
*
* @since 1.5.1
* @param pattern 正規表現のパターン。
* @param patternName エラーメッセージ中で使用するパターンの名称。
*/
public PatternValidator(final Pattern pattern, final String patternName) {
super();
ArgUtils.notNull(pattern, "pattern");
this.pattern = pattern;
this.patternName = patternName;
}
@Override
public String getDefaultMessageKey() {
return "cellFieldError.pattern";
}
@Override
protected boolean validate(final String value) {
if(isNullValue(value)) {
return true;
}
if(pattern.matcher(value).matches()) {
return true;
}
return false;
}
@Override
protected LinkedHashMap<String, Object> getMessageVars(final String value) {
final LinkedHashMap<String, Object> vars = new LinkedHashMap<>();
vars.put("validatedValue", value);
vars.put("pattern", getPattern().pattern());
vars.put("patternName", getPatternName());
return vars;
}
/**
*
* @return pattern を取得する
*/
public Pattern getPattern() {
return pattern;
}
/**
* @since 1.5.1
* @return パターン名を取得する。指定されていない場合はnullを返す。
*/
public String getPatternName() {
return patternName;
}
}