Package org.joget.apps.app.lib

Source Code of org.joget.apps.app.lib.FormHashVariable

package org.joget.apps.app.lib;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.joget.apps.app.model.DefaultHashVariablePlugin;
import org.joget.apps.app.service.AppUtil;
import org.joget.apps.form.dao.FormDataDao;
import org.joget.apps.form.model.FormRow;
import org.joget.apps.form.service.FormUtil;
import org.joget.commons.util.LogUtil;
import org.joget.workflow.model.WorkflowAssignment;
import org.joget.workflow.model.WorkflowProcessLink;
import org.joget.workflow.model.service.WorkflowManager;
import org.joget.workflow.util.WorkflowUtil;
import org.springframework.context.ApplicationContext;

public class FormHashVariable extends DefaultHashVariablePlugin {
    Map<String, FormRow> formDataCache = new HashMap<String, FormRow>();

    @Override
    public String processHashVariable(String variableKey) {
        String primaryKey = null;
        if (variableKey.contains("[") && variableKey.contains("]")) {
            primaryKey = variableKey.substring(variableKey.indexOf("[") + 1, variableKey.indexOf("]"));
            variableKey = variableKey.substring(0, variableKey.indexOf("["));
           
            if (primaryKey.isEmpty()) {
                return "";
            }
        }
       
        //get from request parameter if exist
        HttpServletRequest request = WorkflowUtil.getHttpServletRequest();
        if (primaryKey == null && request != null && request.getParameter("id") != null && !request.getParameter("id").isEmpty()) {
            primaryKey = request.getParameter("id");
        }
       
        String temp[] = variableKey.split("\\.");
       
        String tableName = temp[0];
        String columnName = temp[1];
       
        WorkflowAssignment wfAssignment = (WorkflowAssignment) this.getProperty("workflowAssignment");
        if ((primaryKey != null && !primaryKey.isEmpty()) || wfAssignment != null) {
            try {
                if (tableName != null && tableName.length() != 0) {
                    ApplicationContext appContext = AppUtil.getApplicationContext();
                    FormDataDao formDataDao = (FormDataDao) appContext.getBean("formDataDao");

                    if (primaryKey == null && wfAssignment != null) {

                        WorkflowManager workflowManager = (WorkflowManager) appContext.getBean("workflowManager");
                        WorkflowProcessLink link = workflowManager.getWorkflowProcessLink(wfAssignment.getProcessId());

                        if (link != null) {
                            primaryKey = link.getOriginProcessId();
                        } else if (primaryKey == null) {
                            primaryKey = wfAssignment.getProcessId();
                        }
                    }

                    String cacheKey = tableName + "##" + primaryKey;
                    FormRow row = formDataCache.get(cacheKey);
                    if (row == null) {       
                        row = formDataDao.loadByTableNameAndColumnName(tableName, columnName, primaryKey);
                        formDataCache.put(cacheKey, row);
                    }

                    if (row != null && row.getCustomProperties() != null) {
                        Object val = row.getCustomProperties().get(columnName);
                        if (val != null) {
                            return val.toString();
                        } else {
                            LogUtil.debug(FormHashVariable.class.getName(), "#form." + variableKey + "# is NULL");
                            return "";
                        }
                    }
                }
            } catch (Exception ex) {}
        }
        return null;
    }

    public String getName() {
        return "Form Data Hash Variable";
    }

    public String getPrefix() {
        return "form";
    }

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

    public String getDescription() {
        return "";
    }

    public String getLabel() {
        return "Form Data Hash Variable";
    }

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

    public String getPropertyOptions() {
        return "";
    }
   
    @Override
    public Collection<String> availableSyntax() {
        Collection<String> syntax = new ArrayList<String>();
        syntax.add("form.TABLE.COLUMN");
        syntax.add("form.TABLE.COLUMN[PRIMARY_KEY]");
       
        return syntax;
    }
}
TOP

Related Classes of org.joget.apps.app.lib.FormHashVariable

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.