ObjectError.java

package com.gh.mygreen.xlsmapper.validation;

import java.io.Serializable;
import java.util.Map;
import java.util.Optional;

/**
 * シートのエラー情報を保持するクラス。
 *
 * @version 2.0
 * @author T.TSUCHIE
 *
 */
public class ObjectError implements Serializable {

    /** serialVersionUID */
    private static final long serialVersionUID = 4850835995741701297L;
    
    /**
     * オブジェクト名
     */
    private final String objectName;
    
    /** 
     * メッセージコード
     * <p>複数指定可能で、先頭にあるものほど優先度が高い。</p>
     */
    private final String[] codes;
    
    /**
     * メッセージの引数。
     */
    private Map<String, Object> variables;
    
    /**
     * デフォルトメッセージ。
     * <p>指定したコードに対するメッセージが見つからない場合に、適用されるメッセージ。</p>
     */
    private String defaultMessage;
    
    /**
     * シート名
     */
    private String sheetName;
    
    /**
     * ラベル
     * <p>テーブル名やカラム名が設定されます。</p>
     */
    private String label;
    
    /**
     * コンストラクタ
     * 
     * @param objectName オブジェクト名
     * @param codes メッセージコード
     * @param variables メッセージの引数
     */
    public ObjectError(final String objectName, final String[] codes, final Map<String, Object> variables) {
        this.objectName = objectName;
        this.codes = codes;
        this.variables = variables;
    }
    
    /**
     * オブジェクト名の取得。
     * @return Beanクラス名のパッケージ名を除いた値。
     */
    public String getObjectName() {
        return objectName;
    }
    
    /**
     * メッセージコードの候補を取得する。
     * @return メッセージコードの候補。
     */
    public String[] getCodes() {
        return codes;
    }
    
    /**
     * メッセージ変数を取得する。
     * @return メッセージをフォーマットする際に、その中で利用可能な変数。
     */
    public Map<String, Object> getVariables() {
        return variables;
    }
    
    /**
     * デフォルトメッセージを設定する。
     * <p>メッセージコードで指定したメッセージリソースが見つからない場合に適用されるメッセージ。</p>
     * @param defaultMessage デフォルトメッセージ
     */
    public void setDefaultMessage(String defaultMessage) {
        this.defaultMessage = defaultMessage;
    }
    
    /**
     * デフォルトメッセージを取得する。
     * <p>メッセージコードで指定したメッセージリソースが見つからない場合に適用されるメッセージ。</p>
     * @return 設定されていない場合は空を返します。
     */
    public Optional<String> getDefaultMessage() {
        return Optional.ofNullable(defaultMessage);
    }
    
    /**
     * シート名を取得します
     * @return 設定されていない場合は、空を返します。
     */
    public Optional<String> getSheetName() {
        return Optional.ofNullable(sheetName);
    }
    
    /**
     * シート名を設定します。
     * @param sheetName シート名
     */
    public void setSheetName(String sheetName) {
        this.sheetName = sheetName;
    }
    
    /**
     * ラベルを取得します。
     * <p>テーブル名やカラム名が設定されます。</p>
     * @return 設定されていない場合は空を返します。
     */
    public Optional<String> getLabelAsOptional() {
        return Optional.ofNullable(label);
    }
    
    /**
     * ラベルを取得します。
     * <p>テーブル名やカラム名が設定されます。</p>
     * @return 設定されていない場合はnullを返します。
     */
    public String getLabel() {
        return label;
    }
    
    /**
     * ラベルを設定します。
     * <p>テーブル名やカラム名が設定されます。</p>
     * @param label ラベル
     */
    public void setLabel(String label) {
        this.label = label;
    }
    
}