/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package action;

/**
 *
 * @author Chung
 */
import form.UploadFileForm;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.log4j.Logger;
import org.apache.struts.upload.FormFile;

public class UploadFileAction extends Action {

    private Logger logger = Logger.getLogger(UploadFileAction.class);

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        UploadFileForm importFileExcelForm = (UploadFileForm) form;
        request.setAttribute("statusResultUpload", "error");
        request.setAttribute("descErrorUpload", "");
        request.setAttribute("fileName", "");
        if (importFileExcelForm == null) {
            request.setAttribute("descErrorUpload", "Dữ liệu đẩy lên Empty");
            return mapping.findForward("resultUpload");
        }
        FormFile fileExcel = importFileExcelForm.getFilePdf();

        if (fileExcel.getFileSize() == 0) {
            logger.error("chưa chọn file PDF");
            request.setAttribute("descErrorUpload", "Bạn chưa chọn file PDF");
            return mapping.findForward("resultUpload");
        }

        //only allow textfile to upload
//        if (!"application/vnd.ms-excel".equals(getFileExcel().getContentType())) {
        if (!"application/pdf".equals(fileExcel.getContentType()) && !"application/octet".equals(fileExcel.getContentType())) {//application/octet
            logger.error("Cần chọn file PDF có phần mở rộng .pdf");
            request.setAttribute("descErrorUpload", "Cần chọn file PDF có phần mở rộng .pdf");
            return mapping.findForward("resultUpload");
        }

        if (fileExcel.getFileSize() > 10 * 8388608) { //1MB = 1024 kB = 1024 * 1024 B = 1024 * 1024 * 8 b = 8388608 b
            logger.error("File cần có kích thước nhỏ hơn bằng 10 MB");
            request.setAttribute("descErrorUpload", "File cần có kích thước nhỏ hơn bằng 10 MB");
            return mapping.findForward("resultUpload");
        }

        if (fileExcel.getFileName() == null || fileExcel.getFileName().trim().isEmpty()
                || fileExcel.getFileName().toLowerCase().indexOf(".pdf") == -1
                || !".pdf".equals(fileExcel.getFileName().toLowerCase().substring(fileExcel.getFileName().toLowerCase().indexOf(".pdf")))) {
            request.setAttribute("descErrorUpload", "Cần chọn file PDF có phần mở rộng .pdf");
            return mapping.findForward("resultUpload");
        }

        //Get the servers upload directory real path name
        String realPath = request.getSession().getServletContext().getRealPath("/");
        String folderPath = realPath + "upload";
        String name = java.util.UUID.randomUUID().toString();
        String ext = "pdf";
        //create the upload folder if not exists
        File folder = new File(folderPath);
        try {
            if (!folder.exists()) {
                folder.mkdir();
            }
        } catch (Exception e) {
            logger.error("Không tạo được Folder Upload", e);
            request.setAttribute("descErrorUpload", "Không tạo được Folder Upload");
            return mapping.findForward("resultUpload");
        }

        File fileDes = new File(folderPath + "/" + name + "." + ext);
        if (fileDes.exists()) {
            int index = 1;
            String name_2 = name + "_" + index;
            String path = folderPath + "/" + name_2 + "." + ext;
            fileDes = new File(path);
            while (fileDes.exists()) {
                index++;
                name_2 = name + "_" + index;
                path = folderPath + "/" + name_2 + "." + ext;
                fileDes = new File(path);
            }
            name = name_2;
        }

        String fileName = name + "." + ext;
        String filePath = folderPath + "/" + fileName;

        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(new File(filePath));
            fos.write(fileExcel.getFileData());
        } catch (Exception e) {
            logger.error("Không ghi được File vào Folder Upload", e);
            request.setAttribute("descErrorUpload", "Không ghi được File vào Folder Upload");
            return mapping.findForward("resultUpload");
        } finally {
            if (fos != null) {
                fos.close();
            }
        }

        request.setAttribute("statusResultUpload", "success");
        request.setAttribute("fileName", fileName);
        return mapping.findForward("resultUpload");
    }

}
