package com.gh.mygreen.xlsmapper.validation;
import java.awt.Point;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Stack;
import com.gh.mygreen.xlsmapper.Utils;
/**
* シートのエラー情報を処理するためのクラス。
*
* @version 0.5
* @author T.TSUCHIE
*
*/
public class SheetBindingErrors {
/** パスの区切り文字 */
public static final String PATH_SEPARATOR = ".";
/** シート名 */
private String sheetName;
/** オブジェクト名 */
private final String objectName;
/** 現在のパス。キャッシュ用。 */
private String currentPath;
/** 検証対象のオブジェクトの現在のパス */
private Stack<String> nestedPathStack = new Stack<String>();
/** エラーオブジェクト */
private final List<ObjectError> errors = new ArrayList<ObjectError>();
/** エラーコードの候補を生成するクラス */
private MessageCodeGenerator messageCodeGenerator = new MessageCodeGenerator();
public String getObjectName() {
return objectName;
}
/**
* オブジェクト名を指定しするコンストラクタ。
* <p>エラーメッセージを組み立てる際に、パスのルートとなる。
* @param objectName オブジェクト名
*/
public SheetBindingErrors(final String objectName) {
this.objectName = objectName;
}
/**
* クラス名をオブジェクト名とするコンストラクタ。
* @param clazz クラス名
*/
public SheetBindingErrors(final Class<?> clazz) {
this(clazz.getCanonicalName());
}
/**
* 指定したパスで現在のパスを初期化します。
* <p>nullまたは空文字を与えると、トップに移動します。
* @param nestedPath
*/
public void setNestedPath(final String nestedPath) {
final String canonicalPath = getCanonicalPath(nestedPath);
this.nestedPathStack.clear();
if(canonicalPath.isEmpty()) {
this.currentPath = buildPath();
} else {
pushNestedPath(canonicalPath);
}
}
/**
* パスのルートに移動します。
*/
public void setRootPath() {
setNestedPath(null);
}
/**
* パスを標準化する。
* <ol>
* <li>トリムする。
* <li>値がnullの場合は、空文字を返す。
* <li>最後に'.'がついている場合、除去する。
* @param subPath
* @return
*/
private String getCanonicalPath(final String subPath) {
if(subPath == null) {
return "";
}
String value = subPath.trim();
if(value.isEmpty()) {
return value;
}
if(value.startsWith(PATH_SEPARATOR)) {
value = value.substring(1);
}
if(value.endsWith(PATH_SEPARATOR)) {
value = value.substring(0, value.length()-1);
}
return value;
}
/**
* パスを1つ下位に移動します。
* @param subPath
* @throws IllegalArgumentException subPath is empty.
*/
public void pushNestedPath(final String subPath) {
final String canonicalPath = getCanonicalPath(subPath);
if(canonicalPath.isEmpty()) {
throw new IllegalArgumentException(String.format("subPath is invalid path : '%s'", subPath));
}
this.nestedPathStack.push(canonicalPath);
this.currentPath = buildPath();
}
/**
* インデックス付きのパスを1つ下位に移動します。
* @param subPath
* @param index
* @throws IllegalArgumentException subPath is empty.
*/
public void pushNestedPath(final String subPath, final int index) {
pushNestedPath(String.format("%s[%d]", subPath, index));
}
/**
* キー付きのパスを1つ下位に移動します。
* @param subPath
* @param key
* @throws IllegalArgumentException subPath is empty.
*/
public void pushNestedPath(final String subPath, final String key) {
pushNestedPath(String.format("%s[%s]", subPath, key));
}
/**
* パスを1つ上位に移動します。
* @return
* @throws IllegalStateException path stask is empty.
*/
public String popNestedPath() {
if(nestedPathStack.isEmpty()) {
throw new IllegalStateException("Cannot pop nested path: no nested path on stack");
}
final String subPath = nestedPathStack.pop();
this.currentPath = buildPath();
return subPath;
}
/**
* パスを組み立てる。
* <p>ルートの時は空文字を返します。
* @return
*/
private String buildPath() {
return Utils.join(nestedPathStack, PATH_SEPARATOR);
}
/**
* 現在のパスを取得します。
* <p>ルートの時は空文字を返します。
* @return
*/
public String getCurrentPath() {
return currentPath;
}
/**
* 現在のパスに引数で指定したフィールド名を追加した値を返す。
* @param fieldName
* @return
*/
public String buildFieldPath(final String fieldName) {
if(Utils.isEmpty(getCurrentPath())) {
return fieldName;
} else {
return Utils.join(new String[]{getCurrentPath(), fieldName}, PATH_SEPARATOR);
}
}
/**
* 全てのエラーをリセットする。
* @since 0.5
*/
public void clearAllErrors() {
this.errors.clear();
}
/**
* エラーを追加する
* @param error
*/
public void addError(final ObjectError error) {
this.errors.add(error);
}
/**
* エラーを全て追加する。
* @param errors
*/
public void addAllErrors(final Collection<ObjectError> errors) {
this.errors.addAll(errors);
}
/**
* 全てのエラーを取得する
* @return
*/
public List<ObjectError> getAllErrors() {
return new ArrayList<ObjectError>(errors);
}
/**
* エラーがあるか確かめる。
* @return true:エラーがある。
*/
public boolean hasErrors() {
return !getAllErrors().isEmpty();
}
/**
* グローバルエラーを取得する
* @return エラーがない場合は空のリストを返す
*/
public List<ObjectError> getGlobalErrors() {
final List<ObjectError> list = new ArrayList<ObjectError>();
for(ObjectError item : this.errors) {
if(!(item instanceof FieldError)) {
list.add(item);
}
}
return list;
}
/**
* 先頭のグローバルエラーを取得する。
* @return 存在しない場合は、nullを返す。
*/
public ObjectError getFirstGlobalError() {
for(ObjectError item : this.errors) {
if(!(item instanceof FieldError)) {
return item;
}
}
return null;
}
/**
* グローバルエラーがあるか確かめる。
* @return
*/
public boolean hasGlobalErrors() {
return !getGlobalErrors().isEmpty();
}
/**
* グローバルエラーの件数を取得する
* @return
*/
public int getGlobalErrorCount() {
return getGlobalErrors().size();
}
/**
* グローバルエラーを取得する
* @return エラーがない場合は空のリストを返す
*/
public List<SheetObjectError> getSheetGlobalErrors() {
final List<SheetObjectError> list = new ArrayList<SheetObjectError>();
for(ObjectError item : this.errors) {
if(item instanceof SheetObjectError) {
list.add((SheetObjectError) item);
}
}
return list;
}
/**
* 先頭のグローバルエラーを取得する。
* @return 存在しない場合は、nullを返す。
*/
public SheetObjectError getFirstSheetGlobalError() {
for(SheetObjectError item : getSheetGlobalErrors()) {
return (SheetObjectError)item;
}
return null;
}
/**
* シートに関するグローバルエラーがあるか確かめる。
* @return true:シートに関するグローバルエラー。
*/
public boolean hasSheetGlobalErrors() {
return !getSheetGlobalErrors().isEmpty();
}
/**
* シートに関するグローバルエラーの件数を取得する。
* @return
*/
public int getSheetGlobalErrorCount() {
return getSheetGlobalErrors().size();
}
/**
* フィールドエラーを取得する
* @return エラーがない場合は空のリストを返す
*/
public List<FieldError> getFieldErrors() {
final List<FieldError> list = new ArrayList<FieldError>();
for(ObjectError item : this.errors) {
if(item instanceof FieldError) {
list.add((FieldError) item);
}
}
return list;
}
/**
* 先頭のフィールドエラーを取得する
* @return エラーがない場合は空のリストを返す
*/
public FieldError getFirstFieldError() {
for(ObjectError item : this.errors) {
if(item instanceof FieldError) {
return (FieldError) item;
}
}
return null;
}
/**
* フィールドエラーが存在するか確かめる。
* @return true:フィールドエラーを持つ。
*/
public boolean hasFieldErrors() {
return !getFieldErrors().isEmpty();
}
/**
* フィールドエラーの件数を取得する。
* @return
*/
public int getFieldErrorCount() {
return getFieldErrors().size();
}
/**
* パスを指定してフィールドエラーを取得する
* @param path 最後に'*'を付けるとワイルドカードが指定可能。
* @return
*/
public List<FieldError> getFieldErrors(final String path) {
final String fullPath = buildFieldPath(path);
final List<FieldError> list = new ArrayList<FieldError>();
for(ObjectError item : this.errors) {
if(item instanceof FieldError && isMatchingFieldError(fullPath, (FieldError) item)) {
list.add((FieldError) item);
}
}
return list;
}
/**
* パスを指定して先頭のフィールドエラーを取得する
* @param path 最後に'*'を付けるとワイルドカードが指定可能。
* @return エラーがない場合は空のリストを返す
*/
public FieldError getFirstFieldError(final String path) {
final String fullPath = buildFieldPath(path);
for(ObjectError item : this.errors) {
if(item instanceof FieldError && isMatchingFieldError(fullPath, (FieldError) item)) {
return (FieldError) item;
}
}
return null;
}
/**
* 指定したパスのフィィールドエラーが存在するか確かめる。
* @param path 最後に'*'を付けるとワイルドカードが指定可能。
* @return true:エラーがある場合。
*/
public boolean hasFieldErrors(final String path) {
return !getFieldErrors(path).isEmpty();
}
/**
* 指定したパスのフィィールドエラーの件数を取得する。
* @param path 最後に'*'を付けるとワイルドカードが指定可能。
* @return
*/
public int getFieldErrorCount(final String path) {
return getFieldErrors(path).size();
}
/**
* セルのフィールドエラーを取得する
* @return エラーがない場合は空のリストを返す
*/
public List<CellFieldError> getCellFieldErrors() {
final List<CellFieldError> list = new ArrayList<CellFieldError>();
for(ObjectError item : this.errors) {
if(item instanceof CellFieldError) {
list.add((CellFieldError) item);
}
}
return list;
}
/**
* 先頭のセルフィールドエラーを取得する
* @return エラーがない場合は空のリストを返す
*/
public CellFieldError getCellFirstFieldError() {
for(ObjectError item : this.errors) {
if(item instanceof CellFieldError) {
return (CellFieldError) item;
}
}
return null;
}
/**
* セルフィールドエラーが存在するか確かめる。
* @return true:フィールドエラーを持つ。
*/
public boolean hasCellFieldErrors() {
return !getCellFieldErrors().isEmpty();
}
/**
* セルフィールドエラーの件数を取得する。
* @return
*/
public int getCellFieldErrorCount() {
return getCellFieldErrors().size();
}
/**
* パスを指定してセルフィールドエラーを取得する
* @param path 最後に'*'を付けるとワイルドカードが指定可能。
* @return
*/
public List<CellFieldError> getCellFieldErrors(final String path) {
final String fullPath = buildFieldPath(path);
final List<CellFieldError> list = new ArrayList<CellFieldError>();
for(ObjectError item : this.errors) {
if(item instanceof CellFieldError && isMatchingFieldError(fullPath, (CellFieldError) item)) {
list.add((CellFieldError) item);
}
}
return list;
}
/**
* パスを指定して先頭のセルフィールドエラーを取得する
* @param path 最後に'*'を付けるとワイルドカードが指定可能。
* @return エラーがない場合はnullを返す。
*/
public CellFieldError getFirstCellFieldError(final String path) {
final String fullPath = buildFieldPath(path);
for(ObjectError item : this.errors) {
if(item instanceof CellFieldError && isMatchingFieldError(fullPath, (CellFieldError) item)) {
return (CellFieldError) item;
}
}
return null;
}
/**
* 先頭のセルフィールドエラーを取得する
* @return エラーがない場合はnullを返す。
*/
public CellFieldError getFirstCellFieldError() {
for(ObjectError item : this.errors) {
if(item instanceof CellFieldError) {
return (CellFieldError) item;
}
}
return null;
}
/**
* 指定したパスのセルフィィールドエラーが存在するか確かめる。
* @param path 最後に'*'を付けるとワイルドカードが指定可能。
* @return true:エラーがある場合。
*/
public boolean hasCellFieldErrors(final String path) {
return !getCellFieldErrors(path).isEmpty();
}
/**
* 指定したパスのセルフィィールドエラーの件数を取得する。
* @param path 最後に'*'を付けるとワイルドカードが指定可能。
* @return
*/
public int getCellFieldErrorCount(final String path) {
return getCellFieldErrors(path).size();
}
/**
* 指定したパスがフィールドエラーのパスと一致するかチェックするかどうか。
* @param path
* @param fieldError
* @return true: 一致する場合。
*/
protected boolean isMatchingFieldError(final String path, final FieldError fieldError) {
if (fieldError.getFieldPath().equals(path)) {
return true;
}
if(path.endsWith("*")) {
String subPath = path.substring(0, path.length()-1);
return fieldError.getFieldPath().startsWith(subPath);
}
return false;
}
/**
* 現在のシート名を取得する。
* @return
*/
public String getSheetName() {
return sheetName;
}
/**
* 現在のシート名を設定します。
* @param sheetName
* @return
*/
public SheetBindingErrors setSheetName(final String sheetName) {
this.sheetName = sheetName;
return this;
}
/**
* エラーコードを指定してグローバルエラーを登録します。
* @param errorCode エラーコード
*/
public void reject(final String errorCode) {
addError(new ObjectError(
getObjectName(),
getMessageCodeGenerator().generateCodes(errorCode, getObjectName(), null, null), new Object[]{}));
}
/**
* エラーコードとデフォルトメッセージを指定してグローバルエラーを登録します。
* @param errorCode エラーコード
* @param defaultMessage デフォルトメッセージ。指定したエラーコードに対するメッセージが見つからないときに使用する値です。
*/
public void reject(final String errorCode, final String defaultMessage) {
addError(new ObjectError(
getObjectName(),
getMessageCodeGenerator().generateCodes(errorCode, getObjectName(), null, null), new Object[]{})
.setDefaultMessage(defaultMessage));
}
/**
* エラーコードとメッセージ引数の値を指定してグローバルエラーを登録します。
* <p>メッセージ中の変数はインデックス形式で指定する必要がります。
* @param errorCode エラーコード
* @param errorArgs メッセージ引数。
*/
public void reject(final String errorCode, final Object[] errorArgs) {
addError(new ObjectError(
getObjectName(),
getMessageCodeGenerator().generateCodes(errorCode, getObjectName(), null, null), errorArgs));
}
/**
* エラーコードとメッセージ引数の値を指定してグローバルエラーを登録します。
* @param errorCode エラーコード
* @param errorArgs メッセージ引数。
* @param defaultMessage デフォルトメッセージ。指定したエラーコードに対するメッセージが見つからないときに使用する値です。
*/
public void reject(final String errorCode, final Object[] errorArgs, final String defaultMessage) {
addError(new ObjectError(
getObjectName(),
getMessageCodeGenerator().generateCodes(errorCode, getObjectName(), null, null), errorArgs)
.setDefaultMessage(defaultMessage));
}
/**
* エラーコードとメッセージ変数の値を指定してグローバルエラーを登録します。
* @param errorCode エラーコード
* @param errorVars メッセージ変数。
*/
public void reject(final String errorCode, final Map<String, Object> errorVars) {
addError(new ObjectError(
getObjectName(),
generateMessageCodes(errorCode), errorVars));
}
/**
* エラーコードとメッセージ変数の値を指定してグローバルエラーを登録します。
* @param errorCode エラーコード
* @param errorVars メッセージ変数。
* @param defaultMessage デフォルトメッセージ。指定したエラーコードに対するメッセージが見つからないときに使用する値です。
*/
public void reject(final String errorCode, final Map<String, Object> errorVars, final String defaultMessage) {
addError(new ObjectError(
getObjectName(),
generateMessageCodes(errorCode), errorVars)
.setDefaultMessage(defaultMessage));
}
/**
* エラーコードを指定してシートのグローバルエラーを登録します。
* @param errorCode エラーコード。
*/
public void rejectSheet(final String errorCode) {
addError(new SheetObjectError(
getObjectName(),
getMessageCodeGenerator().generateCodes(errorCode, getObjectName(), null, null), new Object[]{},
getSheetName()));
}
/**
* エラーコードとデフォルトメッセージを指定してシートのグローバルエラーを登録します。
* @param errorCode エラーコード。
* @param defaultMessage デフォルトメッセージ。指定したエラーコードに対するメッセージが見つからないときに使用する値です。
*/
public void rejectSheet(final String errorCode, final String defaultMessage) {
addError(new SheetObjectError(
getObjectName(),
getMessageCodeGenerator().generateCodes(errorCode, getObjectName(), null, null), new Object[]{},
getSheetName())
.setDefaultMessage(defaultMessage));
}
/**
* エラーコードとメッセージ引数を指定してシートのグローバルエラーを登録します。
* <p>メッセージ中の変数はインデックス形式で指定する必要がります。
* @param errorCode エラーコード
* @param errorArgs メッセージ引数
*/
public void rejectSheet(final String errorCode, final Object[] errorArgs) {
addError(new SheetObjectError(
getObjectName(),
getMessageCodeGenerator().generateCodes(errorCode, getObjectName(), null, null), errorArgs,
getSheetName()));
}
/**
* エラーコードとメッセージ引数を指定してシートのグローバルエラーを登録します。
* <p>メッセージ中の変数はインデックス形式で指定する必要がります。
* @param errorCode エラーコード
* @param errorArgs メッセージ引数
* @param defaultMessage デフォルトメッセージ。指定したエラーコードに対するメッセージが見つからないときに使用する値です。
*/
public void rejectSheet(final String errorCode, final Object[] errorArgs, final String defaultMessage) {
addError(new SheetObjectError(
getObjectName(),
getMessageCodeGenerator().generateCodes(errorCode, getObjectName(), null, null), errorArgs,
getSheetName())
.setDefaultMessage(defaultMessage));
}
/**
* エラーコードとメッセージ変数を指定してシートのグローバルエラーを登録します。
* @param errorCode エラーコード
* @param errorVars メッセージ変数
*/
public void rejectSheet(final String errorCode, final Map<String, Object> errorVars) {
addError(new SheetObjectError(
getObjectName(),
generateMessageCodes(errorCode), errorVars,
getSheetName()));
}
/**
* エラーコードとメッセージ変数を指定してシートのグローバルエラーを登録します。
* @param errorCode エラーコード
* @param errorVars メッセージ変数
* @param defaultMessage デフォルトメッセージ。指定したエラーコードに対するメッセージが見つからないときに使用する値です。
*/
public void rejectSheet(final String errorCode, final Map<String, Object> errorVars, final String defaultMessage) {
addError(new SheetObjectError(
getObjectName(),
generateMessageCodes(errorCode), errorVars,
getSheetName())
.setDefaultMessage(defaultMessage));
}
/**
* エラーコードを指定してフィールドエラーを登録します。
* @param field フィールドパス。
* @param errorCode エラーコード。
*/
public void rejectValue(final String field, final String errorCode) {
addError(FieldErrorBuilder.create()
.objectName(getObjectName()).fieldPath(buildFieldPath(field))
.codes(generateMessageCodes(errorCode, buildFieldPath(field)))
.build());
}
/**
* エラーコードを指定してフィールドエラーを登録します。
* @param field フィールドパス。
* @param errorCode エラーコード。
* @param defaultMessage デフォルトメッセージ。指定したエラーコードに対するメッセージが見つからないときに使用する値です。
*/
public void rejectValue(final String field, final String errorCode, final String defaultMessage) {
addError(FieldErrorBuilder.create()
.objectName(getObjectName()).fieldPath(buildFieldPath(field))
.codes(generateMessageCodes(errorCode, buildFieldPath(field)))
.defaultMessage(defaultMessage)
.build());
}
/**
* エラーコードとメッセージ引数を指定してフィールドエラーを登録します。
* <p>メッセージ中の変数はインデックス形式で指定する必要がります。
* @param field フィールドパス。
* @param errorCode エラーコード。
* @param errorArgs メッセージ引数。
*/
public void rejectValue(final String field, final String errorCode, final Object[] errorArgs) {
addError(FieldErrorBuilder.create()
.objectName(getObjectName()).fieldPath(buildFieldPath(field))
.codes(generateMessageCodes(errorCode, buildFieldPath(field)), errorArgs)
.build());
}
/**
* エラーコードとメッセージ引数を指定してフィールドエラーを登録します。
* <p>メッセージ中の変数はインデックス形式で指定する必要がります。
* @param field フィールドパス。
* @param errorCode エラーコード。
* @param errorArgs メッセージ引数。
* @param defaultMessage デフォルトメッセージ。指定したエラーコードに対するメッセージが見つからないときに使用する値です。
*/
public void rejectValue(final String field, final String errorCode, final Object[] errorArgs, final String defaultMessage) {
addError(FieldErrorBuilder.create()
.objectName(getObjectName()).fieldPath(buildFieldPath(field))
.codes(generateMessageCodes(errorCode, buildFieldPath(field)), errorArgs)
.defaultMessage(defaultMessage)
.build());
}
/**
* エラーコードとメッセージ引数を指定してフィールドエラーを登録します。
* @param field フィールドパス。
* @param errorCode エラーコード。
* @param errorVars メッセージ変数。
*/
public void rejectValue(final String field, final String errorCode, final Map<String, Object> errorVars) {
addError(FieldErrorBuilder.create()
.objectName(getObjectName()).fieldPath(buildFieldPath(field))
.codes(generateMessageCodes(errorCode, buildFieldPath(field)), errorVars)
.build());
}
/**
* エラーコードとメッセージ引数を指定してフィールドエラーを登録します。
* @param field フィールドパス。
* @param errorCode エラーコード。
* @param errorVars メッセージ変数。
* @param defaultMessage デフォルトメッセージ。指定したエラーコードに対するメッセージが見つからないときに使用する値です。
*/
public void rejectValue(final String field, final String errorCode, final Map<String, Object> errorVars, final String defaultMessage) {
addError(FieldErrorBuilder.create()
.objectName(getObjectName()).fieldPath(buildFieldPath(field))
.codes(generateMessageCodes(errorCode, buildFieldPath(field)), errorVars)
.defaultMessage(defaultMessage)
.build());
}
/**
* エラーコードを指定してシートのフィールドエラーを登録します。
* @param field フィールドパス。
* @param cellAddress セルのアドレス。x座標が列番号です。y座標が行番号です。列番号、行番号は0から始まります。
* @param errorCode メッセージコード。
*/
public void rejectSheetValue(final String field, final Point cellAddress, final String errorCode) {
addError(FieldErrorBuilder.create()
.objectName(getObjectName()).fieldPath(buildFieldPath(field))
.codes(generateMessageCodes(errorCode, buildFieldPath(field)))
.sheetName(getSheetName()).cellAddress(cellAddress)
.build());
}
/**
* エラーコードとメッセージ引数を指定してフィールドエラーを登録します。
* @param field フィールドパス。
* @param fieldValue フィールドの値。
* @param fieldType フィールドのクラスタイプ。
* @param errorCode エラーコード。
* @param errorVars メッセージ変数。
*/
public void rejectValue(final String field, final Object fieldValue, final Class<?> fieldType,
final String errorCode, final Map<String, Object> errorVars) {
addError(FieldErrorBuilder.create()
.objectName(getObjectName()).fieldPath(buildFieldPath(field))
.fieldValue(fieldValue).fieldType(fieldType)
.codes(generateMessageCodes(errorCode, buildFieldPath(field), fieldType), errorVars)
.build());
}
/**
* エラーコードを指定してシートのフィールドエラーを登録します。
* @param field フィールドパス。
* @param fieldValue フィールドの値。
* @param fieldType フィールドのクラスタイプ。
* @param cellAddress セルのアドレス。x座標が列番号です。y座標が行番号です。列番号、行番号は0から始まります。
* @param errorCode メッセージコード。
*/
public void rejectSheetValue(final String field, final Object fieldValue, final Class<?> fieldType,
final Point cellAddress, final String errorCode) {
addError(FieldErrorBuilder.create()
.objectName(getObjectName()).fieldPath(buildFieldPath(field))
.fieldValue(fieldValue).fieldType(fieldType)
.codes(generateMessageCodes(errorCode, buildFieldPath(field), fieldType))
.sheetName(getSheetName()).cellAddress(cellAddress)
.build());
}
/**
* エラーコードを指定してシートのフィールドエラーを登録します。
* @param field フィールドパス。
* @param fieldValue フィールドの値。
* @param fieldType フィールドのクラスタイプ。
* @param cellAddress セルのアドレス。x座標が列番号です。y座標が行番号です。列番号、行番号は0から始まります。
* @param errorCode メッセージコード。
* @param defaultMessage デフォルトメッセージ。指定したエラーコードに対するメッセージが見つからないときに使用する値です。
*/
public void rejectSheetValue(final String field, final Object fieldValue, final Class<?> fieldType,
final Point cellAddress, final String errorCode, final String defaultMessage) {
addError(FieldErrorBuilder.create()
.objectName(getObjectName()).fieldPath(buildFieldPath(field))
.fieldValue(fieldValue).fieldType(fieldType)
.codes(generateMessageCodes(errorCode, buildFieldPath(field), fieldType))
.sheetName(getSheetName()).cellAddress(cellAddress)
.defaultMessage(defaultMessage)
.build());
}
/**
* エラーコードとデフォルトメッセージを指定してシートのフィールドエラーを登録します。
* @param field フィールドパス。
* @param cellAddress セルのアドレス。x座標が列番号です。y座標が行番号です。列番号、行番号は0から始まります。
* @param errorCode メッセージコード。
* @param defaultMessage デフォルトメッセージ。指定したエラーコードに対するメッセージが見つからないときに使用する値です。
*/
public void rejectSheetValue(final String field, final Point cellAddress, final String errorCode, final String defaultMessage) {
addError(FieldErrorBuilder.create()
.objectName(getObjectName()).fieldPath(buildFieldPath(field))
.codes(generateMessageCodes(errorCode, buildFieldPath(field)))
.sheetName(getSheetName()).cellAddress(cellAddress)
.defaultMessage(defaultMessage)
.build());
}
/**
* エラーコードとメッセージ引数を指定してシートのフィールドエラーを登録します。
* <p>メッセージ中の変数はインデックス形式で指定する必要がります。
* @param field フィールドパス。
* @param cellAddress セルのアドレス。x座標が列番号です。y座標が行番号です。列番号、行番号は0から始まります。
* @param errorCode メッセージコード。
* @param errorArgs メッセージ変数。
*/
public void rejectSheetValue(final String field, final Point cellAddress, final String errorCode, final Object[] errorArgs) {
addError(FieldErrorBuilder.create()
.objectName(getObjectName()).fieldPath(buildFieldPath(field))
.codes(generateMessageCodes(errorCode, buildFieldPath(field)), errorArgs)
.sheetName(getSheetName()).cellAddress(cellAddress)
.build());
}
/**
* エラーコードとメッセージ引数を指定してシートのフィールドエラーを登録します。
* <p>メッセージ中の変数はインデックス形式で指定する必要がります。
* @param field フィールドパス。
* @param cellAddress セルのアドレス。x座標が列番号です。y座標が行番号です。列番号、行番号は0から始まります。
* @param errorCode メッセージコード。
* @param errorArgs メッセージ変数。
* @param defaultMessage デフォルトメッセージ。指定したエラーコードに対するメッセージが見つからないときに使用する値です。
*/
public void rejectSheetValue(final String field, final Point cellAddress, final String errorCode, final Object[] errorArgs, final String defaultMessage) {
addError(FieldErrorBuilder.create()
.objectName(getObjectName()).fieldPath(buildFieldPath(field))
.codes(generateMessageCodes(errorCode, buildFieldPath(field)), errorArgs)
.sheetName(getSheetName()).cellAddress(cellAddress)
.defaultMessage(defaultMessage)
.build());
}
/**
* エラーコードとデメッセージ変数を指定してシートのフィールドエラーを登録します。
* @param field フィールドパス。
* @param cellAddress セルのアドレス。x座標が列番号です。y座標が行番号です。列番号、行番号は0から始まります。
* @param errorCode メッセージコード。
* @param errorVars メッセージ変数。
*/
public void rejectSheetValue(final String field, final Point cellAddress, final String errorCode, final Map<String, Object> errorVars) {
addError(FieldErrorBuilder.create()
.objectName(getObjectName()).fieldPath(buildFieldPath(field))
.codes(generateMessageCodes(errorCode, buildFieldPath(field)), errorVars)
.sheetName(getSheetName()).cellAddress(cellAddress)
.build());
}
/**
* エラーコードとメッセージ変数を指定してシートのフィールドエラーを登録します。
* @param field フィールドパス。
* @param cellAddress セルのアドレス。x座標が列番号です。y座標が行番号です。列番号、行番号は0から始まります。
* @param errorCode メッセージコード。
* @param errorVars メッセージ変数。
* @param defaultMessage デフォルトメッセージ。指定したエラーコードに対するメッセージが見つからないときに使用する値です。
*/
public void rejectSheetValue(final String field, final Point cellAddress, final String errorCode, final Map<String, Object> errorVars, final String defaultMessage) {
addError(FieldErrorBuilder.create()
.objectName(getObjectName()).fieldPath(buildFieldPath(field))
.codes(generateMessageCodes(errorCode, buildFieldPath(field)), errorVars)
.sheetName(getSheetName()).cellAddress(cellAddress)
.defaultMessage(defaultMessage)
.build());
}
/**
* エラーコードとメッセージ引数を指定してシートのフィールドエラーを登録します。
* <p>メッセージ中の変数はインデックス形式で指定する必要がります。
* @param field フィールドパス。
* @param fieldValue フィールドの値。
* @param fieldType フィールドのクラスタイプ。
* @param cellAddress セルのアドレス。x座標が列番号です。y座標が行番号です。列番号、行番号は0から始まります。
* @param errorCode メッセージコード。
* @param errorArgs メッセージ変数。
*/
public void rejectSheetValue(final String field, final Object fieldValue, final Class<?> fieldType,
final Point cellAddress, final String errorCode, final Object[] errorArgs) {
addError(FieldErrorBuilder.create()
.objectName(getObjectName()).fieldPath(buildFieldPath(field))
.fieldValue(fieldValue).fieldType(fieldType)
.codes(generateMessageCodes(errorCode, buildFieldPath(field), fieldType), errorArgs)
.sheetName(getSheetName()).cellAddress(cellAddress)
.build());
}
/**
* エラーコードとメッセージ引数を指定してシートのフィールドエラーを登録します。
* <p>メッセージ中の変数はインデックス形式で指定する必要がります。
* @param field フィールドパス。
* @param fieldValue フィールドの値。
* @param fieldType フィールドのクラスタイプ。
* @param cellAddress セルのアドレス。x座標が列番号です。y座標が行番号です。列番号、行番号は0から始まります。
* @param errorCode メッセージコード。
* @param errorArgs メッセージ変数。
* @param defaultMessage デフォルトメッセージ。指定したエラーコードに対するメッセージが見つからないときに使用する値です。
*/
public void rejectSheetValue(final String field, final Object fieldValue, final Class<?> fieldType,
final Point cellAddress, final String errorCode, final Object[] errorArgs, final String defaultMessage) {
addError(FieldErrorBuilder.create()
.objectName(getObjectName()).fieldPath(buildFieldPath(field))
.fieldValue(fieldValue).fieldType(fieldType)
.codes(generateMessageCodes(errorCode, buildFieldPath(field), fieldType), errorArgs)
.sheetName(getSheetName()).cellAddress(cellAddress)
.defaultMessage(defaultMessage)
.build());
}
/**
* エラーコードとデメッセージ変数を指定してシートのフィールドエラーを登録します。
* @param field フィールドパス。
* @param fieldValue フィールドの値。
* @param fieldType フィールドのクラスタイプ。
* @param cellAddress セルのアドレス。x座標が列番号です。y座標が行番号です。列番号、行番号は0から始まります。
* @param errorCode メッセージコード。
* @param errorVars メッセージ変数。
*/
public void rejectSheetValue(final String field, final Object fieldValue, final Class<?> fieldType,
final Point cellAddress, final String errorCode, final Map<String, Object> errorVars) {
addError(FieldErrorBuilder.create()
.objectName(getObjectName()).fieldPath(buildFieldPath(field))
.fieldValue(fieldValue).fieldType(fieldType)
.codes(generateMessageCodes(errorCode, buildFieldPath(field), fieldType), errorVars)
.sheetName(getSheetName()).cellAddress(cellAddress)
.build());
}
/**
* エラーコードとメッセージ変数を指定してシートのフィールドエラーを登録します。
* @param field フィールドパス。
* @param fieldValue フィールドの値。
* @param fieldType フィールドのクラスタイプ。
* @param cellAddress セルのアドレス。x座標が列番号です。y座標が行番号です。列番号、行番号は0から始まります。
* @param errorCode メッセージコード。
* @param errorVars メッセージ変数。
* @param defaultMessage デフォルトメッセージ。指定したエラーコードに対するメッセージが見つからないときに使用する値です。
*/
public void rejectSheetValue(final String field, final Object fieldValue, final Class<?> fieldType,
final Point cellAddress, final String errorCode, final Map<String, Object> errorVars, final String defaultMessage) {
addError(FieldErrorBuilder.create()
.objectName(getObjectName()).fieldPath(buildFieldPath(field))
.fieldValue(fieldValue).fieldType(fieldType)
.codes(generateMessageCodes(errorCode, buildFieldPath(field), fieldType), errorVars)
.sheetName(getSheetName()).cellAddress(cellAddress)
.defaultMessage(defaultMessage)
.build());
}
/**
* メッセージ変数付きのフィールド型変換エラーを指定する。
* @param field フィールドパス。
* @param fieldValue フィールドの値。
* @param fieldType フィールドのクラスタイプ。
* @param errorVars メッセージ変数
*/
public void rejectTypeBind(final String field, final Object fieldValue, final Class<?> fieldType, final Map<String, Object> errorVars) {
addError(FieldErrorBuilder.create()
.objectName(getObjectName()).fieldPath(buildFieldPath(field))
.fieldValue(fieldValue).fieldType(fieldType)
.typeBindFailure(true)
.codes(getMessageCodeGenerator().generateTypeMismatchCodes(getObjectName(), buildFieldPath(field), fieldType), errorVars)
.build());
}
/**
* メッセージ変数付きのシートのフィールド型変換エラーを指定する。
* @param field フィールドパス。
* @param fieldValue フィールドの値。
* @param fieldType フィールドのクラスタイプ。
* @param errorVars メッセージ変数
* @param cellAddress セルのアドレス。x座標が列番号です。y座標が行番号です。列番号、行番号は0から始まります。
* @param label フィールドのラベル。
*/
public void rejectSheetTypeBind(final String field, final Object fieldValue, final Class<?> fieldType, final Map<String, Object> errorVars,
final Point cellAddress, final String label) {
addError(FieldErrorBuilder.create()
.objectName(getObjectName()).fieldPath(buildFieldPath(field))
.fieldValue(fieldValue).fieldType(fieldType)
.typeBindFailure(true)
.codes(getMessageCodeGenerator().generateTypeMismatchCodes(getObjectName(), buildFieldPath(field), fieldType), errorVars)
.sheetName(getSheetName()).cellAddress(cellAddress)
.label(label)
.build());
}
/**
* フィールド型変換エラーを指定する。
* @param field フィールドパス。
* @param fieldValue フィールドの値。
* @param fieldType フィールドのクラスタイプ。
*/
public void rejectTypeBind(final String field, final Object fieldValue, final Class<?> fieldType) {
addError(FieldErrorBuilder.create()
.objectName(getObjectName()).fieldPath(buildFieldPath(field))
.fieldValue(fieldValue).fieldType(fieldType)
.typeBindFailure(true)
.codes(getMessageCodeGenerator().generateTypeMismatchCodes(getObjectName(), buildFieldPath(field), fieldType))
.build());
}
/**
* シートのフィールド型変換エラーを指定する。
* @param field フィールドパス。
* @param fieldValue フィールドの値。
* @param fieldType フィールドのクラスタイプ。
* @param cellAddress セルのアドレス。x座標が列番号です。y座標が行番号です。列番号、行番号は0から始まります。
* @param label フィールドのラベル。
*/
public void rejectSheetTypeBind(final String field, final Object fieldValue, final Class<?> fieldType,
final Point cellAddress, final String label) {
addError(FieldErrorBuilder.create()
.objectName(getObjectName()).fieldPath(buildFieldPath(field))
.fieldValue(fieldValue).fieldType(fieldType)
.typeBindFailure(true)
.codes(getMessageCodeGenerator().generateTypeMismatchCodes(getObjectName(), buildFieldPath(field), fieldType))
.sheetName(getSheetName()).cellAddress(cellAddress)
.label(label)
.build());
}
public MessageCodeGenerator getMessageCodeGenerator() {
return messageCodeGenerator;
}
public void setMessageCodeGenerator(MessageCodeGenerator messageCodeGenerator) {
this.messageCodeGenerator = messageCodeGenerator;
}
public String[] generateMessageCodes(final String code) {
return getMessageCodeGenerator().generateCodes(code, getObjectName());
}
public String[] generateMessageCodes(final String code, final String field) {
return getMessageCodeGenerator().generateCodes(code, getObjectName(), field, null);
}
public String[] generateMessageCodes(final String code, final String field, final Class<?> fieldType) {
return getMessageCodeGenerator().generateCodes(code, getObjectName(), field, fieldType);
}
}