TextParseException.java

package com.gh.mygreen.xlsmapper.textformatter;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

/**
 * 文字列をパースしてオブジェクトに変換する際に失敗したときにスローされる例外。
 * 
 * @since 2.0
 * @author T.TSUCHIE
 *
 */
public class TextParseException extends RuntimeException {
    
    /** serialVersionUID */
    private static final long serialVersionUID = 1L;
    
    /**
     * パース元の文字列
     */
    private final String fromText;
    
    /**
     * パース後のクラスタイプ
     */
    private final Class<?> toType;
    
    /**
     * エラー時の変数
     */
    private final Map<String, Object> errorVariables = new HashMap<>();
    
    /**
     * 文字列をオブジェクトへパース時に発生した例外を指定するコンストラクタ。
     * @param fromText パース対象の文字列
     * @param toType パース先のクラスタイプ
     * @param error パースする際に発生した冷害
     */
    public TextParseException(final String fromText, final Class<?> toType, final Throwable error) {
        this(fromText, toType, error, Collections.emptyMap());
    }
    
    /**
     * 文字列をオブジェクトへパース時に発生した例外を指定し、さらにメッセージ変数を指定するコンストラクタ。
     * @param fromText パース対象の文字列
     * @param toType パース先のクラスタイプ
     * @param error パースする際に発生した例外
     * @param errorVariables 設定値などの情報。
     */
    public TextParseException(final String fromText, final Class<?> toType, final Throwable error, 
            final Map<String, Object> errorVariables) {
        super(String.format("Fail parse text '%s' to type '%s'.", fromText, toType.getName()), error);
        this.fromText = fromText;
        this.toType = toType;
        this.errorVariables.putAll(errorVariables);
    }
    
    /**
     * 
     * @param fromText パース対象の文字列
     * @param toType パース先のクラスタイプ
     */
    public TextParseException(final String fromText, final Class<?> toType) {
        this(fromText, toType, Collections.emptyMap());
    }
    
    /**
     * 
     * @param fromText パース対象の文字列
     * @param toType パース先のクラスタイプ
     * @param errorVariables 設定値などの情報。
     */
    public TextParseException(final String fromText, final Class<?> toType, final Map<String, Object> errorVariables) {
        super(String.format("Fail parse text '%s' to type '%s'.", fromText, toType.getName()));
        this.fromText = fromText;
        this.toType = toType;
        this.errorVariables.putAll(errorVariables);
    }
    
    /**
     * パースに失敗した文字列を取得する
     * @return パースに失敗した文字列
     */
    public String getFromText() {
        return fromText;
    }
    
    /**
     * パース後のクラスタイプを取得する。
     * @return パース後のクラスタイプ。
     */
    public Class<?> toType() {
        return toType;
    }
    
    /**
     * パースに失敗したときの設定値などを取得する。
     * @return 設定値など。
     */
    public Map<String, Object> getErrorVariables() {
        return errorVariables;
    }
    
}