
package jp.co.sint.beans.mallmgr;

import java.sql.Connection;

import javax.servlet.http.HttpServletRequest;

import jp.co.sint.basic.SIStorage;
import jp.co.sint.config.SIConfig;
import jp.co.sint.database.SIDBUtil;
import jp.co.sint.tools.SICheckDataConf;
import jp.co.sint.tools.SICheckValid;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIURLParameter;

import org.apache.log4j.Category;


public class UIRegStorage extends SIStorage {
  // ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  public UIRegStorage() {
  }
  
  public UIRegStorage(String lStorageCode) {
    this.setStorageCode(lStorageCode);
  }
  
  /**
   * init 入力したデータから、このbeansを設定します。
   * 
   * @param HttpServletRequest
   * @param SIURLParameter
   * @return なし
   * @throws なし
   */
  public void init(HttpServletRequest lRequest, SIURLParameter lUrlParam) {
    super.init(lRequest, lUrlParam);
    this.setStorageCode((String) lUrlParam.getParam("storageCode"));
    this.setStorageName((String) lUrlParam.getParam("storageName"));
    this.setEmail((String) lUrlParam.getParam("email"));
    this.setComment((String) lUrlParam.getParam("comment"));
  }
  
  /**
   * validate
   * 入力したデータをチェックします。
   * 不正なデータがある場合、エラーをオブジェクトに格納します。
   * そのオブジェクトは、エラーメッセージとして画面に表示されます。
   * @param HttpServletRequest ，Connection , SIURLParameter
   * @return true:エラーがない false:エラーが１つ以上ある
   * @throws なし
   */
  public boolean validate(HttpServletRequest lRequest, Connection lConnection) {
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors = new SICustomErrors();
    StringBuffer lSqlBuf = new StringBuffer();
    
    SICheckValid.checkValid(errors, "預け先コード", this.getStorageCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "預け先コード", this.getStorageCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 3);
    SICheckValid.checkValid(errors, "預け先名称", this.getStorageName(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_CMDTYNAME_TYPE);
    SICheckValid.checkValid(errors, "預け先名称", this.getStorageName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    SICheckValid.checkValid(errors, "メールアドレス", this.getEmail(), SICheckDataConf.SICHECK_DATA_MAIL_TYPE);
    SICheckValid.checkValid(errors, "メールアドレス", this.getEmail(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 1, 128);
    
    if (SIConfig.SIEDIT_MODE_INSERT.equalsIgnoreCase(this.getEditModeTxt().trim())) {
      // 重複レコードの存在をチェックします
      lSqlBuf = new StringBuffer(" SELECT StorageCode FROM StorageTbl WHERE StorageCode=");
      lSqlBuf.append(SIDBUtil.SQL2Str(this.getStorageCode()));
      
      SICheckValid.checkDuplicate(errors, lConnection, "同じ預け先コード", lSqlBuf.toString());
    }
    
    return errors.isEmpty();
  }
}