/*
このファイルの中身は、NTT オープンソースライセンス　バージョン 1.0（「本
契約」という）の適用を受けます。
本契約を遵守しない限り、このファイルを使用してはなりません。
本契約のコピーは、次のＵＲＬから入手できます。
【配布サイトのURL】 http://www.oss.ecl.ntt.co.jp/lms/

本契約に基づき頒布されるソフトウェアは、現状のまま、明示又は黙示のあらゆ
る種類の保証なしで、頒布されます。本契約に基づく権利及び制限を律する特定
の文言については、本契約を参照してください。

「オリジナルコード」は、 NTT Cyber Space Laboratories Code です。 
「オリジナルコード」の「初期開発者」は、日本電信電話株式会社です。  
日本電信電話株式会社により創作された部分は、Copyright (C) 2004 
日本電信電話株式会社 です。
全ての権利が留保されます。 
「コントリビュータ」：_____________________________________ 


The contents of this file are subject to the NTT Opensource License
Version 1.0 (the License); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
【配布サイトのURL】 http://www.oss.ecl.ntt.co.jp/lms/

Software distributed under the License is distributed on an AS IS
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.

The Original Code is NTT Cyber Space Laboratories Code .

The Initial Developer of the Original Code is NIPPON TELEGRAPH AND 
TELEPHONE CORPORATION.
Portions created by the NIPPON TELEGRAPH AND TELEPHONE CORPORATION 
are Copyright (C) 2004 NIPPON TELEGRAPH AND TELEPHONE CORPORATION. 
All Rights Reserved.

Contributor(s) ______________________________________.
*/
package jp.co.ntt.lms.installer.scorm;

import java.util.Properties;

import jp.co.ntt.lms.installer.core.InstallerException;
import jp.co.ntt.lms.installer.core.InstallerOverwriteXmlValue;
import jp.co.ntt.lms.installer.core.InstallerValues;
import jp.co.ntt.lms.installer.util.StringUtil;

/**
 * SCORM Engine環境設定について入力情報を保持するクラス。
 * @author T.Nishiki
 */
public class ScormEngineInputValue
	implements InstallerOverwriteXmlValue {
	/**
	 * SCORM Engine環境設定ファイル・パスを取得するためのキー文字列。
	 */
	private static final String KEY_FILE = "scormengine";

	/**
	 * プロトコル文字列：HTTP。
	 */
	public static final String PROTOCOL_HTTP = "http://";

	/**
	 * サーブレット文字列。
	 */
	public static final String PATH_SERVLET = "FrameworkServlet";

	/**
	 * HTTPデフォルトポート番号。
	 */
	public static final String DEFAULT_PORT_HTTP = "80";

	/**
	 * XPathロケーションパス：ベースサーブレットURL。
	 */
	public static final String XPATH_BASE_SERVLET_URL
		= "/SG/BaseServletURL/text()";

	/**
	 * XPathロケーションパス：システム・ベースURL。
	 */
	public static final String XPATH_SYSTEM_BASE_URL
		= "/SG/SystemBaseURL/text()";

	/**
	 * XPathロケーションパス：ユーザインターフェース・スクリプトURL。
	 */
	public static final String XPATH_LMS_UI_SCRIPT_URL
		= "/SG/LMSUIScriptURL/text()";

	/**
	 * XPathロケーションパス：AICCURL。
	 */
	public static final String XPATH_AICC_URL
		= "/SG/AICCURL/text()";

	/**
	 * XPathロケーションパス：マネージャ名。
	 */
	public static final String XPATH_MANAGER_NAME
		= "/SG/ManagerName/text()";

	/**
	 * XPathロケーションパス：教材を格納するベースディレクトリ・パス。
	 */
	public static final String XPATH_CONTENTS_BASE_URL
		= "/SG/ContentsBaseURL/text()";

	/**
	 * XPathロケーションパス：学習ログ出力ディレクトリ・パス。
	 */
	public static final String XPATH_LEARNING_LOG_BASE_URL
		= "/SG/LearningLogBaseURL/text()";

	/**
	 * XPathロケーションパス：中断情報出力ディレクトリ・パス。
	 */
	public static final String XPATH_RESUME_DATA_BASE_URL
		= "/SG/ResumeDataBaseURL/text()";

	/**
	 * XPathロケーションパス：デバッグログ出力ディレクトリ・パス。
	 */
	public static final String XPATH_DEBUG_LOG_PATH
		= "/SG/DebugLogPath/text()";

	/**
	 * SCORMサーバ名。
	 */
	private String _scormServerName;

	/**
	 * SCORMサーバ・ポート番号。
	 */
	private String _scormServerPort;

	/**
	 * Webアプリケーション・ベースURI。
	 */
	private String _applicationBaseURI;

	/**
	 * 教材を格納するベースディレクトリ・パス。
	 */
	private String _contentsBaseURL;

	/**
	 * 学習ログ出力ディレクトリ・パス。
	 */
	private String _learningLogBaseURL;

	/**
	 * 中断情報出力ディレクトリ・パス。
	 */
	private String _resumeDataBaseURL;

	/**
	 * デバッグログ出力ディレクトリ・パス。
	 */
	private String _debugLogPath;

	/**
	 * マネージャ名。
	 */
	private String _managerHost;

	/**
	 * Webアプリケーション・ベースURIを取得します。
	 * @return Webアプリケーション・ベースURI。
	 */
	public String getApplicationBaseURI() {
		return _applicationBaseURI;
	}

	/**
	 * 教材を格納するベースディレクトリ・パスを取得します。
	 * @return 教材を格納するベースディレクトリ・パス。
	 */
	public String getContentsBaseURL() {
		return _contentsBaseURL;
	}

	/**
	 * デバッグログ出力ディレクトリ・パスを取得します。
	 * @return デバッグログ出力ディレクトリ・パス。
	 */
	public String getDebugLogPath() {
		return _debugLogPath;
	}

	/**
	 * 学習ログ出力ディレクトリ・パスを取得します。
	 * @return 学習ログ出力ディレクトリ・パス。
	 */
	public String getLearningLogBaseURL() {
		return _learningLogBaseURL;
	}

	/**
	 * 中断情報出力ディレクトリ・パスを取得します。
	 * @return 中断情報出力ディレクトリ・パス。
	 */
	public String getResumeDataBaseURL() {
		return _resumeDataBaseURL;
	}

	/**
	 * SCORMサーバ名を取得します。
	 * @return SCORMサーバ名。
	 */
	public String getScormServerName() {
		return _scormServerName;
	}

	/**
	 * SCORMサーバ・ポート番号を取得します。
	 * @return SCORMサーバ・ポート番号。
	 */
	public String getScormServerPort() {
		return _scormServerPort;
	}

	/**
	 * Webアプリケーション・ベースURIを設定します。
	 * @param applicationBaseURI 設定するWebアプリケーション・ベースURI。
	 */
	public void setApplicationBaseURI(String applicationBaseURI) {
		_applicationBaseURI = applicationBaseURI;
	}

	/**
	 * 教材を格納するベースディレクトリ・パスを設定します。
	 * @param contentsBaseURL 設定するベースディレクトリ・パス。
	 */
	public void setContentsBaseURL(String contentsBaseURL) {
		_contentsBaseURL = contentsBaseURL;
	}

	/**
	 * デバッグログ出力ディレクトリ・パスを設定します。
	 * @param debugLogPath 設定するデバッグログ出力ディレクトリ・パス。
	 */
	public void setDebugLogPath(String debugLogPath) {
		_debugLogPath = debugLogPath;
	}

	/**
	 * 学習ログ出力ディレクトリ・パスを設定します。
	 * @param learningLogBaseURL 設定する学習ログ出力ディレクトリ・パス。
	 */
	public void setLearningLogBaseURL(String learningLogBaseURL) {
		_learningLogBaseURL = learningLogBaseURL;
	}

	/**
	 * 中断情報出力ディレクトリ・パスを設定します。
	 * @param resumeDataBaseURL 設定する中断情報出力ディレクトリ・パス。
	 */
	public void setResumeDataBaseURL(String resumeDataBaseURL) {
		_resumeDataBaseURL = resumeDataBaseURL;
	}

	/**
	 * SCORMサーバ名を設定します。
	 * @param scormServerName 設定するSCORMサーバ名。
	 */
	public void setScormServerName(String scormServerName) {
		_scormServerName = scormServerName;
	}

	/**
	 * SCORMサーバ・ポート番号を設定します。
	 * @param scormServerPort 設定するSCORMサーバ・ポート番号。
	 */
	public void setScormServerPort(String scormServerPort) {
		_scormServerPort = scormServerPort;
	}

	/**
	 * マネージャ・ホスト名を取得します。
	 * @return マネージャ・ホスト名。
	 */
	public String getManagerHost() {
		return _managerHost;
	}

	/**
	 * マネージャ・ホスト名を設定します。
	 * @param managerHost 設定するマネージャ・ホスト名。
	 */
	public void setManagerHost(String managerHost) {
		_managerHost = managerHost;
	}

	/**
	 * 値を上書きするノードの一覧を戻します。<br>
	 * @param values インストーラ共通データ・オブジェクト。
	 * @return 「上書きするノードを取得するためのXPathロケーションパス」と
	 *          「そのノードの新しい値」を組とするPropertiesを戻します。
	 * @throws InstallerException 処理中にエラーが発生した場合。
	 * @see org.apache.xpath.XPathAPI
	 * @see org.w3c.dom.Node#setNodeValue(java.lang.String)
	 */
	public Properties getOverwrittenNodeValues(InstallerValues values)
			throws InstallerException {
		Properties properties = new Properties();
		// サーバ名称／ポート番号連結文字列（デフォルトポート番号なら付加しない）
		String serverHostAndPort = null;
		if (StringUtil.isEmpty(_scormServerPort)
				|| _scormServerPort.equals(DEFAULT_PORT_HTTP)) {
			serverHostAndPort = _scormServerName;
		}
		else {
			serverHostAndPort = _scormServerName + ":" + _scormServerPort;
		}
		// =====================================================================
		// サーブレットベースURL。
		properties.setProperty( XPATH_BASE_SERVLET_URL,
			PROTOCOL_HTTP + serverHostAndPort
			+ _applicationBaseURI + PATH_SERVLET );
		// ユーザインターフェース・スクリプトURL。
		properties.setProperty( XPATH_LMS_UI_SCRIPT_URL,
			PROTOCOL_HTTP + serverHostAndPort
			+ _applicationBaseURI + "scripts/LMSUI.js" );
		// システムベースURL。
		properties.setProperty( XPATH_SYSTEM_BASE_URL,
			PROTOCOL_HTTP + serverHostAndPort
			+ _applicationBaseURI );
		// AICCURL
		properties.setProperty( XPATH_AICC_URL,
			serverHostAndPort + _applicationBaseURI
			+ PATH_SERVLET + "?action_id=scorm.hacp" );
		// マネージャ名
		properties.setProperty( XPATH_MANAGER_NAME, _managerHost);
		// 教材を格納するベースディレクトリ・パス。
		properties.setProperty( XPATH_CONTENTS_BASE_URL, _contentsBaseURL );
		// 学習ログ出力ディレクトリ・パス。
		properties.setProperty(
			XPATH_LEARNING_LOG_BASE_URL, _learningLogBaseURL );
		// 中断情報出力ディレクトリ・パス。
		properties.setProperty(
			XPATH_RESUME_DATA_BASE_URL, _resumeDataBaseURL );
		// デバッグログ出力ディレクトリ・パス。
		properties.setProperty(
			XPATH_DEBUG_LOG_PATH, _debugLogPath );

		return properties;
	}

	/**
	 * 上書き対象のＸＭＬファイルを取得するためのキーを戻します。<br>
	 * 上書き対象のＸＭＬファイルについて、インストール設定ファイルから
	 * 取得するためのキーを戻します。
	 * @return プロパティファイル取得用のキー文字列。
	 */
	public String getTargetFileKey() {
		return KEY_FILE;
	}

	/**
	 * 対象のXMLファイルの文字コードを取得するためのキーを指定します。<br>
	 * @return 文字コードを取得するためのインストーラ・プロパティ・キー文字列。
	 */
	public String getXmlFileEncodeKey() {
		return "file.encode.scormsg";
	}

	/**
	 * このクラスオブジェクトの文字列化します。<br>
	 * @return このクラスオブジェクトの文字列表現。
	 */
	public String toString() {
		StringBuffer buffer = new StringBuffer();
		buffer.append("_applicationBaseURI=" + _applicationBaseURI);
		buffer.append(",_contentsBaseURL=" + _contentsBaseURL);
		buffer.append(",_debugLogPath=" + _debugLogPath);
		buffer.append(",_learningLogBaseURL=" + _learningLogBaseURL);
		buffer.append(",_managerHost=" + _managerHost);
		buffer.append(",_resumeDataBaseURL=" + _resumeDataBaseURL);
		buffer.append(",_scormServerName=" + _scormServerName);
		buffer.append(",_scormServerPort=" + _scormServerPort);
		return buffer.toString();
	}

}
