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

import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.SQLException;
import java.util.HashMap;

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

import jp.co.sint.config.SIConfig;
import jp.co.sint.database.SIDatabaseConnection;
import jp.co.sint.tools.SICustomError;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIErrorFactory;
import jp.co.sint.tools.SIFileUploadException;
import jp.co.sint.tools.SIUtil;

import org.apache.log4j.Category;

/**
 * @author nishizawa
 *
 */
public class SIBGFileUploadSrv extends SIFileUploadSrv {
  //ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);

  /* (非 Javadoc)
   * @see jp.co.sint.upload.SIFileUploadSrv#doUpdate(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
   */
  public void doUpdate(HttpServletRequest request, HttpServletResponse response)
      throws FileNotFoundException, ServletException, IOException {

    String action = null;
    SIDatabaseConnection databaseConnection = new SIDatabaseConnection();//DBへのコネクションの作成

    try {
      action = super.doFileUploadBG(request, response, new HashMap(), databaseConnection.getConnection());

      // 成功の場合
      request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME,
          SIErrorFactory.getErrorMsg("manager.message.success.uploadfilectrl",
              action.equals(SIConfig.SIACTION_UPLOAD) ? "アップロード" :
                  action.equals(SIConfig.SIACTION_DELETE) ? "削除" :
                      action.equals(SIConfig.SIACTION_DOWNLOAD) ? "ダウンロード" : ""));

    } catch (FileNotFoundException e) {

      request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME,
          SIErrorFactory.getErrorMsg("manager.message.failure.file.exist"));
      log.warn(e);

    } catch (SQLException e) {

      SICustomErrors errors = new SICustomErrors();
      errors.addError(new SICustomError("manager.message.freeword", "DBへのアクセス中にエラーが発生しました。"));
      request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, errors.getErrorMsg());
      log.warn(e);

    } catch (SIFileUploadException e) {

      SICustomErrors errors = new SICustomErrors();
      errors.addError(new SICustomError("manager.message.freeword", e.getMessage()));
      request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, errors.getErrorMsg());
      log.warn(e);

    } catch (NamingException e) {

      e.printStackTrace();
      log.warn(e);
      throw new ServletException();

    } catch (Exception e) {

      e.printStackTrace();
      log.warn(e);
      throw new ServletException();

    } finally {
      databaseConnection.close();
    }

    if (action == null || !action.equals(SIConfig.SIACTION_DOWNLOAD)) {// ダウンロード済みの場合は例外

      String fileUploadFlg = getMultiParameter(request, "fileUploadFlg");
      if (SIUtil.isNotNull(fileUploadFlg) && fileUploadFlg.equals(SIConfig.BGUPLOAD_FILE_UPLOAD_FLG_SETCMDTY)) {
        // セット品
        forwardKey(request, response, "webshop.jsp.manager.cmdty.set.edit");
      } else {
        // 通常品
        forwardKey(request, response, "webshop.jsp.manager.cmdty.indivdual");
      }
    }
  }

}