package org.wcs.model.bo.db;

/**
 * 数据库操作结果
 * @param <T> 数据类型
 */
public class DataBaseActionResult<T> {

    /**
     * 数据
     */
    private final T data;

    /**
     * 异常
     */
    private final Exception exception;

    /**
     * 创建一个空结果，禁止普通初始化
     */
    private DataBaseActionResult() {
        this.data = null;
        this.exception = null;
    }

    /**
     * 创建一个成功结果
     * @param data 数据
     */
    public DataBaseActionResult(T data) {
        this.data = data;
        this.exception = null;
    }

    /**
     * 创建一个失败结果
     * @param exception 异常
     */
    public DataBaseActionResult(Exception exception) {
        this.data = null;
        this.exception = exception;
    }

    /**
     * 创建一个结果
     * @param data 数据
     * @param exception 异常
     */
    public DataBaseActionResult(T data, Exception exception) {
        this.data = data;
        this.exception = exception;
    }

    /**
     * 获取数据
     * @return 数据
     */
    public T result() {
        return data;
    }

    /**
     * 获取异常
     * @return 异常
     */
    public Exception exception() {
        return exception;
    }

    /**
     * 抛出异常
     * @throws Exception 异常
     */
    public void throwException() throws Exception {
        if (exception != null) {
            throw exception;
        }
    }
}
