package org.wso2.carbon.identity.workflow.mgt.ui.util;
import org.wso2.carbon.identity.workflow.mgt.stub.bean.Parameter;
import org.wso2.carbon.identity.workflow.mgt.stub.metadata.Template;
import org.wso2.carbon.identity.workflow.mgt.stub.metadata.WorkflowImpl;
import org.wso2.carbon.identity.workflow.mgt.stub.metadata.WorkflowWizard;
import org.wso2.carbon.identity.workflow.mgt.stub.metadata.bean.ParameterMetaData;
import org.wso2.carbon.identity.workflow.mgt.stub.metadata.bean.ParametersMetaData;
import org.wso2.carbon.identity.workflow.mgt.ui.WorkflowUIConstants;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class WorkflowUIUtil {
/**
* Load parameters of a workflow template
*
* @param requestParameterMap parameter map
* @param workflowWizard Workflow object
*/
public static void loadTemplateParameters(Map<String, String[]> requestParameterMap, WorkflowWizard workflowWizard){
Set<String> keys = requestParameterMap.keySet();
Map<String,Parameter> templateParameterMap = new HashMap<>();
Template template = workflowWizard.getTemplate();
if(template!=null) {
ParametersMetaData parametersMetaData = template.getParametersMetaData();
if(parametersMetaData !=null && parametersMetaData.getParameterMetaData()!=null) {
ParameterMetaData[] parameterMetaData = parametersMetaData.getParameterMetaData();
for (ParameterMetaData metaData : parameterMetaData) {
if (requestParameterMap.get(metaData.getName()) != null) {
String value = requestParameterMap.get(metaData.getName())[0];
Parameter parameter = new Parameter();
parameter.setParamName(metaData.getName());
parameter.setHolder(WorkflowUIConstants.ParameterHolder.TEMPLATE);
templateParameterMap.put(parameter.getParamName(), parameter);
parameter.setParamValue(value);
parameter.setQName(metaData.getName());
}else{
for (String key : keys) {
if (key.startsWith(metaData.getName())) {
Parameter parameter = new Parameter();
parameter.setParamName(metaData.getName());
parameter.setHolder(WorkflowUIConstants.ParameterHolder.TEMPLATE);
parameter.setQName(key);
templateParameterMap.put(key, parameter);
String[] values = requestParameterMap.get(key);
if (values != null && values.length > 0) {
String aValue = values[0];
parameter.setParamValue(aValue);
}
}
}
}
}
}
}
Collection<Parameter> values = templateParameterMap.values();
Parameter[] parameters = values.toArray(new Parameter[values.size()]);
workflowWizard.setTemplateParameters(parameters);
}
/**
* Load implementaions related parameters of a workflow
*
* @param requestParameterMap parameter map
* @param workflowWizard Workflow object
*/
public static void loadWorkflowImplParameters(Map<String, String[]> requestParameterMap, WorkflowWizard workflowWizard){
Set<String> keys = requestParameterMap.keySet();
Parameter[] workflowImplParameters = workflowWizard.getWorkflowImplParameters();
Map<String,Parameter> workflowImplParameterMap = new HashMap<>();
if(workflowImplParameters!=null) {
for (Parameter param : workflowImplParameters) {
workflowImplParameterMap.put(param.getQName(), param);
}
}
WorkflowImpl workflowImpl = workflowWizard.getWorkflowImpl();
if(workflowImpl!=null) {
ParametersMetaData parametersMetaData = workflowImpl.getParametersMetaData();
if(parametersMetaData !=null && parametersMetaData.getParameterMetaData()!=null) {
ParameterMetaData[] parameterMetaData = parametersMetaData.getParameterMetaData();
for (ParameterMetaData metaData : parameterMetaData) {
if (requestParameterMap.get(metaData.getName()) != null) {
Parameter parameter = workflowImplParameterMap.get(metaData.getName());
String value = requestParameterMap.get(metaData.getName())[0];
if (parameter == null) {
parameter = new Parameter();
parameter.setParamName(metaData.getName());
parameter.setHolder(WorkflowUIConstants.ParameterHolder.WORKFLOW_IMPL);
workflowImplParameterMap.put(parameter.getParamName(), parameter);
}
parameter.setParamValue(value);
parameter.setQName(metaData.getName());
}else{
for (String key : keys) {
if (key.startsWith(metaData.getName())) {
Parameter parameter = workflowImplParameterMap.get(key);
if (parameter == null) {
parameter = new Parameter();
parameter.setParamName(metaData.getName());
parameter.setHolder(WorkflowUIConstants.ParameterHolder.WORKFLOW_IMPL);
parameter.setQName(key);
workflowImplParameterMap.put(key, parameter);
}
String[] values = requestParameterMap.get(key);
if (values != null && values.length > 0) {
String aValue = values[0];
parameter.setParamValue(aValue);
}
}
}
}
}
}
}
Collection<Parameter> values = workflowImplParameterMap.values();
Parameter[] parameters = values.toArray(new Parameter[values.size()]);
workflowWizard.setWorkflowImplParameters(parameters);
}
}