/**
 * LOGICAL-PARADOX.ORG
 * Copyright (C)2004 satoshi akabane(akabane@logical-paradox.org)
 *
 */
package org.logical_paradox.common.message;

import java.text.MessageFormat;
import java.util.ResourceBundle;

import org.logical_paradox.common.util.StringUtils;

/**
 * メッセージビルダー
 * 与えられたメッセージリソースから，実際の文字列を組み立てます
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.1 $
 */
public class MessageBuilder {
	public static final String DEFAULT_MESSAGE_RESOURCE = "message";

	/** メッセージリソース */
	private ResourceBundle rb = null;

	/**
	 * コンストラクタ
	 */
	public MessageBuilder() {
		this(DEFAULT_MESSAGE_RESOURCE);
	}
	/**
	 * コンストラクタ
	 * @param basename メッセージリソースのベース名
	 */
	public MessageBuilder(String basename) {
		rb = ResourceBundle.getBundle(basename);
	}

	/**
	 * メッセージリソースを文字列に変換する
	 * @param resource メッセージリソース
	 * @return フォーマットされた文字列
	 */
	public String getMessage(MessageResource resource) {
		String mf = rb.getString(resource.getMsgCode());
		if(StringUtils.isEmpty(mf)) {
			return "";
		}

		// 引数を設定する
		return MessageFormat.format(mf, resource.getParameters());
	}
	/**
	 * メッセージを文字列に変換する
	 * @param code メッセージID
	 * @return フォーマットされた文字列
	 */
	public String getMessage(String code) {
		return getMessage(new MessageResource(code));
	}
	/**
	 * メッセージを文字列に変換する
	 * @param code メッセージID
	 * @param o1 第1引数
	 * @return フォーマットされた文字列
	 */
	public String getMessage(String code, Object o1) {
		return getMessage(new MessageResource(code, o1));
	}
	/**
	 * メッセージを文字列に変換する
	 * @param code メッセージID
	 * @param o1 第1引数
	 * @param o2 第2引数
	 * @return フォーマットされた文字列
	 */
	public String getMessage(String code, Object o1, Object o2) {
		return getMessage(new MessageResource(code, o1, o2));
	}
	/**
	 * メッセージを文字列に変換する
	 * @param code メッセージID
	 * @param o1 第1引数
	 * @param o2 第2引数
	 * @param o3 第3引数
	 * @return フォーマットされた文字列
	 */
	public String getMessage(String code, Object o1, Object o2, Object o3) {
		return getMessage(new MessageResource(code, o1, o2, o3));
	}
	/**
	 * メッセージを文字列に変換する
	 * @param code メッセージID
	 * @param objects 引数
	 * @return フォーマットされた文字列
	 */
	public String getMessage(String code, Object[] objects) {
		return getMessage(new MessageResource(code, objects));
	}
}
