FieldError.java

package com.gh.mygreen.xlsmapper.validation;

import java.util.Map;
import java.util.Optional;

import com.gh.mygreen.xlsmapper.util.CellPosition;

/**
 * オブジェクトのフィールドであるセルのエラー情報を保持するクラスです。
 * 
 * @version 2.0
 * @author T.TSUCHIE
 *
 */
public class FieldError extends ObjectError {

    /** serialVersionUID */
    private static final long serialVersionUID = 1L;
    
    /**
     * フィールド名
     */
    private final String field;
    
    /**
     * 型変換に失敗したときのエラーかどうか
     */
    private final boolean conversionFailure;
    
    /**
     * エラーとなる値
     */
    private Object rejectedValue;
    
    /**
     * セルのアドレス情報
     */
    private CellPosition address;
    
    /**
     * コンストラクタ
     * 
     * @param objectName オブジェクト名
     * @param field フィールド名
     * @param conversionFailure 型変換に失敗したときのエラーかどうか
     * @param codes メッセージコード
     * @param variables メッセージの引数
     */
    public FieldError(final String objectName, final String field, final boolean conversionFailure,
            final String[] codes, final Map<String, Object> variables) {
        super(objectName, codes, variables);
        
        this.field = field;
        this.conversionFailure = conversionFailure;
    }
    
    /**
     * 型変換に失敗したかどうか。
     * <p>型変換に失敗した場合、検証対象のBeanやフィールドに値が設定されないないため、
     *    後から値を検証する際に検証をスキップする判定に利用する。
     * </p>
     * @return trueの場合、型変換にしっぱいしたエラー。
     */
    public boolean isConversionFailure() {
        return conversionFailure;
    }    
    
    /**
     * フィールド名を取得する。
     * <p>ネストしている場合は、親のパスを付与した形式(e.g. person.name)となります。</p>
     * @return Beanにされたフィールドの名称を返す。
     */
    public String getField() {
        return field;
    }
    
    /**
     * エラートとなったフィールドの値を取得する。
     * <p>ただし、型変換エラーの場合、変換前の値となります。</p>
     * @return フィールドの値。
     */
    public Object getRejectedValue() {
       return rejectedValue;
    }
    
    /**
     * エラートとなったフィールドの値を設定する。
     * <p>ただし、型変換エラーの場合、変換前の値となります。</p>
     * @param rejectedValue フィールドの値。
     */
    public void setRejectedValue(Object rejectedValue) {
       this.rejectedValue = rejectedValue;
    }
    
    /**
     * セルのアドレス情報を取得します。
     * @return 設定されていない場合は、空を返します。
     */
    public Optional<CellPosition> getAddressAsOptional() {
        return Optional.ofNullable(address);
    }
    
    /**
     * セルのアドレス情報を取得します。
     * @return 設定されていない場合は、nullを返します。
     */
    public CellPosition getAddress() {
        return address;
    }
    
    /**
     * セルのアドレス情報を設定します。
     * @param address アドレス情報
     */
    public void setAddress(CellPosition address) {
        this.address = address;
    }
    
}