Package org.joget.apps.form.lib

Source Code of org.joget.apps.form.lib.FileUpload

package org.joget.apps.form.lib;

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Map;
import org.joget.apps.app.model.AppDefinition;
import org.joget.apps.app.service.AppUtil;
import org.joget.apps.form.model.Element;
import org.joget.apps.form.model.Form;
import org.joget.apps.form.model.FormBuilderPaletteElement;
import org.joget.apps.form.model.FormBuilderPalette;
import org.joget.apps.form.model.FormData;
import org.joget.apps.form.model.FormRow;
import org.joget.apps.form.model.FormRowSet;
import org.joget.apps.form.service.FormUtil;
import org.joget.commons.util.FileManager;

public class FileUpload extends Element implements FormBuilderPaletteElement {

    @Override
    public String getName() {
        return "File Upload";
    }

    @Override
    public String getVersion() {
        return "3.0.0";
    }

    @Override
    public String getDescription() {
        return "FileUpload Element";
    }

    @Override
    public String renderTemplate(FormData formData, Map dataModel) {
        String template = "fileUpload.ftl";

        // set value
        String value = FormUtil.getElementPropertyValue(this, formData);
       
        // check if the file is in temp file
        File file = FileManager.getFileByPath(value);
        if (file != null) {
            dataModel.put("tempFilePath", value);
            dataModel.put("value", file.getName());
        } else if (value != null && !value.isEmpty()) {
            dataModel.put("value", value);
           
            // determine actual path for the file uploads
            String primaryKeyValue = getPrimaryKeyValue(formData);
            String fileName = value;
            String formDefId = "";
            Form form = FormUtil.findRootForm(this);
            if (form != null) {
                formDefId = form.getPropertyString(FormUtil.PROPERTY_ID);
            }
            String encodedFileName = fileName;
            if (fileName != null) {
                try {
                    encodedFileName = URLEncoder.encode(fileName, "UTF8").replaceAll("\\+", "%20");
                } catch (UnsupportedEncodingException ex) {
                    // ignore
                }
            }

            String appId = "";
            String appVersion = "";

            AppDefinition appDef = AppUtil.getCurrentAppDefinition();

            if (appDef != null) {
                appId = appDef.getId();
                appVersion = appDef.getVersion().toString();
            }

            String filePath = "/web/client/app/" + appId + "/" + appVersion + "/form/download/" + formDefId + "/" + primaryKeyValue + "/" + encodedFileName + ".";
            if (Boolean.valueOf(getPropertyString("attachment")).booleanValue()) {
                filePath += "?attachment=true";
            }
            dataModel.put("filePath", filePath);
        }
       
        String html = FormUtil.generateElementHtml(this, formData, template, dataModel);
        return html;
    }

    @Override
    public FormData formatDataForValidation(FormData formData) {
        // check for file removal
        String postfix = "_remove";
        String filePathPostfix = "_path";
        String id = FormUtil.getElementParameterName(this);
        if (id != null) {
            String removalId = id + postfix;
            String filename = formData.getRequestParameter(id);
            String removalFlag = formData.getRequestParameter(removalId);
            String existingFilePath = formData.getRequestParameter(id + filePathPostfix);
            if (filename == null && "on".equals(removalFlag)) {
                // don't remove file, reset value
                formData.addRequestParameterValues(id, new String[]{""});
            } else if (filename == null && existingFilePath != null && !existingFilePath.isEmpty()) {
                formData.addRequestParameterValues(id, new String[]{existingFilePath});
            }
        }
        return formData;
    }
   
    @Override
    public FormRowSet formatData(FormData formData) {
        FormRowSet rowSet = null;

        // get value
        String id = getPropertyString(FormUtil.PROPERTY_ID);
        if (id != null) {
            String value = FormUtil.getElementPropertyValue(this, formData);
            if (value != null) {
                // set value into Properties and FormRowSet object
                FormRow result = new FormRow();
               
                // check if the file is in temp file
                File file = FileManager.getFileByPath(value);
                if (file != null) {
                    result.putTempFilePath(id, value);
                    result.setProperty(id, file.getName());
                   
                    String paramName = FormUtil.getElementParameterName(this);
                    formData.addRequestParameterValues(paramName, new String[]{file.getName()});
                } else {
                    result.setProperty(id, value);
                }
               
                rowSet = new FormRowSet();
                rowSet.add(result);
            }
        }

        return rowSet;
    }

    @Override
    public String getClassName() {
        return getClass().getName();
    }

    @Override
    public String getFormBuilderTemplate() {
        return "<label class='label'>FileUpload</label><input type='file' />";
    }

    @Override
    public String getLabel() {
        return "File Upload";
    }

    @Override
    public String getPropertyOptions() {
        return AppUtil.readPluginResource(getClass().getName(), "/properties/form/fileUpload.json", null, true, "message/form/FileUpload");
    }

    @Override
    public String getFormBuilderCategory() {
        return FormBuilderPalette.CATEGORY_GENERAL;
    }

    @Override
    public int getFormBuilderPosition() {
        return 900;
    }

    @Override
    public String getFormBuilderIcon() {
        return null;
    }
   
    @Override
    public Boolean selfValidate(FormData formData) {
        String id = FormUtil.getElementParameterName(this);
        Boolean valid = true;
        String error = "";
        try {
            String value = FormUtil.getElementPropertyValue(this, formData);

            File file = FileManager.getFileByPath(value);
            if (file != null) {
                if(getPropertyString("maxSize") != null && !getPropertyString("maxSize").isEmpty()) {
                    long maxSize = Long.parseLong(getPropertyString("maxSize")) * 1024;
                   
                    if (file.length() > maxSize) {
                        valid = false;
                        error += getPropertyString("maxSizeMsg") + " ";
                       
                    }
                }
                if(getPropertyString("fileType") != null && !getPropertyString("fileType").isEmpty()) {
                    String[] fileType = getPropertyString("fileType").split(";");
                    String filename = file.getName().toUpperCase();
                    Boolean found = false;
                    for (String type : fileType) {
                        if (filename.endsWith(type.toUpperCase())) {
                            found = true;
                        }
                    }
                    if (!found) {
                        valid = false;
                        error += getPropertyString("fileTypeMsg");
                    }
                }
            }
           
            if (!valid) {
                formData.addFormError(id, error);
            }
        } catch (Exception e) {}
       
        return valid;
    }
}
TOP

Related Classes of org.joget.apps.form.lib.FileUpload

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.