SavingWorkObject.java

package com.gh.mygreen.xlsmapper;

import java.util.ArrayList;
import java.util.List;

import org.apache.poi.ss.usermodel.Cell;

import com.gh.mygreen.xlsmapper.cellconverter.TypeBindException;
import com.gh.mygreen.xlsmapper.util.CellPosition;
import com.gh.mygreen.xlsmapper.validation.SheetBindingErrors;
import com.gh.mygreen.xlsmapper.xml.AnnotationReader;

/**
 * 書き込み処理中で持ち回すオブジェクトを保持するクラス。
 *
 */
public class SavingWorkObject {
    
    private AnnotationReader annoReader;
    
    private final List<NeedProcess> needPostProcesses = new ArrayList<>();
    
    private SheetBindingErrors<?> errors;
    
    public AnnotationReader getAnnoReader() {
        return annoReader;
    }
    
    public void setAnnoReader(AnnotationReader annoReader) {
        this.annoReader = annoReader;
    }
    
    public void addNeedPostProcess(NeedProcess needProcess) {
        this.needPostProcesses.add(needProcess);
    }
    
    public List<NeedProcess> getNeedPostProcesses() {
        return needPostProcesses;
    }
    
    public SheetBindingErrors<?> getErrors() {
        return errors;
    }
    
    public void setErrors(SheetBindingErrors<?> errors) {
        this.errors = errors;
    }
    
    /**
     * 型変換エラーを追加します。
     * @param bindException 型変換エラー
     * @param cell マッピング元となったセル
     * @param fieldName マッピング先のフィールド名
     * @param label ラベル。省略する場合は、nullを指定します。
     */
    public void addTypeBindError(final TypeBindException bindException, final Cell cell, final String fieldName, final String label) {
        addTypeBindError(bindException, CellPosition.of(cell), fieldName, label);
    }
    
    /**
     * 型変換エラーを追加します。
     * @param bindException 型変換エラー
     * @param address マッピング元となったセルのアドレス
     * @param fieldName マッピング先のフィールド名
     * @param label ラベル。省略する場合は、nullを指定します。
     */
    public void addTypeBindError(final TypeBindException bindException, final CellPosition address, final String fieldName, final String label) {
        
        this.errors.createFieldConversionError(fieldName, bindException.getBindClass(), bindException.getTargetValue())
            .variables(bindException.getMessageVars())
            .variables("validatedValue", bindException.getTargetValue())
            .address(address)
            .label(label)
            .buildAndAddError();
        
    }
    
    
}