/**
 * Created on 2003/08/28
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
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.SIWrapping;
import jp.co.sint.config.SIConfig;
import jp.co.sint.config.SIFlagConf;
import jp.co.sint.database.SIDBAccessException;
import jp.co.sint.database.SIDBUtil;
import jp.co.sint.database.SITableCondition;
import jp.co.sint.database.SITableConditionManager;
import jp.co.sint.tools.SICheckDataConf;
import jp.co.sint.tools.SICheckValid;
import jp.co.sint.tools.SICustomError;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIHTMLUtil;
import jp.co.sint.tools.SIUtil;
import jp.co.sint.tools.SIURLParameter;//7.1.1 ST0236 追加

import org.apache.log4j.Category;

/**
 * @author arai
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
public class UIRegWrapping extends SIBasic {
  //ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  private String shopCode = "";
  private String wrappingCode = "";
  private String wrappingName = "";
  private String description = "";
  private String imageFile = "";
  private String price = "0";
  private String taxFlg ="1";
  
  public UIRegWrapping() {}
  
  /**
   * init
   * 入力したデータから、このbeansを設定します。
   * @param HttpServletRequest
   * @param SIURLParameter
   * @return なし
   * @throws なし
   */
  //7.1.1 ST0236 修正 ここから
  public void init(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    SILogin lLogin=SIHTMLUtil.getLogin(lRequest);
    
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    if (lLogin.isShop()){
      this.setShopCode(lLogin.getMallShopCode());
    }else{
      this.setShopCode((String)lUrlParam.getParam("shopCodeHid"));
    }
    this.setWrappingCode((String)lUrlParam.getParam("wrappingCodeHid"));
    this.setWrappingName((String)lUrlParam.getParam("wrappingName"));
    this.setDescription((String)lUrlParam.getParam("description"));
    this.setImageFile((String)lUrlParam.getParam("imageFile"));
    this.setPrice((String)lUrlParam.getParam("price"));
    this.setTaxFlg((String)lUrlParam.getParam("taxFlg"));
    this.setActionNameTxt((String)lUrlParam.getParam("actionNameTxt"));
    this.setEditModeTxt((String)lUrlParam.getParam("editModeTxt"));
  }
  //7.1.1 ST0236 修正 ここまで
  
  /**
   * validate
   * 入力したデータをチェックします。
   * 不正なデータがある場合、エラーをオブジェクトに格納します。
   * そのオブジェクトは、エラーメッセージとして画面に表示されます。
   * @param HttpServletRequest ，Connection
   * @return true:エラーがない false:エラーが１つ以上ある
   * @throws なし
   */
  public boolean validate(HttpServletRequest lRequest, Connection lConnection) {
    return validate(lRequest,lConnection,false);
  }
  
  public boolean validate(HttpServletRequest lRequest, Connection lConnection,boolean lCsvCheck) {
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors = new SICustomErrors();
    
    SICheckValid.checkValid(errors, "ショップコード", this.getShopCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "ショップコード", this.getShopCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 16);
    
    SICheckValid.checkValid(errors, "ラッピングコード", this.getWrappingCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "ラッピングコード", this.getWrappingCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 16);
    
    if (SIConfig.SIEDIT_MODE_INSERT.equalsIgnoreCase(this.getEditModeTxt().trim())){
       //ショップコードが存在するかどうか
      StringBuffer lSqlBuf = new StringBuffer();
      lSqlBuf.append("SELECT MallShopCode FROM ShopVW ");
      lSqlBuf.append("WHERE MallShopCode="+SIDBUtil.SQL2Str(this.getShopCode()," "));
      SICheckValid.checkExist(errors,lConnection,"ショップコード",lSqlBuf.toString());
    }
    
    if (!editModeTxt.equals(SIConfig.SIEDIT_MODE_DELETE)) {
      SICheckValid.checkValid(errors, "ラッピング名称", this.getWrappingName(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors, "ラッピング名称", this.getWrappingName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
      
      SICheckValid.checkValid(errors, "本文", this.getDescription(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 2000);//7.1.1 ST0162 修正
      
      SICheckValid.checkValid(errors, "画像ファイル名", this.getImageFile(), SICheckDataConf.SICHECK_DATA_FILE_NAME_TYPE);
      SICheckValid.checkValid(errors, "画像ファイル名", this.getImageFile(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 256);
      
      SICheckValid.checkValid(errors, "価格", this.getPrice(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
      SICheckValid.checkValid(errors, "価格", this.getPrice(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8);
      
      SICheckValid.checkValid(errors, "税区分", this.getTaxFlg(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      if (lCsvCheck){
        SICheckValid.checkValid(errors,"税区分",this.getTaxFlg(),SICheckDataConf.SICHECK_FLAG_TYPE,SIFlagConf.SIFLAG_TAX_INX);
      }
    }
    
    if (!errors.isEmpty())
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    return errors.isEmpty();
  }
  
  /**
   * getFirstColl
   * 編集対象のレコードを取得する。
   * @param SILogin
   * @return SIWrapping
   * @throws
   */
  public SIWrapping getFirstColl(SILogin lLogin){
    SIWrapping lwrapping = new SIWrapping();
    lwrapping.setEncode(SIConfig.SIENCODE_NONE);
    
    if (lLogin.isShop()) {
      lwrapping.setShopCode(lLogin.getMallShopCode());
    }else{
      lwrapping.setShopCode(this.getShopCode());
    }
    lwrapping.setWrappingCode(this.getWrappingCode());
    lwrapping.setWrappingName(this.getWrappingName());
    lwrapping.setDescription(this.getDescription());
    lwrapping.setPrice(this.getPrice());
    lwrapping.setTaxFlg(this.getTaxFlg());
    
    lwrapping.setActionNameTxt(this.getActionNameTxt());
    lwrapping.setEditModeTxt(this.getEditModeTxt());
    
    return lwrapping;
  }
  
  /**
   * getFirstColl
   * 編集対象のレコードを取得する。
   * @param Connection , String ,String , SILogin
   * @return SIWrapping
   * @throws SIDBAccessException
   */
  public SIWrapping getFirstColl(Connection lConnection, String pShopCode, String pWrappingCode, SILogin lLogin) throws SIDBAccessException {
    if (getCollection(lConnection, pShopCode, pWrappingCode, lLogin).isEmpty() || pShopCode.trim().length() == 0 || pWrappingCode.trim().length() == 0) {
      SIWrapping wrapping = new SIWrapping();
      return wrapping;
    } else {
      return (SIWrapping) getCollection(lConnection, pShopCode, pWrappingCode, lLogin).iterator().next();
    }
  }
  
  /**
   * getCollection
   * 条件に合ったレコードを検索して、結果のコネクションを作成して、戻します。
   * @param Connection , String , String , SILogin
   * @return Collection
   * @throws SIDBAccessException
   */
  public Collection getCollection(Connection lConnection, String pShopCode, String pWrappingCode, SILogin lLogin) throws SIDBAccessException {
    Statement lStatement = null;
    ResultSet lResultSet = null;
    SIWrapping lwrapping = new SIWrapping();
    StringBuffer lSqlBuf = new StringBuffer();
    Collection wrapping = new ArrayList();
    
    //基本のSQL
    lSqlBuf.append(" SELECT * FROM wrappingmtbl WHERE 1=1 ");
    
    SITableConditionManager lConditionMan = new SITableConditionManager();
    SITableCondition DD = new SITableCondition();
    if (lLogin.isShop()) {
      DD = new SITableCondition("", "shopcode", lLogin.getMallShopCode(), SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND);
    } else {
      DD = new SITableCondition("", "shopcode", pShopCode, SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND);
    }
    DD.setBlankEnable(false);
    lConditionMan.add(DD);
    
    DD = new SITableCondition("", "wrappingcode", pWrappingCode, SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND);
    DD.setBlankEnable(false);
    lConditionMan.add(DD);
    
    lSqlBuf.append(lConditionMan.getCondtionSQL());
    
    lSqlBuf.append(" ORDER BY shopcode ASC, wrappingcode ASC");
    log.debug("sqlStatement=" + lSqlBuf.toString());
    //実行
    try {
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(lSqlBuf.toString());
      
      //商品レコードのセットの作成
      while (lResultSet.next()) {
        lwrapping = new SIWrapping();
        lwrapping.setEncode(SIConfig.SIENCODE_NONE);
        lwrapping.setShopCode(lResultSet.getString("ShopCode"));
        lwrapping.setWrappingCode(lResultSet.getString("WrappingCode"));
        lwrapping.setWrappingName(lResultSet.getString("WrappingName"));
        lwrapping.setDescription(lResultSet.getString("Description"));
        lwrapping.setPrice(lResultSet.getString("Price"));
        lwrapping.setTaxFlg(lResultSet.getString("TaxFlg"));
        wrapping.add(lwrapping);
      }
    } catch (Exception ex) {
      throw new SIDBAccessException(ex);
    } finally {
      SIDBUtil.close(lResultSet, lStatement);
    }
    return wrapping;
  }
  
  /**
   * @return
   */
  public String getDescription() {
    return description;
  }
  
  /**
   * @return
   */
  public String getImageFile() {
    return imageFile;
  }
  
  /**
   * @return
   */
  public Category getLog() {
    return log;
  }
  
  /**
   * @return
   */
  public String getPrice() {
    return price;
  }
  
  /**
   * @return
   */
  public String getTaxFlg() {
    return taxFlg;
  }
  
  /**
   * @return
   */
  public String getShopCode() {
    return shopCode;
  }
  
  /**
   * @return
   */
  public String getWrappingCode() {
    return wrappingCode;
  }
  
  /**
   * @return
   */
  public String getWrappingName() {
    return wrappingName;
  }
  
  /**
   * @param string
   */
  public void setDescription(String string) {
    if (SIUtil.isNull(string)) string = "";
    this.description = SIUtil.changeTo(string.trim(), this.encode);
  }
  
  /**
   * @param string
   */
  public void setImageFile(String string) {
    if (SIUtil.isNull(string)) string = "";
    this.imageFile = SIUtil.changeTo(string.trim(), this.encode);
  }
  
  /**
   * @param category
   */
  public void setLog(Category category) {
    log = category;
  }
  
  /**
   * @param string
   */
  public void setPrice(String string) {
    if (SIUtil.isNull(string))string = "0";
    this.price = SIUtil.changeTo(string.trim(), this.encode);
  }
  
  /**
   * @param string
   */
  public void setTaxFlg(String string) {
    if (SIUtil.isNull(string))string = "1";
    this.taxFlg = SIUtil.changeTo(string.trim(), this.encode);
  }
  
  /**
   * @param string
   */
  public void setShopCode(String string) {
    if (SIUtil.isNull(string)) string = "";
    this.shopCode = SIUtil.changeTo(string.trim(), this.encode);
  }
  
  /**
   * @param string
   */
  public void setWrappingCode(String string) {
    if (SIUtil.isNull(string)) string = "";
    this.wrappingCode = SIUtil.changeTo(string.trim(), this.encode);
  }
  
  /**
   * @param string
   */
  public void setWrappingName(String string) {
    if (SIUtil.isNull(string)) string = "";
    this.wrappingName = SIUtil.changeTo(string.trim(), this.encode);
  }
}