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

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;

import javax.servlet.http.HttpServletRequest;

import jp.co.sint.basic.SIBasic;
import jp.co.sint.basic.SICmdty;
import jp.co.sint.basic.SILogin;
import jp.co.sint.config.SIConfig;
import jp.co.sint.config.SIDBMultiConf;
import jp.co.sint.database.SIDBAccessException;
import jp.co.sint.database.SIDBUtil;
import jp.co.sint.database.SITableConditionManager;
import jp.co.sint.tools.SICustomError;
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: UICtgryCmdtyListCond.java,v 1.0 2003/09/24 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>
 * Jinwang Chen   2003/09/24 14:44:10  Original
 */
public class UICtgryCmdtyListCond extends SIBasic{
  //ログ用のインスタンスの生成
  private static Category log=Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  //カテゴリコード
  private String ctgryCode=SIConfig.SICATEGORY_ROOT_CODE ;
  
  //カテゴリコード
  private String ctgryName="";
  
  //ページ番号
  private String pageNumberTxt="1";
  
  //ページごとに表示するレコード数
  private String pageNumberSel="1";
  
  //アクション名
  private String actionNameTxt="";
  
  //商品コードリスト
  private String[] shopCmdtyCodeChk=new String[0];
  
  /**
   * UICtgryCmdtyListCond
   * コンストラクタ
   * @param なし
   * @return なし
   * @throws なし
   */
  public UICtgryCmdtyListCond(){}
  
  //setter of カテゴリコード
  public void setCtgryCode(String lCtgryCode){
    if (SIUtil.isNull(lCtgryCode)) lCtgryCode=SIConfig.SICATEGORY_ROOT_CODE;
    this.ctgryCode=SIUtil.changeTo(lCtgryCode.trim(),this.encode);
  }
  
  //setter of カテゴリ名
  public void setCtgryName(String lCtgryName){
    if (SIUtil.isNull(lCtgryName)) lCtgryName="";
    this.ctgryName=SIUtil.changeTo(lCtgryName.trim(),this.encode);
  }
  
  //setter of ページ番号
  public void setPageNumberTxt(String lPageNumberTxt){
    if (SIUtil.isNull(lPageNumberTxt))lPageNumberTxt="1";
    this.pageNumberTxt=lPageNumberTxt;
  }
  
  //setter of ページごとに表示するレコード数
  public void setPageNumberSel(String lPageNumberSel){
    if (SIUtil.isNull(lPageNumberSel))lPageNumberSel="1";
    this.pageNumberSel=lPageNumberSel;
  }
  
  //setter of 商品コードリスト
  public void setShopCmdtyCodeChk(String[] lShopCmdtyCodeChk){
    if (lShopCmdtyCodeChk==null) lShopCmdtyCodeChk=new String[0];
    shopCmdtyCodeChk=lShopCmdtyCodeChk;
  }
  
  //getter of 商品コードリスト
  public String[] getShopCmdtyCodeChk(){
    return shopCmdtyCodeChk;
  }
  
  //getter of カテゴリコード
  public String getCtgryCode(){
    return this.ctgryCode;
  }
  
  //getter of カテゴリ名
  public String getCtgryName(){
    return this.ctgryName;
  }
  
  //getter of ページ番号
  public String getPageNumberTxt(){
    return this.pageNumberTxt;
  }
  
  //getter of ページごとに表示するレコード数
  public String getPageNumberSel(){
    return this.pageNumberSel;
  }
  
  public void init(HttpServletRequest lRequest,Connection lConnection,SIURLParameter lUrlParam){//7.1.1 ST0236 修正
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    super.init(lRequest,lUrlParam);//7.1.1 ST0068 追加  //7.1.1 ST0236 修正
    this.setCtgryCode((String)lUrlParam.getParam("ctgryCode"));//7.1.1 ST0236 修正
    this.setEncode(SIConfig.SIENCODE_NONE);
    String lSql="SELECT CtgryName FROM CtgryMTbl WHERE CtgryCode="+SIDBUtil.SQL2Str(getCtgryCode());
    try {
      this.setCtgryName(SIDBUtil.getFirstData(lConnection, lSql));
    } catch (SIDBAccessException e) {
      e.printStackTrace();
    }
  }
  
  /**
   * initDelete
   * 削除する商品コードリストのデータを取得します。
   * @param lRequest リクエスト
   * @param lUrlParam
   * @return エラーがあるかどうか
   * @throws なし
   */
  public void initDelete(HttpServletRequest lRequest,SIURLParameter lUrlParam){//7.1.1 ST0236 修正
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    this.setCtgryCode((String)lUrlParam.getParam("ctgryCode"));//カテゴリコード  //7.1.1 ST0236 修正
    this.setShopCmdtyCodeChk(lRequest.getParameterValues("shopCmdtyCodeChk"));//商品コードリスト
  }
  
  /**
   * <b>validate</b>
   * 入力したデータをチェックして、同時にSQLの条件文を作成します。
   * @param lRequest クライアントからのリクエスト
   * @return なし
   * @throws なし
   */
  public boolean validateDelete(HttpServletRequest lRequest,Connection lConnection){
    SICustomErrors errors=new SICustomErrors();
    
    //チェックボックスのチェック
    if(this.getShopCmdtyCodeChk()==null || this.getShopCmdtyCodeChk().length==0){
      errors.addError(new SICustomError("input.data.checkbox.require","削除"));
    }
    if (!errors.isEmpty()) lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY,errors);
    else lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    return errors.isEmpty();
  }
  
  public Collection getCollection(Connection lConnection){
    return getCollection(lConnection,new SILogin());
  }
  
  public Collection getCollection(Connection lConnection,SILogin lLogin){
    Statement lStatement=null;
    ResultSet lResultSet=null;
    SICmdty lCmdty=new SICmdty();
    StringBuffer lSqlBuf=new StringBuffer();
    Collection lCmdties=new ArrayList();
    
    //基本のSQL
    lSqlBuf.append("SELECT aa.CtgryCode,bb.* ");
    lSqlBuf.append("FROM CmdtyCtgryMTbl aa,CmdtyMTbl bb ");
    //検索の条件
    lSqlBuf.append("WHERE aa.CtgryCode=").append(SIDBUtil.SQL2Str(ctgryCode," "));
    lSqlBuf.append("AND aa.ShopCode=bb.ShopCode ");
    lSqlBuf.append("AND aa.CmdtyCode=bb.CmdtyCode ");
    if (lLogin.isShop()){
      lSqlBuf.append("AND aa.ShopCode=").append(SIDBUtil.SQL2Str(lLogin.getMallShopCode()," "));
    }
    //出力順
    lSqlBuf.append("ORDER BY bb.ShopCode ASC, bb.CmdtyCode ASC ");
    log.debug("lSqlBuf="+lSqlBuf.toString());
    //実行
    try{
      lStatement=lConnection.createStatement();
      lResultSet=lStatement.executeQuery(lSqlBuf.toString());
      
      //商品レコードのセットの作成
      while (lResultSet.next()){
        lCmdty=new SICmdty();
        lCmdty.setEncode(SIConfig.SIENCODE_NONE);
        lCmdty.setShopCode(lResultSet.getString("ShopCode"));
        lCmdty.setCmdtyCode(lResultSet.getString("CmdtyCode"));
        lCmdty.setCmdtyName(lResultSet.getString("CmdtyName"));
        lCmdties.add(lCmdty);
      }
    }catch(SQLException ex){
      ex.printStackTrace();
    }finally{
      SIDBUtil.close(lResultSet,lStatement);
    }
    return lCmdties;
  }
}