package core.exception;

/**
 * 業務例外
 *
 * @author Tadashi Nakayama
 */
public class LogicalException extends RuntimeException {
	/** serialVersionUID */
	private static final long serialVersionUID = 1L;

	/** 復帰値 */
	private final String rc;
	/** ステータスコード */
	private final int scd;

	/**
	 * コンストラクタ
	 *
	 * @param msg メッセージ
	 */
	public LogicalException(final String msg) {
		this(msg, null);
	}

	/**
	 * コンストラクタ
	 *
	 * @param ret 復帰値
	 * @param msg メッセージ
	 */
	public LogicalException(final String msg, final String ret) {
		super(msg);
		this.rc = ret;
		this.scd = 0;
	}

	/**
	 * コンストラクタ
	 *
	 * @param sc ステータスコード
	 */
	public LogicalException(final int sc) {
		this(sc, null);
	}

	/**
	 * コンストラクタ
	 *
	 * @param sc ステータスコード
	 * @param msg メッセージ
	 */
	public LogicalException(final int sc, final String msg) {
		super(msg);
		this.rc = null;
		this.scd = sc;
	}

	/**
	 * ファクトリ
	 *
	 * @param ret 復帰値
	 * @return LogicalException
	 */
	public static LogicalException create(final String ret) {
		return new LogicalException(null, ret);
	}

	/**
	 * 復帰値取得
	 *
	 * @return 復帰値
	 */
	public String getReturnCode() {
		return this.rc;
	}

	/**
	 * ステータスコード取得
	 *
	 * @return ステータスコード
	 */
	public int getStatusCode() {
		return this.scd;
	}
}
