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

//
//	フレームワーク　メッセージ読み込みクラス
//			変更履歴
//				2004/01/08 新規作成 二條
//
package jp.co.ntt.lms.xms.framework;

import java.util.MissingResourceException;
import java.util.ResourceBundle;

/**
 * フレームワーク　メッセージ読み込みクラス<BR>
 * 各リクエスト処理で画面に出力すべきメッセージ定義ファイルから指定された
 * キーに対応するメッセージを取得する。<BR>
 * もしキーに対応するメッセージが定義していない場合はキーそのものを返す。<BR>
 * また、置換文字配列を受け取った場合、キーに対応する置換文字を
 * 配列の内容で置換して返す。
 * <PRE>
 * 　　置換文字列は {0}, {1}, {2}, ... , {n} など '{}'で囲まれた文字列とする。
 *     "n"は0オリジンの整数とする。
 * 　　置換メソッドでは受け取った配列のindex に対応する置換文字列を置き換える。
 *     ex)
 *         キーに対応する文字列
 *                "ログインID: {0} パスワード: {1}"
 *          
 *         渡された文字配列
 *                0: "tom"
 *                1: "john"
 *         
 *         返却文字列
 *                "ログインID: tom パスワード: john"
 *  </PRE>
 * 
 * @author nijou
 */
public class XmsMessages {
	
	/**
	 * メッセージの定義ファイル
	 */
	private static final String BUNDLE_NAME = "msg.xms.xmsmsg";
	
	/**
	 * 読み込みクラス
	 */
	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);

	/**
	 * デフォルトコンストラクタ<BR>
	 * 非公開とする
	 */
	private XmsMessages() {
	}

	
	/**
	 * キーに対応するメッセージを返す。<BR>
	 * キーが未定義の場合はキーそのものを返す。
	 * @param key キー
	 * @return String キーに対応するメッセージ
	 */
	public static String getString(String key) {
		try {
			return RESOURCE_BUNDLE.getString(key);
		} catch (MissingResourceException e) {
			return key;
		}
	}
	
	/**
	 * キーに対応するメッセージを取得し、そのメッセージ中に置換文字列が存在した
	 * 場合は、置換文字列を置換して返す。<BR>
	 * 詳細はクラス説明を参照
	 * @param key キー
	 * @param items　置換文字配列
	 * @return String キーに対応するメッセージ
	 */
	public static String getString( String key, String[] items ) {
		try {
			return editMessage( getString(key), items );	
		} 
		catch (MissingResourceException e) {
			return key;
		}
	}
	
	/**
	 * メッセージの編集<BR>
	 * メッセージ本文の埋め込み文字を編集してその値を返します。<BR>
	 * @param   message	  置換対象メッセージ
	 * @param   items         埋め込みString配列<BR>
	 * @return  String メッセージ
	 */
	public static String editMessage(String message, String[] items) {

		//埋め込み文字列が設定無しの場合はメッセージをそのまま返却
		if(items == null) {
			return message;
		}

		int count = items.length;      //埋め込み文字数

		int start = 0;

		for(int i = 0; i < count; i++) {
			String edit = "";
			String format = "{" + i + "}";
			while(message.indexOf(format) != -1) {
				//置換地点を探す
				int end = message.indexOf(format);
				edit = edit + message.substring(start, end);
				edit = edit + items[i];
				message = message.substring(end + format.length());
			}
			message = edit + message;
		}

		return message;
	}
}
