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

import java.sql.SQLException;

import javax.naming.NamingException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import jp.co.sint.basic.SIMallShop;
import jp.co.sint.basic.SIZipBasic;
import jp.co.sint.config.SIConfig;
import jp.co.sint.config.SIDBMultiConf;
import jp.co.sint.config.SIZipConf;
import jp.co.sint.database.SIDatabaseConnection;
import jp.co.sint.mdk.SIMDKConfig;
import jp.co.sint.tools.SIUtil;

/**
 * @version $Id: SIWebshopInitSrv.java,v 1.0 2003/12/03 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/12/03 15:26:27 Original
 */
public class SIWebshopInitSrv extends HttpServlet {
  ServletContext context;
  
  public void init(ServletConfig config) {
    boolean lResult = true;
    
    try {
      super.init(config);//
      context = config.getServletContext();
      SIConfig.SIOS_CURRENT_NAME = SIUtil.getOS();
      
      // DSNの取得
      String lInitVal = config.getInitParameter("DSN");
      if (lInitVal == null) lInitVal = SIDBMultiConf.SIDSN_POSTGRESQL_NAME;// default
      SIDBMultiConf.SIDSN_CURR_NAME = lInitVal;
      System.out.println("successful to initialize DSN parameter ...");
      
      // 7.1.1 ST0236 追加 ここから
      // アプリケーションサーバ名を取得
      lInitVal = config.getInitParameter("ServerType");
      if (lInitVal != null) SIConfig.SISERVER_TYPE = lInitVal;
      System.out.println("successful to initialize ServerType parameter ..." + SIConfig.SISERVER_TYPE);
      if (SIConfig.SISERVER_TYPE.equalsIgnoreCase("WebSphere")) {
        lInitVal = config.getInitParameter("MAIL");
        if (lInitVal != null) SIConfig.SIMAIL_DEFAULT_SESSION_NAME = lInitVal;
        System.out.println("successful to initialize MailSession parameter ..." + SIConfig.SIMAIL_DEFAULT_SESSION_NAME);
      }
      // 7.1.1 ST0236 追加 ここまで
      
      // 運営モードの更新
      SIDatabaseConnection databaseConnection = new SIDatabaseConnection();
      try {
        SIMallShop lMallShop = new SIMallShop();
        lMallShop.resetMall(databaseConnection.getConnection());
        SIConfig.SIMALL = lMallShop;
        SIConfig.SIRUNNING_MODE_CURRENT = Integer.parseInt(lMallShop.getRunningModeCode());
        SIConfig.SISSL_FLAG_CURRENT = Integer.parseInt(lMallShop.getSSLEnableFlg());
        SIDBMultiConf.SIDB_CURRENT_INX = Integer.parseInt(lMallShop.getDbType());
        System.out.println("successful to initialize RunMode parameter ...");
      } catch (NumberFormatException e) {
        lResult = false;
        e.printStackTrace();
        System.out.println("failure to initialize RunMode parameter ...");
      } catch (SQLException e) {
        lResult = false;
        e.printStackTrace();
        System.out.println("failure to initialize RunMode parameter ...");
      } catch (NamingException e) {
        lResult = false;
        e.printStackTrace();
        System.out.println("failure to initialize RunMode parameter ...");
      } finally {
        databaseConnection.close();
      }
      
      // SSLポートの設定
      lInitVal = config.getInitParameter("SSL");
      if (lInitVal != null) SIConfig.SISSL_PORT = lInitVal;
      // NonSSLポートの設定
      lInitVal = config.getInitParameter("PORT");
      if (lInitVal != null) SIConfig.SINON_SSL_PORT = lInitVal;
      System.out.println("successful to initialize SSL parameter ...");
      
      // LHAコマンドの設定
      lInitVal = config.getInitParameter("LHA");
      if (lInitVal != null) SIConfig.SIEXTRACT_LHA_COMMAND = lInitVal;
      // ZIP解凍コマンドの設定
      lInitVal = config.getInitParameter("ZIP");
      if (lInitVal != null) SIConfig.SIEXTRACT_ZIP_COMMAND = lInitVal;
      System.out.println("successful to initialize Extract parameter ...");
      
      // MDK設定ファイルフォルダの設定
      lInitVal = config.getInitParameter("MDKConfigFile");
      if (lInitVal != null) SIMDKConfig.MDK_CONFIG_FILE = lInitVal;
      // MDKテンプレートファイルフォルダの設定
      lInitVal = config.getInitParameter("MDKTemplateFile");
      if (lInitVal != null) SIMDKConfig.MDK_TEMPLATE_DIR = lInitVal;
      SIDBMultiConf.init();
      System.out.println("successful to initialize MDK parameter ...");
      
      // 郵便番号ソフトの設定
      lInitVal = config.getInitParameter("ZipDicDir");// zipdicディレクトリまでのフォルダ
      try {
        if (lInitVal != null) {
          SIZipConf.setZipDicDir(lInitVal);
          System.out.println("successful to initialize ZipDicDir parameter ...");
        } else {
          System.out.println("not set ZipDicDir parameter ...");
        }
        if (SIZipConf.isExist()) {
          SIConfig.SIZIP = new SIZipBasic(SIZipConf.getZipDicDir());
          System.out.println("successful to load zip class ...");
        } else {
          System.out.println("not load zip class ...");
        }
      } catch (ClassNotFoundException e1) {
        lResult = false;
        e1.printStackTrace();
        System.out.println("failure to initialize ZipDic ...");
      }
      // 7.3.0 ST2022 追加 ここから
      // Administratorアカウントの設定
      lInitVal = config.getInitParameter("AdimistratorAcount");
      if (lInitVal != null) SIConfig.ADIMISTRATOR_ACOUNT = lInitVal;
      // 7.3.0 ST2022 追加 ここまで
      lInitVal = config.getInitParameter("CmdtyAmountEnable");// 商品件数の表示かどうか
      if (lInitVal != null && (lInitVal.trim().equalsIgnoreCase("true") || lInitVal.trim().equalsIgnoreCase("yes"))) {
        SIConfig.SICMDTY_AMOUNT_ENABLE = true;
      } else if (lInitVal != null && (lInitVal.trim().equalsIgnoreCase("false") || lInitVal.trim().equalsIgnoreCase("no"))) {
        SIConfig.SICMDTY_AMOUNT_ENABLE = false;
      }
      System.out.println("successful to initialize CmdtyAmountEnable parameter ..." + SIConfig.SICMDTY_AMOUNT_ENABLE);
      
      /*
       * 7.2.0 ST0301 削除 ここから //7.1.1 ST0193 追加 ここから lInitVal=config.getInitParameter("AdviceEnable");//各カテゴリのディフォルトを「おすすめ」に表示するかどうか if
       * (lInitVal!=null&&(lInitVal.trim().equalsIgnoreCase("true")||lInitVal.trim().equalsIgnoreCase("yes"))){ SIConfig.SIADVICE_ENABLE =true; }else if
       * (lInitVal!=null&&(lInitVal.trim().equalsIgnoreCase("false")||lInitVal.trim().equalsIgnoreCase("no"))){ SIConfig.SIADVICE_ENABLE =false; } System.out.println("successful to
       * initialize AdviceEnable parameter ..."+SIConfig.SIADVICE_ENABLE); //7.1.1 ST0193 追加 ここまで 7.2.0 ST0301 削除 ここまで
       */
      // 7.3.0 ST2030 追加 ここから
      lInitVal = config.getInitParameter("MinimumPassword");// ユーザパスワードの最小値
      if (lInitVal != null) {
        if (Integer.parseInt(lInitVal) <= 0) {
          lInitVal = "1";
        } else if (Integer.parseInt(lInitVal) >= 16) {
          lInitVal = "16";
        }
        SIConfig.SIMinimumPassword = Integer.parseInt(lInitVal);
      }
      // 7.3.0 ST2030 追加 ここまで
      // 7.3.0 ST2028 追加 ここから
      lInitVal = config.getInitParameter("LoginErrorCount"); // ログイン試行回数
      if (lInitVal != null) {
        SIConfig.LoginCount = Integer.parseInt(lInitVal);
      }
      // 7.3.0 ST2028 追加 ここまで
      lInitVal = config.getInitParameter("LoginCtgry"); // ログイン必須カテゴリ
      if (lInitVal != null) {
        SIConfig.LOGINCTGRY = lInitVal.split(",");
      }
      System.out.println("successful to initialize LoginCtgry parameter ..." + SIConfig.LOGINCTGRY);
      lInitVal = config.getInitParameter("MakerCtgry"); // ブランド検索カテゴリ
      if (lInitVal != null) {
        SIConfig.MAKERCTGRY = lInitVal.split(",");
      }
      System.out.println("successful to initialize MakerCtgry parameter ...");
      lInitVal = config.getInitParameter("InvisibleCtgrys"); // 非表示カテゴリ
      if (SIUtil.isNotNull(lInitVal)) {
        SIConfig.INVISIBLECTGRYS = lInitVal.split(",");
      }
      System.out.println("successful to initialize InvisibleCtgry parameter ...");
      lInitVal = config.getInitParameter("EditableCtgrys"); // 登録可能カテゴリ
      if (SIUtil.isNotNull(lInitVal)) {
        SIConfig.EDITABLECTGRYS = lInitVal.split(",");
      }
      System.out.println("successful to initialize EditableCtgry parameter ...");
      // EDBTG005-00 nagayoshi add start
      lInitVal = config.getInitParameter("spDirectoryPath"); // SPページ物理フォルダパス
      if (SIUtil.isNotNull(lInitVal)) {
        SIConfig.SP_DIRECTORY_PATH = lInitVal;
      }
      System.out.println("successful to initialize spDirectoryPath parameter ...");
      // EDBTG005-00 nagayoshi add end
      if (lResult) System.out.println("successful to initialize webshoping ...");
      else System.out.println("failure to initialize webshoping ...");
    } catch (ServletException e) {
      e.printStackTrace();
      System.out.println("failure to initialize webshoping ...");
    }
  }
}
