/*
このファイルの中身は、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.lms;

import java.util.Properties;

import jp.co.ntt.lms.installer.core.InstallerException;
import jp.co.ntt.lms.installer.core.InstallerOverwritePropertiesValue;
import jp.co.ntt.lms.installer.core.InstallerValues;

/**
 * マネージャ設定ファイル書き換え入力項目を保持するクラス。
 * @author T.Nishiki
 */
public class ManagerInputValue implements InstallerOverwritePropertiesValue {
	/**
	 * マネージャ設定ファイル・パスを取得するためのキー文字列。
	 */
	private static final String KEY_FILE = "manager";

	/**
	 * プロパティキー：マネージャホスト名。
	 */
	public static final String KEY_HOST_NAME = "server_name";

	/**
	 * プロパティキー：LOホスト名。
	 */
	public static final String KEY_LO_HOST_NAME = "lo_server_name";

	/**
	 * プロパティキー：システムを動作するためのモジュール・ルート・ディレクトリ。
	 */
	public static final String KEY_SYSTEM_DIR = "system_dir";

	/**
	 * プロパティキー：サーバが動作するURL。
	 */
	public static final String KEY_SYSTEM_URL = "system_url";

	/**
	 * プロパティキー：データベース・ホスト。
	 */
	public static final String KEY_DB_HOST = "db_host";

	/**
	 * プロパティキー：データベース・ポート番号。
	 */
	public static final String KEY_DB_PORT = "db_port";

	/**
	 * プロパティキー：データベース名称。
	 */
	public static final String KEY_DB_NAME = "db_name";

	/**
	 * プロパティキー：データベース・接続ユーザ。
	 */
	public static final String KEY_DB_USER = "db_user";

	/**
	 * プロパティキー：データベース・パスワード。
	 */
	public static final String KEY_DB_PASS = "db_pass";

	/**
	 * プロパティキー：データベース種別。
	 */
	public static final String KEY_DB_CATEGORY = "db_server";

	/**
	 * プロパティキー：データベース・エンコード。
	 */
	public static final String KEY_DB_ENCODE = "db_encode";

	/**
	 * プロパティキー：データベース・JDBCクラス名。
	 */
	public static final String KEY_DB_DRIVER = "db_driver";

	/**
	 * プロパティキー：データベース・接続文字列。
	 */
	public static final String KEY_DB_CONECTION_STRING = "db_con_str";

	/**
	 * マネージャホスト名。
	 */
	private String _hostName;

	/**
	 * ＬＯホスト名。
	 */
	private String _loHostName;

	/**
	 * データベースの種別。
	 */
	private String _dbCategory;

	/**
	 * データベース・ホスト名。
	 */
	private String _dbHost;

	/**
	 * データベース・ポート番号。
	 */
	private String _dbPort;

	/**
	 * データベース・ユーザ名。
	 */
	private String _dbUser;

	/**
	 * データベース・パスワード。
	 */
	private String _dbPassword;

	/**
	 * データベース名。
	 */
	private String _dbName;

	/**
	 * データベース・エンコード。
	 */
	private String _dbEncode;

	/**
	 * マネージャホスト名を取得します。<br>
	 * @return マネージャホスト名を戻します。
	 */
	public String getHostName() {
		return _hostName;
	}

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

	/**
	 * LOホスト名を取得します。<br>
	 * @return LOホスト名を戻します。
	 */
	public String getLoHostName() {
		return _loHostName;
	}

	/**
	 * LOホスト名を設定します。
	 * @param loHostName 設定するLOホスト名。
	 */
	public void setLoHostName(String loHostName) {
		_loHostName = loHostName;
	}

	/**
	 * データベースの種別を取得します。<br>
	 * @return データベースの種別を戻します。
	 */
	public String getDbCategory() {
		return _dbCategory;
	}

	/**
	 * データベース・エンコードを取得します。<br>
	 * @return データベース・エンコードを戻します。
	 */
	public String getDbEncode() {
		return _dbEncode;
	}

	/**
	 * データベース・ホスト名を取得します。<br>
	 * @return データベース・ホスト名を戻します。
	 */
	public String getDbHost() {
		return _dbHost;
	}

	/**
	 * データベース名を取得します。<br>
	 * @return データベース名を戻します。
	 */
	public String getDbName() {
		return _dbName;
	}

	/**
	 * データベース・パスワードを取得します。<br>
	 * @return データベース・パスワードを戻します。
	 */
	public String getDbPassword() {
		return _dbPassword;
	}

	/**
	 * データベース・ポート番号を取得します。<br>
	 * @return データベース・ポート番号を戻します。
	 */
	public String getDbPort() {
		return _dbPort;
	}

	/**
	 * データベース・ユーザ名を取得します。<br>
	 * @return データベース・ユーザ名を戻します。
	 */
	public String getDbUser() {
		return _dbUser;
	}

	/**
	 * データベースの種別を設定します。
	 * @param dbCategory 設定するデータベース種別。
	 */
	public void setDbCategory(String dbCategory) {
		_dbCategory = dbCategory;
	}

	/**
	 * データベース・エンコードを設定します。
	 * @param dbEncode 設定するデータベース・エンコード。
	 */
	public void setDbEncode(String dbEncode) {
		_dbEncode = dbEncode;
	}

	/**
	 * データベース・ホストを設定します。
	 * @param dbHost 設定するデータベース・ホスト。
	 */
	public void setDbHost(String dbHost) {
		_dbHost = dbHost;
	}

	/**
	 * データベース名を設定します。
	 * @param dbName 設定するデータベース名。
	 */
	public void setDbName(String dbName) {
		_dbName = dbName;
	}

	/**
	 * データベース・パスワードを設定します。
	 * @param dbPassword 設定するデータベース・パスワード。
	 */
	public void setDbPassword(String dbPassword) {
		_dbPassword = dbPassword;
	}

	/**
	 * データベース・ポート番号を設定します。
	 * @param dbPort 設定するデータベース・ポート番号。
	 */
	public void setDbPort(String dbPort) {
		_dbPort = dbPort;
	}

	/**
	 * データベース・ユーザ名を設定します。
	 * @param dbUser 設定するデータベース・ユーザ名。
	 */
	public void setDbUser(String dbUser) {
		_dbUser = dbUser;
	}

	/**
	 * 上書きするプロパティ一覧を戻します。<br>
	 * @param values インストーラ共通データ・オブジェクト。
	 * @return 「上書きするプロパティのキー」と「その上書き後の値」を組とする
	 *          Propertiesを戻します。
	 * @throws InstallerException 処理中にエラーが発生した場合。
	 */
	public Properties getOverwrittenProperties(InstallerValues values)
			throws InstallerException {
		Properties properties = new Properties();
		// マネージャホスト名。
		properties.setProperty( KEY_HOST_NAME, _hostName);
		// LOホスト名。
		properties.setProperty( KEY_LO_HOST_NAME, _loHostName);
		// システムを動作するためのモジュール・ルート・ディレクトリ。
		properties.setProperty( KEY_SYSTEM_DIR,
			values.getProjectBaseDir().getAbsolutePath());
		// サーバが動作するURL。
		properties.setProperty( KEY_SYSTEM_URL, values.getSystemURL(_hostName));
		// データベース・ホスト。
		properties.setProperty( KEY_DB_HOST, _dbHost);
		// データベース・ポート番号。
		properties.setProperty( KEY_DB_PORT, _dbPort);
		// データベース名称。
		properties.setProperty( KEY_DB_NAME, _dbName);
		// データベース・接続ユーザ。
		properties.setProperty( KEY_DB_USER, _dbUser);
		// データベース・パスワード。
		properties.setProperty( KEY_DB_PASS, _dbPassword);
		// データベース種別。
		properties.setProperty( KEY_DB_CATEGORY, _dbCategory);
		// データベース・エンコード。
		properties.setProperty( KEY_DB_ENCODE, _dbEncode);
		// データベース・JDBCクラス名。
		properties.setProperty( KEY_DB_DRIVER,
			values.getDbProperty("jdbcDriver"));
		// データベース・接続文字列。
		properties.setProperty( KEY_DB_CONECTION_STRING,
			values.getDbProperty("connectionStringFile"));
		return properties;
	}

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

	/**
	 * 上書き対象のプロパティファイル(Native)を取得するためのキーを戻します。<br>
	 * 上書き対象のプロパティファイルを生成するための平文について、
	 * インストール設定ファイルから取得するためのキーを戻します。
	 * @return 上書き対象のプロパティファイル（Native）取得用のキー文字列。
	 */
	public String getTargetNativeFileKey() {
		// Nativeファイルがないのでnull。
		return null;
	}

	/**
	 * このクラスオブジェクトの文字列化します。<br>
	 * @return このクラスオブジェクトの文字列表現。
	 */
	public String toString() {
		StringBuffer buffer = new StringBuffer();
		buffer.append("_hostName=" + _hostName);
		buffer.append(",_loHostName=" + _loHostName);
		buffer.append(",_dbCategory=" + _dbCategory);
		buffer.append(",_dbHost=" + _dbHost);
		buffer.append(",_dbPort=" + _dbPort);
		buffer.append(",_dbUser=" + _dbUser);
		buffer.append(",_dbPassword=" + _dbPassword);
		buffer.append(",_dbName=" + _dbName);
		buffer.append(",_dbEncode=" + _dbEncode);
		return buffer.toString();
	}
}
