//
// CopyRight (C) 2002, IPA, eLC, NTT Resonant Inc. All rights reserved.
//
//	CommunicationModuleWrapper
//
//	変更履歴
//		2002.12.25  新規作成
//

package jp.co.ntt.lms.lo.scorm.kernel;

import java.math.BigDecimal;
import java.util.Hashtable;

import jp.co.ntt.lms.lo.scorm.kernel.exception.CommunicationModuleWrapperException;

/**
 *	APIAdapterWrapper<BR>
 *	APIアダプタの仮想クラス<BR>
 */
public abstract class CommunicationModuleWrapper {
	/**
	 * Activity
	 */
	protected Activity activity;

	/**
	 * デフォルトコンストラクタ <BR>
	 */
	public CommunicationModuleWrapper() {}

	public CommunicationModuleWrapper(Activity activity) {
		this.activity = activity;
	}
	/**
	 * Activityを設定する<BR>
	 *
	 * @param	 activity	 アクティビティ<BR>
	 */
	public void setActivity(Activity activity) {
		this.activity = activity;
	}

	/**
	 * Activityを取得する<BR>
	 *
	 * @return	アクティビティ<BR>
	 */
	public Activity getActivity() {
		return activity;
	}

	/**
	 * 初期化<BR>
	 *
	 * @param	initialParameter	初期化パラメータ。Hashtableには以下の2キーが必須であり<BR>
	 *					他のキーは派生クラスが必要なものを設定する<BR><BR>
	 *
	 *					userID	   ユーザID<BR>
	 *					userName   ユーザ名<BR>
	 *
	 * @param	savedValue	保存されたデータ。前回の状態を復元する為に使用する<BR>
	 *						保存データが存在しない場合はnullを指定する<BR>
	 *						保存データの形式・内容は派生クラス固有のフォーマットとなる
	 */
	protected abstract void initialize(Hashtable initialParameter, String savedValue)
		throws CommunicationModuleWrapperException;

	/**
	 * 中断情報取得<BR>
	 *
	 * @return	保存データ<BR>
	 */
	protected abstract String save() throws CommunicationModuleWrapperException;

	/**
	 * 終期化<BR>
	 */
	protected abstract void terminate() throws CommunicationModuleWrapperException;

	/**
	 * 学習目標達成値有効／無効フラグを設定する<BR>
	 *
	 * @param  objectiveID 学習目標ID<BR>
	 * @param  status 達成状態を指定する(true:有効 / false:無効)<BR>
	 */
	protected abstract void setObjectiveProgressStatus(String objectiveID, boolean status)
		throws CommunicationModuleWrapperException;

	/**
	 * 学習目標達成状態有効／無効フラグを取得する<BR>
	 *
	 * @param  objectiveID 学習目標ID<BR>
	 * @return 学習目標の有効／無効<BR>
	 */
	protected abstract Boolean getObjectiveProgressStatus(String objectiveID)
		throws CommunicationModuleWrapperException;

	/**
	 * 学習目標達成状態を設定する<BR>
	 *
	 * @param  objectiveID 学習目標ID<BR>
	 * @param  status 進捗状態を指定する(true:完了 / false:未完了)<BR>
	 */
	protected abstract void setObjectiveSatisfiedStatus(String objectiveID, boolean status)
		throws CommunicationModuleWrapperException;

	/**
	 * 学習目標達成状態を取得する<BR>
	 *
	 * @param	objectiveID 学習目標ID<BR>
	 * @return	学習目標達成状態<BR>
	 */
	protected abstract Boolean getObjectiveSatisfiedStatus(String objectiveID)
		throws CommunicationModuleWrapperException;

	/**
	 * 学習目標達成値有効／無効フラグを設定する<BR>
	 *
	 * @param objectiveID 学習目標ID<BR>
	 * @param status 達成値の有効／無効を設定する<BR>
	 */
	protected abstract void setObjectiveMeasureStatus(String objectiveID, boolean status)
		throws CommunicationModuleWrapperException;

	/**
	 * 学習目標達成値有効／無効フラグを取得する<BR>
	 *
	 * @param objectiveID 学習目標ID<BR>
	 * @return 学習目標達成値の有効／無効<BR>
	 */
	protected abstract Boolean getObjectiveMeasureStatus(String objectiveID)
		throws CommunicationModuleWrapperException;

	/**
	 * 学習目標達成値(正規化)を設定する<BR>
	 *
	 * @param	 objectiveID 学習目標ID<BR>
	 * @param	 value 学習目標達成値を9.9999形式(-1〜1)のBigDecimalで指定する<BR>
	 */
	protected abstract void setObjectiveNormalizedMeasure(String objectiveID, BigDecimal value)
		throws CommunicationModuleWrapperException;

	/**
	 * 学習目標達成値(正規化)を取得する<BR>
	 *
	 * @param	 objectiveID 学習目標ID<BR>
	 * @return	 学習目標達成値(正規化)<BR>
	 */
	protected abstract BigDecimal getObjectiveNormalizedMeasure(String objectiveID)
		throws CommunicationModuleWrapperException;

	/**
	 * 学習完了状態有効／無効フラグの設定をする<BR>
	 *
	 * @param	status 学習完了状態有効／無効フラグ<BR>
	 */
	protected abstract void setAttemptProgressStatus(boolean status)
		throws CommunicationModuleWrapperException;

	/**
	 * 学習完了状態有効／無効フラグの取得<BR>
	 *
	 * @return 学習完了状態の有効／無効<BR>
	 */
	protected abstract Boolean getAttemptProgressStatus() throws CommunicationModuleWrapperException;

	/**
	 * 学習完了状態を設定する<BR>
	 *
	 * @param	 value 完了状態( 1.0〜0.0 )を指定する<BR>
	 */
	protected abstract void setAttemptCompletionAmount(BigDecimal value)
		throws CommunicationModuleWrapperException;

	/**
	 * 学習完了状態(割合)を設定する<BR>
	 *
	 * @return	学習完了状態( 1.0〜0.0 )で指定<BR>
	 */
	protected abstract BigDecimal getAttemptCompletionAmount() throws CommunicationModuleWrapperException;

	/**
	 * 学習完了状態を設定する<BR>
	 *
	 * @param	 status 完了状態を指定する(true:完了 / false:未完了)<BR>
	 */
	protected abstract void setAttemptCompletionStatus(boolean status)
		throws CommunicationModuleWrapperException;

	/**
	 * 学習完了状態を設定する<BR>
	 *
	 * @return	学習完了状態<BR>
	 */
	protected abstract Boolean getAttemptCompletionStatus() throws CommunicationModuleWrapperException;
}
