com.wabacus.system.fileupload.FileInputBoxUpload.java Source code

Java tutorial

Introduction

Here is the source code for com.wabacus.system.fileupload.FileInputBoxUpload.java

Source

/* 
 * Copyright (C) 2010---2014 (wuweixing)<349446658@qq.com>
 * 
 * This file is part of Wabacus 
 * 
 * Wabacus is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package com.wabacus.system.fileupload;

import java.io.File;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.fileupload.FileItem;

import com.wabacus.config.Config;
import com.wabacus.config.component.application.report.ReportBean;
import com.wabacus.config.component.container.page.PageBean;
import com.wabacus.exception.WabacusRuntimeException;
import com.wabacus.system.assistant.FilePathAssistant;
import com.wabacus.system.assistant.WabacusAssistant;
import com.wabacus.system.inputbox.FileBox;
import com.wabacus.system.intercept.AbsFileUploadInterceptor;
import com.wabacus.system.serveraction.CommonServerAction;
import com.wabacus.util.Tools;

public class FileInputBoxUpload extends AbsFileUpload {
    public FileInputBoxUpload(HttpServletRequest request) {
        super(request);
    }

    public void showUploadForm(PrintWriter out) {
        String pageid = getRequestString("PAGEID", "");
        String reportid = getRequestString("REPORTID", "");
        String inputboxid = getRequestString("INPUTBOXID", "");
        PageBean pbean = Config.getInstance().getPageBean(pageid);
        if (pbean == null) {
            throw new WabacusRuntimeException("?ID" + pageid + "?");
        }
        ReportBean rbean = pbean.getReportChild(reportid, true);
        if (rbean == null) {
            throw new WabacusRuntimeException(
                    "ID" + pageid + "??ID" + reportid + "");
        }
        String boxid = inputboxid;
        int idx = boxid.lastIndexOf("__");
        if (idx > 0) {
            boxid = boxid.substring(0, idx);
        }
        FileBox fileboxObj = rbean.getUploadFileBox(boxid);
        if (fileboxObj == null) {
            throw new WabacusRuntimeException(
                    "" + rbean.getPath() + "??ID" + boxid + "");
        }
        String parentWindowName;
        if (Config.getInstance().getSystemConfigValue("prompt-dialog-type", "artdialog").equals("artdialog")) {
            out.print("<script type=\"text/javascript\"  src=\"" + Config.webroot
                    + "webresources/component/artDialog/artDialog.js\"></script>");
            out.print("<script type=\"text/javascript\"  src=\"" + Config.webroot
                    + "webresources/component/artDialog/plugins/iframeTools.js\"></script>");
            parentWindowName = "artDialog.open.origin";
        } else {
            parentWindowName = "parent";
        }
        out.print("<input type='hidden' name='INPUTBOXID' value='" + inputboxid + "'/>");
        out.print("<input type='hidden' name='PAGEID' value='" + pageid + "'/>");
        out.print("<input type='hidden' name='REPORTID' value='" + reportid + "'/>");
        Map<String, String> mFormFieldValues = (Map<String, String>) request
                .getAttribute("WX_FILE_UPLOAD_FIELDVALUES");
        showDynParamHiddenFields(mFormFieldValues, fileboxObj.getLstParamNamesInUrl(), out);
        boolean flag = true;
        if (fileboxObj.getInterceptor() != null) {
            flag = fileboxObj.getInterceptor().beforeDisplayFileUploadInterface(request, mFormFieldValues, out);
        }
        if (flag) {
            out.print(displayFileUpload(fileboxObj.getUploadcount(), fileboxObj.getAllowTypes(),
                    fileboxObj.getDisallowtypes()));
            String oldvalue = getRequestString("OLDVALUE", "");
            StringBuilder buf = new StringBuilder();
            if (fileboxObj.getDeletetype() > 0 && !Tools.isEmpty(oldvalue)) {
                buf.append("&nbsp;&nbsp;<input type=\"button\" class=\"cls-button\" value=\"\"");
                buf.append(" onclick=\"" + parentWindowName + ".setPopUpBoxValueToParent('','");
                buf.append(inputboxid + "');");
                if (fileboxObj.getDeletetype() > 1) {//
                    buf.append(
                            parentWindowName + ".invokeServerAction('" + CommonServerAction.class.getName() + "'");
                    buf.append(",{ACTIONTYPE:'deleteuploadfile',DELETEFILES:'" + oldvalue + "',INPUTBOXID:'"
                            + inputboxid + "'");
                    buf.append(",PAGEID:'" + pageid + "',REPORTID:'" + reportid + "'}");
                    buf.append(",deleteUploadFilesInvokeCallback,null)");
                }
                buf.append("\"/>");
                buf.append("</td></tr></table>");
            }
            out.print(buf.toString());
        }
    }

    private void showDynParamHiddenFields(Map<String, String> mFormFieldValues, List<String> lstParamNamesInUrl,
            PrintWriter out) {
        String oldvalue = null;
        if (mFormFieldValues != null) {
            oldvalue = mFormFieldValues.get("OLDVALUE");
        } else {
            oldvalue = request.getParameter("OLDVALUE");
        }
        if (oldvalue != null && !oldvalue.trim().equals("")) {
            out.print("<input type=\"hidden\" name=\"OLDVALUE\" value=\"" + oldvalue.trim() + "\"/>");
        }
        if (lstParamNamesInUrl == null || lstParamNamesInUrl.size() == 0)
            return;
        String paramvalueTmp;
        for (String paramnameTmp : lstParamNamesInUrl) {
            if (mFormFieldValues != null) {
                paramvalueTmp = mFormFieldValues.get(paramnameTmp);
            } else {
                paramvalueTmp = request.getParameter(paramnameTmp);
            }
            if (paramvalueTmp != null && !paramvalueTmp.trim().equals("")) {
                out.print("<input type=\"hidden\" name=\"" + paramnameTmp + "\" value=\"" + paramvalueTmp + "\"/>");
            }
        }
    }

    public String doFileUpload(List lstFieldItems, PrintWriter out) {
        String pageid = mFormFieldValues.get("PAGEID");
        String reportid = mFormFieldValues.get("REPORTID");
        String inputboxid = mFormFieldValues.get("INPUTBOXID");
        pageid = pageid == null ? "" : pageid.trim();
        inputboxid = inputboxid == null ? "" : inputboxid.trim();
        PageBean pbean = Config.getInstance().getPageBean(pageid);
        if (pbean == null) {
            throw new WabacusRuntimeException("?ID" + pageid + "?");
        }
        ReportBean rbean = pbean.getReportChild(reportid, true);
        if (rbean == null) {
            throw new WabacusRuntimeException(
                    "ID" + pageid + "??ID" + reportid + "");
        }
        mFormFieldValues.put(AbsFileUploadInterceptor.REPORTID_KEY, reportid);
        String boxid = inputboxid;
        int idx = boxid.lastIndexOf("__");
        if (idx > 0) {
            boxid = boxid.substring(0, idx);
        }
        FileBox fileboxObj = rbean.getUploadFileBox(boxid);
        if (fileboxObj == null) {
            throw new WabacusRuntimeException(
                    "" + rbean.getPath() + "??ID" + boxid + "");
        }
        this.interceptorObj = fileboxObj.getInterceptor();
        out.println(fileboxObj.createSelectOkFunction(inputboxid, false));
        String configAllowTypes = fileboxObj.getAllowTypes();
        if (configAllowTypes == null)
            configAllowTypes = "";
        List<String> lstConfigAllowTypes = getFileSuffixList(configAllowTypes);
        String configDisallowTypes = fileboxObj.getDisallowtypes();
        if (configDisallowTypes == null)
            configDisallowTypes = "";
        List<String> lstConfigDisallowTypes = getFileSuffixList(configDisallowTypes);
        String savepath = WabacusAssistant.getInstance().parseAndGetRealValue(request, fileboxObj.getSavePath(),
                "");
        String newfilename = WabacusAssistant.getInstance().parseAndGetRealValue(request,
                fileboxObj.getNewfilename(), "");
        String rooturl = WabacusAssistant.getInstance().parseAndGetRealValue(request, fileboxObj.getRooturl(), "");
        String seperator = fileboxObj.getSeperator();
        if (Tools.isEmpty(seperator))
            seperator = ";";
        String allSaveValues = "", saveValueTmp;
        boolean existUploadFile = false;
        List<String> lstDestFileNames = new ArrayList<String>();
        FileItem item;
        for (Object itemObj : lstFieldItems) {
            item = (FileItem) itemObj;
            if (item.isFormField())
                continue;
            String orginalFilename = item.getName();
            if ((orginalFilename == null || orginalFilename.equals("")))
                continue;
            orginalFilename = getFileNameFromAbsolutePath(orginalFilename);
            if (orginalFilename.equals(""))
                return "??";//??
            mFormFieldValues.put(AbsFileUploadInterceptor.ALLOWTYPES_KEY, configAllowTypes);
            mFormFieldValues.put(AbsFileUploadInterceptor.DISALLOWTYPES_KEY, configDisallowTypes);
            mFormFieldValues.put(AbsFileUploadInterceptor.MAXSIZE_KEY, String.valueOf(fileboxObj.getMaxsize()));
            mFormFieldValues.put(AbsFileUploadInterceptor.FILENAME_KEY,
                    getSaveFileName(orginalFilename, newfilename));
            mFormFieldValues.put(AbsFileUploadInterceptor.SAVEPATH_KEY, savepath);
            mFormFieldValues.put(AbsFileUploadInterceptor.ROOTURL_KEY, rooturl);
            boolean shouldUpload = interceptorObj != null
                    ? interceptorObj.beforeFileUpload(request, item, mFormFieldValues, out)
                    : true;
            if (shouldUpload) {
                getRealUploadFileName(lstDestFileNames, orginalFilename);
                String errorMessage = doUploadFileAction(item, mFormFieldValues, orginalFilename, configAllowTypes,
                        lstConfigAllowTypes, configDisallowTypes, lstConfigDisallowTypes);
                if (errorMessage != null && !errorMessage.trim().equals(""))
                    return errorMessage;
            }
            existUploadFile = true;
            saveValueTmp = getSaveValue();
            if (!Tools.isEmpty(saveValueTmp))
                allSaveValues += saveValueTmp + seperator;
        }
        if (!existUploadFile)
            return "?!";
        if (allSaveValues.endsWith(seperator))
            allSaveValues = allSaveValues.substring(0, allSaveValues.length() - seperator.length());
        out.print("<script language='javascript'>");
        out.print("selectOK('" + allSaveValues + "',null,null,false);");
        out.print("</script>");
        return null;
    }

    private String getSaveValue() {
        String savevalue = mFormFieldValues.get(AbsFileUploadInterceptor.SAVEVALUE_KEY);
        if (savevalue == null) {
            String destfilenameTmp = mFormFieldValues.get(AbsFileUploadInterceptor.FILENAME_KEY);
            String rooturlTmp = mFormFieldValues.get(AbsFileUploadInterceptor.ROOTURL_KEY);
            String savepathTmp = mFormFieldValues.get(AbsFileUploadInterceptor.SAVEPATH_KEY);
            if (Tools.isEmpty(rooturlTmp) && Tools.isEmpty(savepathTmp)) {
                savevalue = destfilenameTmp;
            } else if (Tools.isEmpty(rooturlTmp)) {
                savevalue = FilePathAssistant.getInstance()
                        .standardFilePath(savepathTmp + File.separator + destfilenameTmp);
            } else {
                if (!rooturlTmp.endsWith("/"))
                    rooturlTmp += "/";
                savevalue = rooturlTmp + destfilenameTmp;
            }
        }
        if (savevalue == null)
            savevalue = "";
        StringBuilder pathBuf = new StringBuilder();
        for (int i = 0; i < savevalue.length(); i++) {
            if (savevalue.charAt(i) == '\\') {
                pathBuf.append("\\\\");
            } else {
                pathBuf.append(savevalue.charAt(i));
            }
        }
        return pathBuf.toString();
    }

    public void promptSuccess(PrintWriter out, boolean isArtDialog) {
        if (isArtDialog) {//artdialog??
            out.println("artDialog.open.origin.wx_success('?');");
            out.println("art.dialog.close();");
        } else {
            out.println("parent.wx_success('?');");
            out.println("parent.closePopupWin();");
        }
    }
}