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

import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;

import jp.co.sint.basic.SICmdtyStndrd;
import jp.co.sint.basic.SICmdtyStndrdUtil;
import jp.co.sint.config.SIConfig;
import jp.co.sint.tools.SICheckDataConf;
import jp.co.sint.tools.SICheckValid;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIUtil;
import jp.co.sint.tools.SIURLParameter;//7.1.1 ST0236 追加

import org.apache.log4j.Category;

/**
 * @version $Id: UIRegCmdtyStndrd.java,v 1.0 2003/09/16 Exp $
 * @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>
 * jwchen        2003/09/16 18:29:42  Original
 */
public class UIRegCmdtyStndrd extends SICmdtyStndrd{
  //ログ用のインスタンスの生成
  private static Category log=Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  //
  private HashMap cmdtyStndrdMap=new HashMap();
  
  /**
   * UIRegCmdtyStndrd
   * コンストラクタ
   * @param なし
   * @return なし
   * @throws なし
   */
  public UIRegCmdtyStndrd(){}
  
  /**
   * init
   * 商品規格画面から入力したデータを設定します。
   * @param lRequest リクエスト
   * @param lUrlParam
   * @return なし
   * @throws なし
   */
  public void init(HttpServletRequest lRequest,SIURLParameter lUrlParam){//7.1.1 ST0236 修正
    Enumeration lInputEnum=lRequest.getParameterNames();
    String lName="";
    String lValue="";
    
    setActionNameTxt((String)lUrlParam.getParam("actionNameTxt"));//7.1.1 ST0236 修正
    while (lInputEnum.hasMoreElements()){
      lName=(String)lInputEnum.nextElement();
      lValue=SIUtil.changeTo((String)lUrlParam.getParam(lName),SIConfig.SIENCODE_SHIFT_JIS);//7.1.1 ST0236 修正
      if (lName.startsWith(SIConfig.SIPREFIX_CHECKBOX_NAME_TEXT)){
        cmdtyStndrdMap.put(lName,lValue);
      }else if (lName.startsWith(SIConfig.SIPREFIX_AMOUNT_NAME_TEXT)){
        cmdtyStndrdMap.put(lName,lValue);
      }
    }
  }
  
  /**
   * validate
   * 入力した在庫数量データと画像ファイルのデータをチェックします。
   * @param lRequest リクエスト
   * @return なし
   * @throws なし
   */
  public boolean validate(HttpServletRequest lRequest){
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors=new SICustomErrors();
    
    Iterator cmdtyStndrdIta=cmdtyStndrdMap.keySet().iterator();
    SICmdtyStndrdUtil lcmdtyStndrdUtil=new SICmdtyStndrdUtil();
    boolean amountIsValid=true;//在庫数量のデータをチェックし続けかどうかフラグ
    String lName="";
    String lAmount="";
    
    while (cmdtyStndrdIta.hasNext()){
      lName=(String)cmdtyStndrdIta.next();
      if (lName.startsWith(SIConfig.SIPREFIX_CHECKBOX_NAME_TEXT)){
        lcmdtyStndrdUtil=new SICmdtyStndrdUtil(lName);
        lAmount=lcmdtyStndrdUtil.getAmountVal(cmdtyStndrdMap);
        
        if (amountIsValid){//チェックし続け
          amountIsValid=SICheckValid.checkValid(errors,"在庫数量",lAmount,SICheckDataConf.SICHECK_DATA_DIGIT_NEGATIVE_TYPE);
        }
      }
      if (!amountIsValid) break;
    }
    
    //エラーメッセージをセッションに設定します。
    if (!errors.isEmpty()) lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY,errors);
    else lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    
    return errors.isEmpty();
  }
  
  /**
   * getValue
   * 指定名前のデータを取得します。
   * @param lName 指定名
   * @return 指定名の値
   * @throws なし
   */
  public String getValue(String lName){
    String lVal=(String)cmdtyStndrdMap.get(lName);
    
    if (lName.startsWith(SIConfig.SIPREFIX_AMOUNT_NAME_TEXT)&&SIUtil.isNull(lVal))return "0";
    else if (SIUtil.isNull(lVal)) return "";
    else return lVal;
  }
  
  /**
   * getNameList
   * 画面に全ての入力したデータをセットマップとして取得します。
   * @param なし
   * @return データのセットマップ
   * @throws なし
   */
  public String[] getNameList(){
    return (String[])cmdtyStndrdMap.keySet().toArray();
  }
}