/**
 * Copyright (c) 2003-2004 System Integrator Corporation.
 *                 All Rights Reserved.
 */
package jp.co.sint.tools;

import java.util.*;
import org.apache.log4j.Category;
import jp.co.sint.config.SIConfig;
import java.text.MessageFormat;

/**
 * メッセージ定義ファイルから全てのエラーメッセージ内容を読み込む
 * メモリに入れます
 * @version $Id: SIErrorFactory.java,v 1.0 2003/07/25 jwchen Exp $
 * @author  Jinwang Chen
 */

public class SIErrorFactory {
  //ログ用のインスタンスの生成
  private static Category log=Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);

  //エラーメッセージ用のMAPの定義と読み込み
  private static HashMap errorMap =new HashMap();

  static{
    Enumeration lEnum;
    String lKey="";
    String lData="";

    //Get the resource bundle for the default locale
    ResourceBundle lErrConfigBundle = ResourceBundle.getBundle(SIConfig.SICONFIG_ERRORMSG_FILE_NAME,new Locale("ja","JP"));
    lEnum=lErrConfigBundle.getKeys();
    while (lEnum.hasMoreElements()){
      lKey=(String)lEnum.nextElement();
      lData=(String)lErrConfigBundle.getString(lKey);
	  //7.1.1 ST0213 削除lData=SIUtil.changeToJIS(lData);
      errorMap.put(lKey,lData);
    }
  }

  /**
   * <b>SIErrorFactory</b>
   * コンストラクタ
   * @param なし
   * @return なし
   * @throws なし
   */
  public SIErrorFactory(){}

  /**
   * <b>getErrorMsg</b>
   * 指定のタイトルのメッセージを取得します
   * @param lName タイトル名
   * @return メッセージ内容
   * @throws なし
   */
  public static String getErrorMsg(String lName){
    return getErrorMsg(lName,(String)null);
  }

  /**
   * <b>getErrorMsg</b>
   * 指定のタイトルのメッセージを取得して、指定データで、{1}に入れ替えます。
   * @param lName タイトル名
   * @param lData1 {1}の所に入れ替える内容
   * @return メッセージ内容
   * @throws なし
   */
  public static String getErrorMsg(String lName,String lData1){
    return getErrorMsg(lName,lData1,null);
  }

  /**
   * <b>getErrorMsg</b>
   * 指定のタイトルのメッセージを取得して、指定データで、{1}と{2}に入れ替えます。
   * @param lName タイトル名
   * @param lData1 {1}の所に入れ替える内容
   * @param lData2 {2}の所に入れ替える内容
   * @return メッセージ内容
   * @throws なし
   */
  public static String getErrorMsg(String lName,String lData1,String lData2){
    return getErrorMsg(lName,lData1,lData2,null);
  }

  /**
   * <b>getErrorMsg</b>
   * 指定のタイトルのメッセージを取得して、指定データで、{1}と{2}と{3}に入れ替えます。
   * @param lName タイトル名
   * @param lData1 {1}の所に入れ替える内容
   * @param lData2 {2}の所に入れ替える内容
   * @param lData3 {3}の所に入れ替える内容
   * @return メッセージ内容
   * @throws なし
   */
  public static String getErrorMsg(String lName,String lData1,String lData2,String lData3){
    return getErrorMsg(lName,lData1,lData2,lData3,null);
  }

  /**
   * <b>getErrorMsg</b>
   * 指定のタイトルのメッセージを取得して、指定データで、{1}と{2}と{3}と{4}に入れ替えます。
   * @param lName タイトル名
   * @param lData1 {1}の所に入れ替える内容
   * @param lData2 {2}の所に入れ替える内容
   * @param lData3 {3}の所に入れ替える内容
   * @param lData4 {4}の所に入れ替える内容
   * @return メッセージ内容
   * @throws なし
   */
  public static String getErrorMsg(String lName,String lData1,String lData2,String lData3,String lData4){
    try {
      String lData=(String)errorMap.get(lName);
      List lParamList = new ArrayList();
      lParamList.add(lData1);
      lParamList.add(lData2);
      lParamList.add(lData3);
      lParamList.add(lData4);
      return MessageFormat.format(lData,lParamList.toArray());
      }catch(Exception e){return "";}
  }

  /**
   * <b>getErrorMsg</b>
   * 指定のタイトルのメッセージを取得して、指定データで、{1}と{2}と{3}と{4}に入れ替えます。
   * @param lName タイトル名
   * @param lData1 {1}の所に入れ替える内容
   * @param lData2 {2}の所に入れ替える内容
   * @param lData3 {3}の所に入れ替える内容
   * @param lData4 {4}の所に入れ替える内容
   * @return メッセージ内容
   * @throws なし
   */
  public static String getErrorMsg(String lName,List lParamList){
    try {
      String lData=(String)errorMap.get(lName);
      if (lParamList==null) return lData;
      else return MessageFormat.format(lData,lParamList.toArray());
      }catch(Exception e){return "";}
  }

  /**
   * <b>getErrorMsg</b>
   * 指定のタイトルのメッセージを取得して、指定データで、{1}と{2}と{3}と{4}に入れ替えます。
   * @param lName タイトル名
   * @param lData1 {1}の所に入れ替える内容
   * @param lData2 {2}の所に入れ替える内容
   * @param lData3 {3}の所に入れ替える内容
   * @param lData4 {4}の所に入れ替える内容
   * @return メッセージ内容
   * @throws なし
   */
  public static String getErrorMsg(SICustomError lError){
    return getErrorMsg(lError.getErrorKey(),lError.getParamList());
  }
}
