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

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import jp.co.sint.basic.SILogin;
import jp.co.sint.beans.mallmgr.UICtgryCmdtyListCond;
import jp.co.sint.beans.mallmgr.UIRegCtgryCmdty;
import jp.co.sint.config.SIConfig;
import jp.co.sint.database.SIDBAccessException;
import jp.co.sint.database.SIDatabaseConnection;
import jp.co.sint.database.SIDeleteRec;
import jp.co.sint.database.SIDuplicateKeyException;
import jp.co.sint.database.SIInsertRec;
import jp.co.sint.servlet.SIServlet;
import jp.co.sint.tools.SICustomError;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIErrorFactory;
import jp.co.sint.tools.SIHTMLUtil;
import jp.co.sint.tools.SIStringUtil;
import jp.co.sint.tools.SIUtil;

import org.apache.log4j.Category;
import jp.co.sint.tools.SIURLParameter;//7.1.1 ST0236 追加

/**
 * @version $Id: SIRegCtgryCmdtySrv.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 15:24:22  Original
 */
public class SIRegCtgryCmdtySrv extends SIServlet{
  //ログ用のインスタンスの生成
  private static Category log=Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);

  /**
   * <b>doUpdate</b>
   * HTTP リクエストの処理
   * @param  request　リクエスト
   * @param  response
   * @return なし
   * @throws ServletException
   * @throws IOException
   */
  public void doUpdate(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    SILogin manLogin=SIHTMLUtil.getLogin(request);
    if (!manLogin.isLogin()){
      forwardKey(request,response,"webshop.jsp.manager.login");
      return;
    }

    HttpSession session=request.getSession(true);//セッションの取得
    SIDatabaseConnection databaseConnection=new SIDatabaseConnection();//DBへのコネクションの作成
	SIURLParameter urlParam = new SIURLParameter(request);//7.1.1 ST0236 追加
	
    try {
	  String actionName=this.getActionName(urlParam);//画面からのアクション	//7.1.1 ST0236 修正
	  String editMode=this.getEditMode(urlParam);//DBへの編集モード	//7.1.1 ST0236 修正

      UICtgryCmdtyListCond ctgryCmdtyList=new UICtgryCmdtyListCond();//カテゴリ商品のリスト
      UIRegCtgryCmdty regCtgryCmdty=new UIRegCtgryCmdty();//カテゴリ商品の編集

      if (SIConfig.SIACTION_LIST.equalsIgnoreCase(actionName)){//商品カテゴリ関連リスト
        ctgryCmdtyList=new UICtgryCmdtyListCond();
		ctgryCmdtyList.init(request, databaseConnection.getConnection(),urlParam);//7.1.1 ST0236 修正
        session.setAttribute(SIConfig.SISESSION_MAN_CTGRY_CMDTY_LIST_NAME,ctgryCmdtyList);
        forwardKey(request,response,"webshop.jsp.manager.ctgryCmdty.list");
      }else if (SIConfig.SIACTION_DELETE.equalsIgnoreCase(actionName)){//レコードの削除
        //データの取得
		ctgryCmdtyList.initDelete(request,urlParam);//7.1.1 ST0236 修正
        try {
          if(ctgryCmdtyList.validateDelete(request,databaseConnection.getConnection())){
            deleteTableData(databaseConnection.getConnection(),ctgryCmdtyList);
            request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME,
                                 SIErrorFactory.getErrorMsg("manager.message.success.delete"));
            try {databaseConnection.getConnection().commit();}catch(SQLException sqle){}
          }
        } catch (SIDBAccessException sqle) {
          try {databaseConnection.getConnection().rollback();}catch(SQLException ee){}
          sqle.printStackTrace();
          SICustomErrors errors=new SICustomErrors();
          errors.addError(new SICustomError("database.execute.error"));
          request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY,errors);
        }
        forwardKey(request,response,"webshop.jsp.manager.ctgryCmdty.list");
      }else{//DBへのデータ登録
        //データの取得
		regCtgryCmdty=new UIRegCtgryCmdty(request,urlParam);//7.1.1 ST0236 修正
        session.setAttribute(SIConfig.SISESSION_MAN_CTGRY_CMDTY_EDIT_NAME,regCtgryCmdty);
        //データのチェック
        if (regCtgryCmdty.validate(request, databaseConnection.getConnection())){
          try {
            insertTableData(databaseConnection.getConnection(),regCtgryCmdty);
            request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME,
                                 SIErrorFactory.getErrorMsg("manager.message.success.insert"));
            try {databaseConnection.getConnection().commit();}catch(SQLException sqle){}
            session.removeAttribute(SIConfig.SISESSION_MAN_CTGRY_CMDTY_EDIT_NAME);
          } catch (SIDuplicateKeyException sqle) {
            try {databaseConnection.getConnection().rollback();}catch(SQLException ee){}
            sqle.printStackTrace();
            SICustomErrors errors=new SICustomErrors();
            errors.addError(new SICustomError("database.insert.duplicate"));
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY,errors);
          } catch (SIDBAccessException sqle) {
            try {databaseConnection.getConnection().rollback();}catch(SQLException ee){}
            sqle.printStackTrace();
            SICustomErrors errors=new SICustomErrors();
            errors.addError(new SICustomError("database.execute.error"));
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY,errors);
          }
        }
        forwardKey(request,response,"webshop.jsp.manager.ctgryCmdty.list");
      }
    }catch (SQLException e){
      e.printStackTrace();
      throw new ServletException();
    }catch (NamingException e){
      e.printStackTrace();
      throw new ServletException();
    }finally{
      databaseConnection.close();
    }
  }

  /**
   * <b>insertTableData</b>
   * データベースに既存のレコードがあれば、削除します。同時に新規のレコードを作成します。
   * @param lConnection DBへのコネクション
   * @param cmdtyCtgryList 選択したカテゴリコード
   * @return なし
   * @throws SIDuplicateKeyException
   * @throws SIDBAccessException
   */
  public void insertTableData(Connection lConnection ,UIRegCtgryCmdty regCtgryCmdty) throws SIDuplicateKeyException,SIDBAccessException{
    //新しいレコードの作成
    SIInsertRec lInsertRec=new SIInsertRec("CmdtyCtgryMTbl");
    lInsertRec.add("ShopCode",regCtgryCmdty.getShopCode());
    lInsertRec.add("CmdtyCode",regCtgryCmdty.getCmdtyCode());
    lInsertRec.add("CtgryCode",regCtgryCmdty.getCtgryCode());
    lInsertRec.execute(lConnection);
  }

  /**
   * <b>deleteTableData</b>
   * 選択したカテゴリコードを商品カテゴリ関連テーブルから削除します。
   * @param lConnection DBへのコネクション
   * @param cmdtyCtgryList 選択したカテゴリコード
   * @return なし
   * @throws SIDBAccessException
   */
  public void deleteTableData(Connection lConnection ,UICtgryCmdtyListCond lCtgryCmdtyList) throws SIDBAccessException{
    SIDeleteRec lRec=new SIDeleteRec("CmdtyCtgryMTbl");
    String[] lShopCmdtyCodeList=lCtgryCmdtyList.getShopCmdtyCodeChk();
    String[] lShopCmdtyCode=new String[2];
    try {
      for (int ii=0;ii<lShopCmdtyCodeList.length ;ii++){
        if (SIUtil.isNotNull(lShopCmdtyCodeList[ii])){
          lRec=new SIDeleteRec("CmdtyCtgryMTbl");
          lShopCmdtyCode=SIStringUtil.split(lShopCmdtyCodeList[ii],SIConfig.SIWEBSHOPPING_TOKEN);
          lRec.addCondition("ShopCode",lShopCmdtyCode[0]);//ショップコード
          lRec.addCondition("CmdtyCode",lShopCmdtyCode[1]);//商品コード
          lRec.addCondition("CtgryCode",lCtgryCmdtyList.getCtgryCode());//カテゴリコード
          lRec.execute(lConnection);
        }
      }
    } catch (SIDuplicateKeyException e) {
      throw new SIDBAccessException(e);
    }
  }

  public void destroy() {
  }
}
