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

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import jp.co.sint.config.SIConfig;

/**
 * @version $Id: SICustomErrors.java,v 1.0 2003/07/25 jExp $
 * @author  Jinwang Chen
 * <br>Description: エラーのセット
 * <p>History</p>
 * <p>Author&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reason</p>
 * ============&nbsp;&nbsp;&nbsp;==========&nbsp;&nbsp;===========================<br>
 * J.W.Chen       2003/07/25  Original
 */

public class SICustomErrors {

  HashMap errorMap = new HashMap();

  /**
   * <b>addError</b>
   * 指定エラーをエラーセットに追加します。
   * @param  error エラーのレコード
   * @return なし
   * @throws なし
   */
  public void addError(SICustomError lError) {
    addError(SIConfig.SIERROR_DEFAULT_CATEGORY,lError);
  }

  /**
   * <b>addError</b>
   * 指定エラーをエラーセットの指定エラーカテゴリに追加します。
   * @param  errorCategory エラーカテゴリ
   * @param  error エラーのレコード
   * @return なし
   * @throws なし
   */
  public void addError(String lErrorCategory, SICustomError lError) {
    List lErrorList = (List)errorMap.get(lErrorCategory);
    if(lErrorList == null) {
      lErrorList = new ArrayList();
    }
    lErrorList.add(lError);
    errorMap.put(lErrorCategory, lErrorList);
  }

  /**
   * <b>getErrorList</b>
   * 指定のエラーカテゴリのエラーセットを取得します。
   * @param  errorCategory エラーカテゴリ
   * @return なし
   * @throws なし
   */
  public List getErrorList(String lErrorCategory) {
    return (List)errorMap.get(lErrorCategory);
  }
  public List getErrorList(){
    return getErrorList(SIConfig.SIERROR_DEFAULT_CATEGORY);
  }

  public String getErrorMsg(){
    return getErrorMsg(SIConfig.SIERROR_DEFAULT_CATEGORY);
  }
  public String getErrorMsg(String lErrorCategory){
    StringBuffer lMsgBuf = new StringBuffer();
    List lErrorList=getErrorList(lErrorCategory);
    if (lErrorList==null) return "";
    Iterator lIta = lErrorList.iterator();
    SICustomError lError;
    String lErrMessage="";
    while(lIta.hasNext()) {
      lError = (SICustomError)lIta.next();
      lErrMessage=SIErrorFactory.getErrorMsg(lError);
      if(SIUtil.isNull(lErrMessage))continue;
      lMsgBuf.append(lErrMessage);
    }
    return lMsgBuf.toString();
  }

  /**
   * <b>isEmpty</b>
   * 指定のエラーカテゴリのエラーセットにエラーのレコードがあるかどうかをチェックします。
   * @param  errorCategory エラーカテゴリ
   * @return true なし　false ある
   * @throws なし
   */
  public boolean isEmpty(String lErrorCategory){
    try {
      return ((List)errorMap.get(lErrorCategory)).size()==0;
      }catch(Exception e){return true;}
  }

  /**
   * <b>isEmpty</b>
   * defaultのカテゴリのエラーセットにエラーのレコードがあるかどうかをチェックします。
   * @param  なし
   * @return true なし　false ある
   * @throws なし
   */
  public boolean isEmpty(){
    return isEmpty(SIConfig.SIERROR_DEFAULT_CATEGORY);
  }

  public int errorSize(){
    try{
      return ((List)errorMap.get(SIConfig.SIERROR_DEFAULT_CATEGORY)).size();
    }catch(Exception e){return 0;}
  }
}
