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

import java.io.File;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.sql.Connection;
import java.util.*;


import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.DefaultFileItem;

import jp.co.sint.basic.SIMallShop;
import jp.co.sint.basic.SIUserInfo;
import jp.co.sint.beans.front.UIMain;
import jp.co.sint.beans.front.UIPurchaseEdit;
import jp.co.sint.beans.mallmgr.UIRegPurchase;
import jp.co.sint.config.SIConfig;
import jp.co.sint.database.SIDatabaseConnection;
import jp.co.sint.servlet.SIServlet;
import jp.co.sint.tools.SICustomError;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIDateTime;
import jp.co.sint.tools.SIHTMLUtil;
import jp.co.sint.tools.SIUtil;
import jp.co.sint.tools.SIURLParameter;
import jp.co.sint.tools.SIFileExistException;
import jp.co.sint.mail.*;

import org.apache.log4j.Category;

/**
 * @version $Id: SIPurchaseSrv.java,v 1.0 2005/08/26 Exp $
 * @author  Fujita Jun
 * <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>
 * Fujita Jun   2005/08/26 13:29:05  Original
 */
public class SIPurchaseSrv 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 {
    HttpSession session=request.getSession(true);//セッションの取得
    SIDatabaseConnection databaseConnection=new SIDatabaseConnection();//DBへのコネクションの作成
    SIURLParameter urlParam = new SIURLParameter(request);
    try {
      Connection lConnection=databaseConnection.getConnection();
      
      String actionName=this.getActionName(urlParam);//画面からのアクション
      
      if (this.getServletPath(request).equals("/purchase")){//買取希望入力シート
        if (SIUtil.isNull(actionName)){
          UIPurchaseEdit purchase=new UIPurchaseEdit();
          purchase.init(request,urlParam);
          session.setAttribute(SIConfig.SISESSION_PURCHASE_EDIT_NAME,purchase);
          forwardKey(request,response,"webshop.jsp.front.purchase.edit1");
        }else if(SIConfig.SIACTION_RESET.equalsIgnoreCase(actionName)) { //リセット
          session.removeAttribute(SIConfig.SISESSION_PURCHASE_EDIT_NAME);
          forwardKey(request,response,"webshop.jsp.front.purchase.edit1");
        }else if(actionName.equalsIgnoreCase(SIConfig.SIACTION_REMODIFY)){
          UIPurchaseEdit purchase=new UIPurchaseEdit();
          purchase.init(request,urlParam);
          session.setAttribute(SIConfig.SISESSION_PURCHASE_EDIT_NAME2,purchase);
          session.setAttribute(SIConfig.SISESSION_PURCHASE_ADDRESS_NAME,purchase);
          forwardKey(request,response,"webshop.jsp.front.purchase.edit1");
        }
      }else if (this.getServletPath(request).equals("/purchase2")){//買取希望 お客様情報入力
        //顧客情報取得
        SIUserInfo lUserInfo=SIHTMLUtil.getUserInfo(request);
        if (lUserInfo.isLogin(request)&&!actionName.equalsIgnoreCase(SIConfig.SIACTION_REMODIFY)){
          UIPurchaseEdit purchaseAddress=new UIPurchaseEdit();
          purchaseAddress.getRegCust().setCustCode(SIHTMLUtil.getUserInfo(request).getCustCode());
          purchaseAddress.reset(lConnection);
          session.setAttribute(SIConfig.SISESSION_PURCHASE_ADDRESS_NAME,purchaseAddress);
        }
        if (SIUtil.isNull(actionName)){
          forwardKey(request,response,"webshop.jsp.front.purchase.edit2");
        }else if(actionName.equalsIgnoreCase(SIConfig.SIACTION_NEXT)){
          UIPurchaseEdit purchase=new UIPurchaseEdit();
          try{
            initPurchaseMail(request,response,new HashMap(),purchase);
          }catch(Exception e){
            e.printStackTrace();
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY,new SICustomError("input.data.purchase.file.failed"));
          }
          //purchase.init(request,urlParam);
          session.setAttribute(SIConfig.SISESSION_PURCHASE_EDIT_NAME,purchase);
          if (purchase.validate1(request,lConnection)){
            forwardKey(request,response,"webshop.jsp.front.purchase.edit2");
          }else{
            purchase.deletePurchaseImage();
            session.setAttribute(SIConfig.SISESSION_PURCHASE_EDIT_NAME,purchase);
            forwardKey(request,response,"webshop.jsp.front.purchase.edit1");
          }       
        }else if(actionName.equalsIgnoreCase(SIConfig.SIACTION_REGIST)){
          UIPurchaseEdit purchase=new UIPurchaseEdit();
          try{
            initPurchaseMail(request,response,new HashMap(),purchase);
          }catch(Exception e){
            e.printStackTrace();
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY,new SICustomError("input.data.purchase.file.failed"));
          }
          //purchase.init(request,urlParam);
          session.setAttribute(SIConfig.SISESSION_PURCHASE_EDIT_NAME,purchase);
          if (purchase.validate1(request,lConnection)){
//            String lUrl="";
//            String lCtc="ctc="+SIHTMLUtil.URLEncode(purchase.getCtgryCodeTxt());
//            lUrl=SIURLMap.getUrl("webshop.servlet.front.user.login")+"?"+lCtc+"&nid="+SIURLMap.getUrl("webshop.servlet.front.purchase2")+"?"+lCtc;
//            redirectHttps(request,response,lUrl);  
              forwardKey(request,response,"webshop.jsp.front.purchase.edit2");//7.3.0 PI-NES0501  
          }else{
            purchase.deletePurchaseImage();
            session.setAttribute(SIConfig.SISESSION_PURCHASE_EDIT_NAME,purchase);
            forwardKey(request,response,"webshop.jsp.front.purchase.edit1");    
          }
        }else if(actionName.equalsIgnoreCase(SIConfig.SIACTION_NOTREGIST)){
          UIPurchaseEdit purchase=new UIPurchaseEdit();
          try{
            initPurchaseMail(request,response,new HashMap(),purchase);
          }catch(Exception e){
            e.printStackTrace();
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY,new SICustomError("input.data.purchase.file.failed"));
          }
          //purchase.init(request,urlParam);
          session.setAttribute(SIConfig.SISESSION_PURCHASE_EDIT_NAME,purchase);
          if (purchase.validate1(request,lConnection)){
            forwardKey(request,response,"webshop.jsp.front.purchase.edit2");
          }else{
            purchase.deletePurchaseImage();
            session.setAttribute(SIConfig.SISESSION_PURCHASE_EDIT_NAME,purchase);
            forwardKey(request,response,"webshop.jsp.front.purchase.edit1"); 
          }
        }else if(actionName.equalsIgnoreCase(SIConfig.SIACTION_RESET)) { //リセット
          session.removeAttribute(SIConfig.SISESSION_PURCHASE_EDIT_NAME2);
          session.removeAttribute(SIConfig.SISESSION_PURCHASE_ADDRESS_NAME);
          forwardKey(request,response,"webshop.jsp.front.purchase.edit2");
        }else if(actionName.equalsIgnoreCase(SIConfig.SIACTION_REMODIFY)){
          forwardKey(request,response,"webshop.jsp.front.purchase.edit2");
        }else if (actionName.equalsIgnoreCase(SIConfig.SIACTION_ZIPDIC)){//郵便番号辞書ソフトから県名などを検索
          UIPurchaseEdit purchase=new UIPurchaseEdit();
          purchase.init(request,urlParam);
          session.setAttribute(SIConfig.SISESSION_PURCHASE_EDIT_NAME2,purchase);
          session.setAttribute(SIConfig.SISESSION_PURCHASE_ADDRESS_NAME,purchase);
          forwardKey(request,response,"webshop.jsp.front.purchase.edit2");
        }else if (actionName.equalsIgnoreCase(SIConfig.SIACTION_ZIPDIC2)){//郵便番号辞書ソフトから県名などを検索
          UIPurchaseEdit purchase=new UIPurchaseEdit();
          purchase.init(request,urlParam);
          session.setAttribute(SIConfig.SISESSION_PURCHASE_EDIT_NAME2,purchase);
          session.setAttribute(SIConfig.SISESSION_PURCHASE_ADDRESS_NAME,purchase);
          forwardKey(request,response,"webshop.jsp.front.purchase.edit2");
        }
      }else if(this.getServletPath(request).equals("/purchasecon")){
        if (actionName.equalsIgnoreCase(SIConfig.SIACTION_CON)){
          UIPurchaseEdit purchase=new UIPurchaseEdit();
          purchase.init(request,urlParam);
          session.setAttribute(SIConfig.SISESSION_PURCHASE_EDIT_NAME2,purchase);
          session.setAttribute(SIConfig.SISESSION_PURCHASE_ADDRESS_NAME,purchase);
          if (purchase.validate2(request,lConnection)){
            forwardKey(request,response,"webshop.jsp.front.purchase.con");
          }else{
            forwardKey(request,response,"webshop.jsp.front.purchase.edit2");
          }
        }else if(actionName.equalsIgnoreCase(SIConfig.SIACTION_CONFIRM)){
          UIPurchaseEdit purchase1 = (UIPurchaseEdit)session.getAttribute(SIConfig.SISESSION_PURCHASE_EDIT_NAME);
          UIPurchaseEdit purchase2 = (UIPurchaseEdit)session.getAttribute(SIConfig.SISESSION_PURCHASE_EDIT_NAME2);
          UIPurchaseEdit purchase3 = (UIPurchaseEdit)session.getAttribute(SIConfig.SISESSION_PURCHASE_ADDRESS_NAME);
          
          UIRegPurchase regPurchase1=purchase1.getRegPurchase();
          UIRegPurchase regPurchase2=purchase2.getRegPurchase();
          UIRegPurchase regPurchase3=purchase3.getRegPurchase();
          if(this.sendMail(request,lConnection,regPurchase1, regPurchase2, regPurchase3)){
            UIMain mainID = (UIMain) session.getAttribute(SIConfig.SISESSION_MAIN_LIST_NAME);
            if(mainID==null || SIUtil.isNull(mainID.getDispModeTxt())){
              forwardKey(request, response, "webshop.jsp.front.main");
            }else if(mainID.getDispModeTxt().equals("0")){
              forwardKey(request, response, "webshop.jsp.front.main0");
            }else if(mainID.getDispModeTxt().equals("1")){
              forwardKey(request, response, "webshop.jsp.front.main1");
            }
          }else{
            SICustomErrors errors = new SICustomErrors();
            errors.addError(new SICustomError("manager.message.failure.purchase"));
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            forwardKey(request,response,"webshop.jsp.front.purchase.con");  
          }
        }
      }
    }catch(Exception e){
      e.printStackTrace();
      throw new ServletException();
    }finally{
      databaseConnection.close();
    }
  }

  public boolean sendMail(HttpServletRequest request,Connection connection, UIRegPurchase regPurchase1, UIRegPurchase regPurchase2,
    UIRegPurchase regPurchase3) {
    StringBuffer lMailBuf = null;
    String lReserveChangeDateTime = null;

    //送信先メールアドレス取得
    SIMallShop mall = new SIMallShop();
    mall.resetMall(connection);

    String to = mall.getEmail();             //あて先
    String from = regPurchase3.getEmail();   //送信元
    String subject = "買取希望メールです。";  //件名

    lMailBuf = new StringBuffer();
    lMailBuf.append("\n<><><><><><><><><><><><><><><><><><><><><><><><><>");
    lMailBuf.append("\n     BEAUTY GARAGE ： 買取希望");
    lMailBuf.append("\n<><><><><><><><><><><><><><><><><><><><><><><><><>");
    lMailBuf.append("\n").append(regPurchase3.getCustName()).append("様より");
    lReserveChangeDateTime = (new SIDateTime()).getFullDateTime();
    lMailBuf.append("\n"+lReserveChangeDateTime);
    lMailBuf.append("\n下記の内容でお問い合わせをお受けいたしました。");
    lMailBuf.append("\n");
    lMailBuf.append("\n--------------------------------------------------");
    if(!regPurchase1.getCmdtyName1().equals("")){
      lMailBuf.append("\n[1]");
      lMailBuf.append("\n 商品名　　　　：").append(regPurchase1.getCmdtyName1());
      lMailBuf.append("\n 購入時期　　　：").append(regPurchase1.getPurchaseTime1());
      lMailBuf.append("\n 使用年数　　　：").append(regPurchase1.getUsedYear1());
      lMailBuf.append("\n 数量　　　　　：").append(regPurchase1.getAmount1());
      lMailBuf.append("\n");
    }
    if(!regPurchase1.getCmdtyName2().equals("")){
      lMailBuf.append("\n[2]");
      lMailBuf.append("\n 商品名　　　　：").append(regPurchase1.getCmdtyName2());
      lMailBuf.append("\n 購入時期　　　：").append(regPurchase1.getPurchaseTime2());
      lMailBuf.append("\n 使用年数　　　：").append(regPurchase1.getUsedYear2());
      lMailBuf.append("\n 数量　　　　　：").append(regPurchase1.getAmount2());
      lMailBuf.append("\n");
    }
    if(!regPurchase1.getCmdtyName3().equals("")){
      lMailBuf.append("\n[3]");
      lMailBuf.append("\n 商品名　　　　：").append(regPurchase1.getCmdtyName3());
      lMailBuf.append("\n 購入時期　　　：").append(regPurchase1.getPurchaseTime3());
      lMailBuf.append("\n 使用年数　　　：").append(regPurchase1.getUsedYear3());
      lMailBuf.append("\n 数量　　　　　：").append(regPurchase1.getAmount3());
      lMailBuf.append("\n");
    }
    if(!regPurchase1.getCmdtyName4().equals("")){
      lMailBuf.append("\n[4]");
      lMailBuf.append("\n 商品名　　　　：").append(regPurchase1.getCmdtyName4());
      lMailBuf.append("\n 購入時期　　　：").append(regPurchase1.getPurchaseTime4());
      lMailBuf.append("\n 使用年数　　　：").append(regPurchase1.getUsedYear4());
      lMailBuf.append("\n 数量　　　　　：").append(regPurchase1.getAmount4());
      lMailBuf.append("\n");
    }
    if(!regPurchase1.getCmdtyName5().equals("")){
      lMailBuf.append("\n[5]");
      lMailBuf.append("\n 商品名　　　　：").append(regPurchase1.getCmdtyName5());
      lMailBuf.append("\n 購入時期　　　：").append(regPurchase1.getPurchaseTime5());
      lMailBuf.append("\n 使用年数　　　：").append(regPurchase1.getUsedYear5());
      lMailBuf.append("\n 数量　　　　　：").append(regPurchase1.getAmount5());
      lMailBuf.append("\n");
    }
    lMailBuf.append("\n 買取希望時期　　：").append(regPurchase1.getPurchaseHopeTime());
    lMailBuf.append("\n【詳細コメント】");
    lMailBuf.append("\n").append(regPurchase1.getDetails());
    lMailBuf.append("\n");
    lMailBuf.append("\n■お名前(漢字)　　　：").append(regPurchase3.getCustName());
    lMailBuf.append("\n■お名前(フリガナ)　：").append(regPurchase3.getCustPronName());
    lMailBuf.append("\n■郵便番号　　　　　：").append(regPurchase3.getPostCode1()).append(" - ").append(regPurchase3.getPostCode2());
    lMailBuf.append("\n■都道府県　　　　　：").append(regPurchase3.getAddress1());
    lMailBuf.append("\n■ご住所　　　　　　：").append(regPurchase3.getAddress2()).append("　").append(regPurchase3.getAddress3());
    lMailBuf.append("\n■連絡先電話番号１　：").append(regPurchase3.getTel1());
    lMailBuf.append("\n■連絡先電話番号２　：").append(regPurchase3.getTel2());
    lMailBuf.append("\n■連絡先FAX番号 　　：").append(regPurchase3.getFax());
    lMailBuf.append("\n■E-mail　　　　　　：").append(regPurchase3.getEmail());
    lMailBuf.append("\n");
    if(!regPurchase2.getPostCodeOther1().equals("")){
      lMailBuf.append("\n買取商品所在地");
      lMailBuf.append("\n■郵便番号　　　　　　：").append(regPurchase2.getPostCodeOther1()).append(" - ").append(regPurchase2.getPostCodeOther2());
      lMailBuf.append("\n■都道府県　　　　　　：").append(regPurchase2.getAddressOther1());
      lMailBuf.append("\n■ご住所　　　　　　　：").append(regPurchase2.getAddressOther2()).append("　").append(regPurchase2.getAddressOther3());
      lMailBuf.append("\n■電話番号　　　　　　：").append(regPurchase2.getTelOther1());
    }

    try{
      //SMTPサーバーの指定
      Properties props = System.getProperties();
      props.put("mail.smtp.host",SIMailUtil.getMailHost());
      Session session = Session.getDefaultInstance(props,null);
      MimeMessage msg = new MimeMessage(session);
      log.debug("mail.smtp.host:"+SIMailUtil.getMailHost());

      //あて先
      InternetAddress toList[] = InternetAddress.parse(to,false);
      msg.addRecipients(MimeMessage.RecipientType.TO,toList);

      //送信元
      InternetAddress fromAddress = new InternetAddress(from);
      msg.setFrom(fromAddress);
      msg.setSentDate(new Date());

      //件名
      msg.setSubject(subject,"ISO-2022-JP");

      //本体
      MimeMultipart mm = new MimeMultipart();

      //本文
      MimeBodyPart mbText = new MimeBodyPart();
      mbText.setText(lMailBuf.toString(),"ISO-2022-JP");
      mm.addBodyPart(mbText);  

      //添付ファイル
      if(!regPurchase1.getPictureUrl1().equals("")){
        String file1 = regPurchase1.getPictureUrl1();   //添付ファイル
        String filename1 = "syouhin1.jpg";              //ファイル名

        MimeBodyPart mbFile1 = new MimeBodyPart();
        FileDataSource fds1 = new FileDataSource(file1);
        DataHandler dh1 = new DataHandler(fds1);
        mbFile1.setDataHandler(dh1);
        mbFile1.setFileName(MimeUtility.encodeWord(filename1));
        mm.addBodyPart(mbFile1);
      }
      if(!regPurchase1.getPictureUrl2().equals("")){
        String file2 = regPurchase1.getPictureUrl2();   //添付ファイル
        String filename2 = "syouhin2.jpg";              //ファイル名

        MimeBodyPart mbFile2 = new MimeBodyPart();
        FileDataSource fds2 = new FileDataSource(file2);
        DataHandler dh1 = new DataHandler(fds2);
        mbFile2.setDataHandler(dh1);
        mbFile2.setFileName(MimeUtility.encodeWord(filename2));
        mm.addBodyPart(mbFile2);
      }
      if(!regPurchase1.getPictureUrl3().equals("")){
        String file3 = regPurchase1.getPictureUrl3();   //添付ファイル
        String filename3 = "syouhin3.jpg";              //ファイル名

        MimeBodyPart mbFile3 = new MimeBodyPart();
        FileDataSource fds3 = new FileDataSource(file3);
        DataHandler dh3 = new DataHandler(fds3);
        mbFile3.setDataHandler(dh3);
        mbFile3.setFileName(MimeUtility.encodeWord(filename3));
        mm.addBodyPart(mbFile3);
      }
      if(!regPurchase1.getPictureUrl4().equals("")){
        String file4 = regPurchase1.getPictureUrl4();   //添付ファイル
        String filename4 = "syouhin4.jpg";              //ファイル名

        MimeBodyPart mbFile4 = new MimeBodyPart();
        FileDataSource fds4 = new FileDataSource(file4);
        DataHandler dh4 = new DataHandler(fds4);
        mbFile4.setDataHandler(dh4);
        mbFile4.setFileName(MimeUtility.encodeWord(filename4));
        mm.addBodyPart(mbFile4);
      }
      if(!regPurchase1.getPictureUrl5().equals("")){
        String file5 = regPurchase1.getPictureUrl5();   //添付ファイル
        String filename5 = "syouhin5.jpg";              //ファイル名

        MimeBodyPart mbFile5 = new MimeBodyPart();
        FileDataSource fds5 = new FileDataSource(file5);
        DataHandler dh5 = new DataHandler(fds5);
        mbFile5.setDataHandler(dh5);
        mbFile5.setFileName(MimeUtility.encodeWord(filename5));
        mm.addBodyPart(mbFile5);
      }

      msg.setContent(mm);

      // エンコードタイプ明示指定
      msg.addHeader("Content-Transfer-Encoding", "7bit");
      
      //送信
      Transport.send(msg);
      log.info("send mail ok!!");

    }catch(Exception e){
      e.printStackTrace();
      return false;
    }
    UIPurchaseEdit purchase=new UIPurchaseEdit();
    purchase.deletePurchaseImage(regPurchase1);//添付画像削除
    return true;
  }
  
  public String[] getImageTemp(HttpServletRequest request) throws ServletException, IOException {
    String[] filename = new String[5];
    String path=getServletContext().getRealPath("work/temp");
    DiskFileUpload diskFile=new DiskFileUpload();
    int count=0;
    diskFile.setSizeMax(-1);                // アップロードファイルの最大サイズ（-1は無限）
    diskFile.setSizeThreshold(1024);        // バッファサイズ
    diskFile.setRepositoryPath(path);       // 一時ファイルの保存先フォルダ
    diskFile.setHeaderEncoding("MS932");    // ヘッダの文字エンコーディング
    try {
      // アップロードされたファイル情報をFileItemオブジェクトのリストとして取得
      List objLst=diskFile.parseRequest(request);
      Iterator objItr=objLst.iterator();
      //リストから順にファイルデータを取り出し「/work/temp/purchaseimageX.jpg」の形式でアップロードファイルを保存
      while(objItr.hasNext()){
        FileItem objFi=(FileItem)objItr.next();
        if(!objFi.isFormField()){
          String name=path+"/purchaseimage"+new SIDateTime().getDateTimeString()+count+".jpg";
          objFi.write(new File(name));
          filename[count]=name;
          count++;
        }
      }
    } catch (FileUploadException e) {
      e.printStackTrace();
    } catch (Exception e) {
      e.printStackTrace();
    }
    return filename;
  }

  /**
   * <b>initAndValidatePurchaseMail</b> サーバーにファイルをアップロードします。
   * @param request リクエスト
   * @param response
   * @param lparaMap
   * @throws ServletException
   * @throws IOException
   * @throws FileUploadException
   * @throws SIFileExistException
   */
  public void initPurchaseMail(HttpServletRequest request, HttpServletResponse response,HashMap lParaMap,UIPurchaseEdit purchase)
      throws ServletException, IOException, FileUploadException, SIFileExistException, FileNotFoundException {
    HashMap lMultiMap = new HashMap();
    String lDestPath = "";
    SIDateTime lDateTime = new SIDateTime();
    boolean overwrite = true;
    File lFullDestFile = null;
    DiskFileUpload diskFile = new DiskFileUpload();
    String lMapVal = "";

    request.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors = new SICustomErrors();

    //serverの文字コード設定
    ResourceBundle rb = ResourceBundle.getBundle(SIConfig.SICONFIG_ENCODING_FILE_NAME);
    String clientCode = rb.getString("clientCode");
    //アップロード用のファイルリストのデータの取得
    DefaultFileItem[] fileItemList = (DefaultFileItem[]) (diskFile.parseRequest(request).toArray(new DefaultFileItem[0]));

    for (int ii = 0; ii < fileItemList.length; ii++) {
      if (fileItemList[ii].isFormField()) {
        byte tempByte[] = fileItemList[ii].get();
        String str = new String(tempByte, clientCode);
        lMultiMap.put(fileItemList[ii].getFieldName(), str);
      }
    }
    
    UIRegPurchase regPurchase = purchase.getRegPurchase();
    
    regPurchase.setCmdtyName1((String)lMultiMap.get("cmdtyName1"));
    regPurchase.setCmdtyName2((String)lMultiMap.get("cmdtyName2"));
    regPurchase.setCmdtyName3((String)lMultiMap.get("cmdtyName3"));
    regPurchase.setCmdtyName4((String)lMultiMap.get("cmdtyName4"));
    regPurchase.setCmdtyName5((String)lMultiMap.get("cmdtyName5"));
    regPurchase.setPurchaseTime1((String)lMultiMap.get("purchaseTime1"));
    regPurchase.setPurchaseTime2((String)lMultiMap.get("purchaseTime2"));
    regPurchase.setPurchaseTime3((String)lMultiMap.get("purchaseTime3"));
    regPurchase.setPurchaseTime4((String)lMultiMap.get("purchaseTime4"));
    regPurchase.setPurchaseTime5((String)lMultiMap.get("purchaseTime5"));
    regPurchase.setUsedYear1((String)lMultiMap.get("usedYear1"));
    regPurchase.setUsedYear2((String)lMultiMap.get("usedYear2"));
    regPurchase.setUsedYear3((String)lMultiMap.get("usedYear3"));
    regPurchase.setUsedYear4((String)lMultiMap.get("usedYear4"));
    regPurchase.setUsedYear5((String)lMultiMap.get("usedYear5"));
    regPurchase.setAmount1((String)lMultiMap.get("amount1"));
    regPurchase.setAmount2((String)lMultiMap.get("amount2"));
    regPurchase.setAmount3((String)lMultiMap.get("amount3"));
    regPurchase.setAmount4((String)lMultiMap.get("amount4"));
    regPurchase.setAmount5((String)lMultiMap.get("amount5"));
    regPurchase.setPurchaseHopeTime((String)lMultiMap.get("purchaseHopeTime"));
    regPurchase.setDetails((String)lMultiMap.get("details"));
    
    // thresholdのデータの設定
    lMapVal = (String) lMultiMap.get("threshold");
    if (SIUtil.isNull(lMapVal)) lMapVal = (String) lParaMap.get("threshold");
    if (SIUtil.isNull(lMapVal)) lMapVal = getMapping("threshold");

    if (SIUtil.isNotNull(lMapVal)) {
      try {
        int sizeThreshold = Integer.parseInt(lMapVal);
        diskFile.setSizeThreshold(sizeThreshold);
      } catch (Exception e) {
        log.error(e);
        e.printStackTrace();
      }
    }

    //maxのデータの設定
    lMapVal = (String) lMultiMap.get("max");
    if (SIUtil.isNull(lMapVal)) lMapVal = getMapping("max");
    if (SIUtil.isNull(lMapVal)) lMapVal = (String) lParaMap.get("max");
    if (SIUtil.isNotNull(lMapVal)) {
      try {
        long maxSize = Integer.parseInt(lMapVal);
        diskFile.setSizeMax(maxSize);
      } catch (Exception e) {
        log.error(e);
        e.printStackTrace();
      }
    }

    //overwriteのデータの設定
    lMapVal = (String) lMultiMap.get("overwrite");
    if (SIUtil.isNull(lMapVal))
      lMapVal = (String) lParaMap.get("overwrite");
    if (SIUtil.isNull(lMapVal))
      lMapVal = getMapping("overwrite");
    if (SIUtil.isNotNull(lMapVal)) {
      try {
        overwrite = Boolean.valueOf(lMapVal).booleanValue();
      } catch (Exception e) {
        log.error(e);
        e.printStackTrace();
      }
    }

    //repositoryのデータの設定
    lMapVal = (String) lMultiMap.get("repository");
    if (SIUtil.isNull(lMapVal))
      lMapVal = (String) lParaMap.get("repository");
    if (SIUtil.isNull(lMapVal))
      lMapVal = getMapping("repository");
    if (SIUtil.isNotNull(lMapVal)) {
      try {
        String repositoryPath = lMapVal;
        diskFile.setRepositoryPath(repositoryPath);
      } catch (Exception e) {
        log.error(e);
        e.printStackTrace();
      }
    }
    
    //lDestPathのデータの設定
    lDestPath=SIConfig.SIUPLOAD_FOLDER[0]+"purchasemail/";
    createFolder(lDestPath);

    String now = lDateTime.getDateTimeString();
    long maxSize=1024*1024*5;//5242880byte
    try {
      for (int ii = 0; ii < fileItemList.length; ii++) {
        if (!fileItemList[ii].isFormField()){//inputtype=fileのデータについて
          String fileNo = fileItemList[ii].getFieldName().substring(7,8);
          lFullDestFile = getAbsFileName(lDestPath,now+"_"+fileNo+".jpg");
          if((fileNo.equals("1")&&SIUtil.isNotNull(regPurchase.getCmdtyName1()))
           ||(fileNo.equals("2")&&SIUtil.isNotNull(regPurchase.getCmdtyName2()))
           ||(fileNo.equals("3")&&SIUtil.isNotNull(regPurchase.getCmdtyName3()))
           ||(fileNo.equals("4")&&SIUtil.isNotNull(regPurchase.getCmdtyName4()))
           ||(fileNo.equals("5")&&SIUtil.isNotNull(regPurchase.getCmdtyName5()))){//商品名があるか？
            if(fileItemList[ii].getSize()>maxSize){
              errors.addError(new SICustomError("input.data.purchase.file.overflow","添付画像"+fileNo));
            }else if(fileItemList[ii].getSize()==0){
              //画像添付なしの送信
            }else{
              if (!overwrite && lFullDestFile.exists()) {
                errors.addError(new SICustomError("input.data.purchase.file.missing","添付画像"+fileNo));
              }else{
                if(fileNo.equals("1")) regPurchase.setPictureUrl1(lFullDestFile.getAbsolutePath());
                else if(fileNo.equals("2")) regPurchase.setPictureUrl2(lFullDestFile.getAbsolutePath());
                else if(fileNo.equals("3")) regPurchase.setPictureUrl3(lFullDestFile.getAbsolutePath());
                else if(fileNo.equals("4")) regPurchase.setPictureUrl4(lFullDestFile.getAbsolutePath());
                else if(fileNo.equals("5")) regPurchase.setPictureUrl5(lFullDestFile.getAbsolutePath());
                fileItemList[ii].write(lFullDestFile);//実行
              }
            }
          }
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
      errors.addError(new SICustomError("input.data.purchase.file.failed"));
    }
    if (!errors.isEmpty()) request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
  }

  /**
   * <b>getAbsFileName </b> 目的フォルダを生成します。
   * 
   * @param lFolderName
   * @return なし
   * @throws なし
   */
  private void createFolder(String lFolderName) {
    log.debug("createFolder:lFolderName=" + lFolderName);
    String lAbsPath = getServletContext().getRealPath(lFolderName);
    File lFile = new File(lAbsPath);
    lFile.mkdirs();
  }

  /**
   * <b>getAbsFileName </b> アップロード先に目的ファイル名を生成します。
   * 
   * @param lDestPath
   *          アップロード先のパス
   * @param lDestFileName
   *          目的ファイル
   * @return 目的ファイルのオブジェクト
   * @throws なし
   */
  private File getAbsFileName(String lDestPath, String lDestFileName) {
    lDestPath = SIUtil.getOsFileName(lDestPath);
    lDestFileName = SIUtil.getOsFileName(lDestFileName);
    if (!SIConfig.SIOS_CURRENT_NAME.equals(SIConfig.SIOS_WINDOW_SERIES_NAME)
        && SIUtil.isNotNull(lDestFileName)) {
      int ii = lDestFileName.lastIndexOf("/");
      if (ii > 0)
        lDestFileName = lDestFileName.substring(ii + 1);
    }

    File lResFile = new File(lDestPath, lDestFileName);
    if (lResFile.isAbsolute())
      return lResFile;
    return new File(getServletContext().getRealPath(lDestPath), lDestFileName);
  }

}