/*
 * ApplicationExiterDelegater.java
 * Copyright (C) 2008 Cyber Beans Corporation. All rights reserved.
 */
package jp.co.cybec.cb3.util;

/**
 * システム終了処理を担うクラスです。<br>
 * デフォルトでは、このクラスはApplicationExiterImplに処理を委譲します。
 * ApplicationExiterImplではSystem.exit()を呼び出しています。
 * ユニットテストなどで、サービスが終了してもシステムを終了させたくない場合に、
 * setApplicationExiter()メソッドを利用して委譲先を切り替えることができます。
 * @author Naoko Sugimoto
 */
public class ApplicationExiterDelegater {

	/** このクラスのインスタンス */
	private static ApplicationExiterDelegater delegater = new ApplicationExiterDelegater();

	/** ApplicationExiter. システム終了処理の委譲先。 */
	private ApplicationExiter applicationExiter = new ApplicationExiterImpl();

	/** 処理結果コード。 */
	private int returnCode = 0;

	/** コンストラクタ。 */
	private ApplicationExiterDelegater() {
	}

	/**
	 * このクラスのインスタンスを取得します。
	 *
	 * @return このクラスのインスタンス
	 */
	public static ApplicationExiterDelegater getInstance() {
		return delegater;
	}

	/**
	 * システム終了処理を呼び出します。
	 * @param code 処理結果。
	 */
	public void exit(int code) {
		// 処理結果を保存。
		returnCode = code;
		// 終了処理。
		applicationExiter.exit(code);
	}

	/**
	 * 処理結果を返します。
	 * @return 処理結果。
	 */
	public int getReturnCode() {
		return returnCode;
	}

	/**
	 * ApplicationExiterを設定します。
	 * @param applicationExiter システム終了処理の委譲先ApplicationExiter
	 */
	public void setApplicationExiter(ApplicationExiter applicationExiter) {
		this.applicationExiter = applicationExiter;
	}
}
