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

import java.sql.Connection;
import java.sql.ResultSet;
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.SILogin;
import jp.co.sint.basic.SICompany;
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.tools.SIHTMLUtil;
import jp.co.sint.tools.SIUtil;
import jp.co.sint.tools.SIURLParameter;

import org.apache.log4j.Category;

public class UICompanyListCond extends SIBasic {
  // ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  // 支店コード
  private String companyCodeTxt = "";
  
  // 支店名
  private String companyNameTxt = "";
  
  // メールアドレス
  private String companyMailTxt = "";
  
  // 支店区分
  private String companyTypeTxt = "0";
  
  // 公開フラグ
  private String publicFlgTxt = "";
  
  // SQL検索時の条件文
  private String conditionSQL = "";
  
  /**
   * UICompanyListCond コンストラクタ
   * 
   * @param なし
   * @return なし
   * @throws なし
   */
  public UICompanyListCond() {}
  
  /**
   * UICompanyListCond コンストラクタ
   * 
   * @param lRequest リクエスト
   * @param lUrlParam
   * @return なし
   * @throws なし
   */
  public UICompanyListCond(HttpServletRequest lRequest, SIURLParameter lUrlParam) {
    this.init(lRequest, lUrlParam);
  }
  
  // getter of 支店コード
  public String getCompanyCodeTxt() {
    return companyCodeTxt;
  }
  
  // getter of 支店名
  public String getCompanyNameTxt() {
    return companyNameTxt;
  }
  
  // getter of メールアドレス
  public String getCompanyMailTxt() {
    return companyMailTxt;
  }
  
  // getter of 支店区分
  public String getCompanyTypeTxt() {
    return companyTypeTxt;
  }
  
  // getter of 公開フラグ
  public String getPublicFlgTxt() {
    return this.publicFlgTxt;
  }
  
  // getter of 条件文
  public String getCondtionSQL() {
    return this.conditionSQL;
  }
  
  // setter of 支店コード
  public void setCompanyCodeTxt(String lCompanyCodeTxt) {
    if (SIUtil.isNull(lCompanyCodeTxt)) lCompanyCodeTxt = "";
    this.companyCodeTxt = SIUtil.changeTo(lCompanyCodeTxt.trim(), this.encode);
  }
  
  // setter of 支店名
  public void setCompanyNameTxt(String lCompanyNameTxt) {
    if (SIUtil.isNull(lCompanyNameTxt)) lCompanyNameTxt = "";
    this.companyNameTxt = SIUtil.changeTo(lCompanyNameTxt.trim(), this.encode);
  }
  
  // setter of メールアドレス
  public void setCompanyMailTxt(String lCompanyMailTxt) {
    if (SIUtil.isNull(lCompanyMailTxt)) lCompanyMailTxt = "";
    this.companyMailTxt = SIUtil.changeTo(lCompanyMailTxt.trim(), this.encode);
  }
  
  // setter of 支店区分
  public void setCompanyTypeTxt(String lCompanyTypeTxt) {
    if (SIUtil.isNull(lCompanyTypeTxt)) lCompanyTypeTxt = "0";
    this.companyTypeTxt = SIUtil.changeTo(lCompanyTypeTxt.trim(), this.encode);
  }
  
  // setter of 公開フラグ
  public void setPublicFlgTxt(String lPublicFlg) {
    if (SIUtil.isNull(lPublicFlg)) lPublicFlg = "0";
    this.publicFlgTxt = SIUtil.changeTo(lPublicFlg.trim(), this.encode);
  }
  
  // setter of 条件文
  public void setConditionSQL(String lConditionSQL) {
    if (lConditionSQL == null) lConditionSQL = "";
    this.conditionSQL = lConditionSQL;
  }
  
  /**
   * <b>init</b> 入力したデータを基づいて、このbeansを設定します。
   * 
   * @param request クライアントからリクエスト
   * @param lUrlParam
   * @return なし
   * @throws なし
   */
  public void init(HttpServletRequest lRequest, SIURLParameter lUrlParam) {
    SILogin lLogin = SIHTMLUtil.getLogin(lRequest);
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    super.init(lRequest, lUrlParam);
    this.setCompanyCodeTxt((String) lUrlParam.getParam("companyCodeTxt"));// 支店コード
    this.setCompanyNameTxt((String) lUrlParam.getParam("companyNameTxt"));// 支店名
    this.setCompanyMailTxt((String) lUrlParam.getParam("companyMailTxt"));// メールアドレス
  }
  
  public Collection getCollection(Connection lConnection) throws SIDBAccessException {
    return getCollection(lConnection, new SILogin());
  }
  
  /**
   * <b>getCollection</b> 条件に合ったレコードを検索して、結果のコネクションを作成して、戻します。
   * 
   * @param lConnection データベースへの接続コネクション
   * @return レコードのセット
   * @throws SIDBAccessException
   */
  public Collection getCollection(Connection lConnection, SILogin lLogin) throws SIDBAccessException {
    Statement lStatement = null;
    ResultSet lResultSet = null;
    SICompany lCompany = new SICompany();
    Collection lCompanyColl = new ArrayList();
    
    StringBuffer lSqlBuf = new StringBuffer();
    
    // 基本のSQL
    lSqlBuf.append("SELECT a.*, ");
    lSqlBuf.append(" CASE WHEN ");
    if (SIDBMultiConf.SIDB_CURRENT_INX == SIDBMultiConf.SIDB_POSTGRESQL_INX) {
      lSqlBuf.append("( SELECT DISTINCT(1) FROM ChargeTbl").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("b ");
      lSqlBuf.append("WHERE a.BranchCode = b.BelongingBranchCode) > (0) ::numeric ");
    } else {
      lSqlBuf.append("( SELECT DISTINCT(1) FROM ChargeTbl").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("b ");
      lSqlBuf.append("WHERE a.BranchCode = b.BelongingBranchCode) > 0 ");
    }
    lSqlBuf.append("THEN 1 ELSE 0 ");
    lSqlBuf.append("END AS ChargeCount ");
    lSqlBuf.append("FROM BranchTbl ").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("a ");
    
    lSqlBuf.append("WHERE 1=1 ");
    
    // 検索の条件
    lSqlBuf.append(this.conditionSQL);
    
    // 昇順に並べ替え
    lSqlBuf.append(" ORDER BY BranchCode ASC");
    
    log.debug("getCollection:lSqlBuf=" + lSqlBuf.toString());
    // 実行
    try {
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(lSqlBuf.toString());
      
      // 支店レコードのセットの作成
      while (lResultSet.next()) {
        lCompany = new SICompany();
        lCompany.setEncode(SIConfig.SIENCODE_NONE);
        lCompany.setCompanyCode(lResultSet.getString("BranchCode"));
        lCompany.setCompanyName(lResultSet.getString("BranchName"));
        lCompany.setCompanyMail(lResultSet.getString("EMail"));
        lCompany.setCompanyType(lResultSet.getInt("BranchFlg"));
        lCompany.setChargeCount(lResultSet.getString("ChargeCount"));
        lCompany.setPublicFlg(lResultSet.getString("PublicFlg"));
        lCompany.setPriorityBase(lResultSet.getString("PriorityBase"));
        lCompany.setPostCode1(lResultSet.getString("postCode1"));
        lCompany.setPostCode2(lResultSet.getString("postCode2"));
        lCompany.setAddress1(lResultSet.getString("address1"));
        lCompany.setAddress2(lResultSet.getString("address2"));
        lCompany.setAddress3(lResultSet.getString("address3"));
        lCompany.setTel1(lResultSet.getString("tel1"));
        lCompany.setTel2(lResultSet.getString("tel2"));
        lCompany.setFax1(lResultSet.getString("fax1"));
        lCompany.setFax2(lResultSet.getString("fax2"));
        lCompanyColl.add(lCompany);
      }
    } catch (Exception ex) {
      throw new SIDBAccessException(ex);
    } finally {
      SIDBUtil.close(lResultSet, lStatement);
    }
    return lCompanyColl;
  }
  
}
