package net.sourceforge.solexatools.util; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.SortedSet; import java.util.TreeSet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import net.sourceforge.seqware.common.model.File; import net.sourceforge.seqware.common.model.Workflow; import net.sourceforge.seqware.common.model.WorkflowParam; import net.sourceforge.seqware.common.model.WorkflowRunParam; import net.sourceforge.seqware.common.util.Log; /** * <p> * LaunchWorkflowUtil class. * </p> * * @author boconnor * @version $Id: $Id */ public class LaunchWorkflowUtil { /** Constant <code>SELECTED_NODES="launchSelectedNodes"</code> */ public static final String SELECTED_NODES = "launchSelectedNodes"; /** Constant <code>SELECTED_FILES="selectedLaunchFiles"</code> */ public static final String SELECTED_FILES = "selectedLaunchFiles"; /** Constant <code>SELECTED_VALUES="selectedWorkflowParamValueId"</code> */ public static final String SELECTED_VALUES = "selectedWorkflowParamValueId"; // methods for SELECTED NODES /** * <p> * getCurrentSelectedNodes. * </p> * * @param request * a {@link javax.servlet.http.HttpServletRequest} object. * @return a {@link java.util.List} object. */ public static List<String> getCurrentSelectedNodes(HttpServletRequest request) { Integer key = getCurrentWorkflowParam(request).getWorkflowParamId(); Map<Integer, List<String>> selectedNodes = getSelectedNodesFromSession(request); return selectedNodes.get(key); } /** * <p> * setCurrentSelectedNodes. * </p> * * @param request * a {@link javax.servlet.http.HttpServletRequest} object. * @param selectedNodesOneParam * a {@link java.util.List} object. */ public static void setCurrentSelectedNodes(HttpServletRequest request, List<String> selectedNodesOneParam) { Integer key = getCurrentWorkflowParam(request).getWorkflowParamId(); Map<Integer, List<String>> selectedNodes = getSelectedNodesFromSession(request); selectedNodes.put(key, selectedNodesOneParam); request.getSession(false).setAttribute(SELECTED_NODES, selectedNodes); } private static void removeSelectedNodesCurrentParam(HttpServletRequest request) { setCurrentSelectedNodes(request, null); } private static Map<Integer, List<String>> getSelectedNodesFromSession(HttpServletRequest request) { Map<Integer, List<String>> selectedNodes = (HashMap<Integer, List<String>>) request.getSession(false).getAttribute(SELECTED_NODES); if (selectedNodes == null) { selectedNodes = new HashMap<>(); } return selectedNodes; } // methods for SELECTED FILES /** * <p> * getCurrentSelectedFiles. * </p> * * @param request * a {@link javax.servlet.http.HttpServletRequest} object. * @return a {@link java.util.List} object. */ public static List<File> getCurrentSelectedFiles(HttpServletRequest request) { Integer key = getCurrentWorkflowParam(request).getWorkflowParamId(); Map<Integer, List<File>> selectedFiles = getSelectedFilesFromSession(request); return selectedFiles.get(key); } /** * <p> * setCurrentSelectedFiles. * </p> * * @param request * a {@link javax.servlet.http.HttpServletRequest} object. * @param selectedFilesOneParam * a {@link java.util.List} object. */ public static void setCurrentSelectedFiles(HttpServletRequest request, List<File> selectedFilesOneParam) { Integer key = getCurrentWorkflowParam(request).getWorkflowParamId(); Map<Integer, List<File>> selectedFiles = getSelectedFilesFromSession(request); selectedFiles.put(key, selectedFilesOneParam); request.getSession(false).setAttribute(SELECTED_FILES, selectedFiles); } private static void removeSelectedFilesCurrentParam(HttpServletRequest request) { setCurrentSelectedFiles(request, null); } private static Map<Integer, List<File>> getSelectedFilesFromSession(HttpServletRequest request) { Map<Integer, List<File>> selectedFiles = (HashMap<Integer, List<File>>) request.getSession(false).getAttribute(SELECTED_FILES); if (selectedFiles == null) { selectedFiles = new HashMap<>(); } return selectedFiles; } // remove Last param data form session /** * <p> * removeSelectedItemsCurrentParam. * </p> * * @param request * a {@link javax.servlet.http.HttpServletRequest} object. */ public static void removeSelectedItemsCurrentParam(HttpServletRequest request) { removeSelectedFilesCurrentParam(request); removeSelectedNodesCurrentParam(request); } /** * <p> * removeSelectedItemsLaunchWorkflow. * </p> * * @param request * a {@link javax.servlet.http.HttpServletRequest} object. */ public static void removeSelectedItemsLaunchWorkflow(HttpServletRequest request) { request.getSession(false).removeAttribute(SELECTED_NODES); request.getSession(false).removeAttribute(SELECTED_FILES); request.getSession(false).removeAttribute(SELECTED_VALUES); } /** * Get all selected Files, the files are organized by the name of the parameter (key) and a list of files selected (value) via a hash. * * @param request * a {@link javax.servlet.http.HttpServletRequest} object. * @return a {@link java.util.Map} object. */ public static Map<String, List<File>> getAllSelectedFiles(HttpServletRequest request) { HashMap<String, List<File>> files = new HashMap<>(); SortedSet<WorkflowParam> params = getCurrentWorkflow(request).getWorkflowParamsWithDifferentFileMetaType(); // if current workflow not set in session if (params == null) return files; Map<Integer, List<File>> selectedFiles = getSelectedFilesFromSession(request); for (WorkflowParam param : params) { Integer key = param.getWorkflowParamId(); String paramName = param.getKey(); List<File> filesOneParam = selectedFiles.get(key); List<File> oldValues = files.get(paramName); if (oldValues == null) { files.put(paramName, filesOneParam); } else { oldValues.addAll(filesOneParam); } } return files; } /** * <p> * getSummaryData. * </p> * * @param request * a {@link javax.servlet.http.HttpServletRequest} object. * @return a {@link net.sourceforge.solexatools.util.SummaryData} object. */ public static SummaryData getSummaryData(HttpServletRequest request) { SummaryData summaryDate = new SummaryData(); List<SummaryLine> summaryLines = new LinkedList<>(); Map<Integer, List<File>> selectedFiles = getSelectedFilesFromSession(request); SortedSet<WorkflowParam> visibleParams = getCurrentWorkflow(request).getVisibleWorkflowParams(); SortedSet<WorkflowParam> differentParams = getCurrentWorkflow(request).getWorkflowParamsWithDifferentFileMetaType(); // Map<Integer, String> selectedValues = getSelectedWorkflowParamValue(request); // Log.info(" === GET SUMMARY DATA ==="); for (WorkflowParam workflowParam : visibleParams) { if (workflowParam.getDisplayValue() != null) { workflowParam.setValue(workflowParam.getDisplayValue()); workflowParam.setDisplayName(workflowParam.getDisplayName()); } } /* * for(WorkflowParam workflowParam: visibleParams){ * * String strWorkflowParamValueId = selectedValues.get(workflowParam.getWorkflowParamId()); Log.info(" strWorkflowParamValueId = " + * strWorkflowParamValueId); // set default value if(strWorkflowParamValueId == null || * "defaultValue".equals(strWorkflowParamValueId)){ String defaultValue = workflowParam.getDefaultValue(); // set single value if( * defaultValue == null || "".equals(defaultValue)){ if(workflowParam.getValues().size() == 1){ * workflowParam.setDisplayName(workflowParam.getValues().first().getDisplayName()); } } //set value if not different value else{ * SortedSet<WorkflowParamValue> values = workflowParam.getValues(); for (WorkflowParamValue workflowParamValue : values) { // * equals by value if(defaultValue.equals(workflowParamValue.getValue())){ * workflowParam.setDisplayName(workflowParamValue.getDisplayName()); } } } } // set if not default value else{ Integer * workflowParamValueId = Integer.parseInt(strWorkflowParamValueId); SortedSet<WorkflowParamValue> values = * workflowParam.getValues(); for (WorkflowParamValue workflowParamValue : values) { // equals by ID * if(workflowParamValueId.equals(workflowParamValue.getWorkflowParamValueId())){ * workflowParam.setValue(workflowParamValue.getDisplayName()); Log.info("set value = " + workflowParamValue.getDisplayName()); } } * Log.info("workflowParam display name = " + workflowParam.getDisplayName()); Log.info("workflowParam value name = " + * workflowParam.getValue()); } } */ // set display name /* * for(WorkflowParam workflowParam: visibleParams){ String currValue = workflowParam.getValue(); if(currValue != null) { * SortedSet<WorkflowParamValue> values = workflowParam.getValues(); for (WorkflowParamValue workflowParamValue : values) { * if(currValue.equals(workflowParamValue.getValue())){ workflowParam.setDisplayName(workflowParamValue.getDisplayName()); } } } } */ // set visible params summaryDate.setVisibleParams(visibleParams); // set summary lines for (WorkflowParam differentParam : differentParams) { Integer key = differentParam.getWorkflowParamId(); differentParam.setFiles(selectedFiles.get(key)); SummaryLine summaryLine = new SummaryLine(); summaryLine.setFileMetaType(differentParam.getFileMetaType()); summaryLine.setDisplayName(differentParam.getJsonEscapeDisplayName()); summaryLine.setFiles(selectedFiles.get(key)); SortedSet<WorkflowParam> summaryParams = new TreeSet<>(); for (WorkflowParam visibleParam : visibleParams) { if (summaryLine.getFileMetaType().equals(visibleParam.getFileMetaType())) { summaryParams.add(visibleParam); } else { WorkflowParam emptyParamWithKey = new WorkflowParam(); emptyParamWithKey.setWorkflowParamId(visibleParam.getWorkflowParamId()); emptyParamWithKey.setKey(visibleParam.getKey()); emptyParamWithKey.setValue(""); summaryParams.add(emptyParamWithKey); } } summaryLine.setParams(summaryParams); summaryLines.add(summaryLine); } summaryDate.setSummaryLines(summaryLines); // return params; return summaryDate; } /** * <p> * getIdsSelectedLane. * </p> * * @param request * a {@link javax.servlet.http.HttpServletRequest} object. * @param param * a {@link net.sourceforge.seqware.common.model.WorkflowParam} object. * @return a {@link java.util.List} object. */ public List<Integer> getIdsSelectedLane(HttpServletRequest request, WorkflowParam param) { List<Integer> ids = new LinkedList<>(); Integer key = param.getWorkflowParamId(); Map<Integer, List<String>> selectedNodes = getSelectedNodesFromSession(request); List<String> nodesOneParam = selectedNodes.get(key); for (String node : nodesOneParam) { if (node.indexOf(Constant.LANE_PREFIX) != -1) { ids.add(Constant.getId(node)); } } return ids; } // get current workflow from session /** * <p> * getCurrentWorkflow. * </p> * * @param request * a {@link javax.servlet.http.HttpServletRequest} object. * @return a {@link net.sourceforge.seqware.common.model.Workflow} object. */ public static Workflow getCurrentWorkflow(HttpServletRequest request) { HttpSession session = request.getSession(false); if (session != null) { Object workflow = session.getAttribute("workflow"); if (workflow != null) { return (Workflow) workflow; } } return new Workflow(); } // get current workflow param from session /** * <p> * getCurrentWorkflowParam. * </p> * * @param request * a {@link javax.servlet.http.HttpServletRequest} object. * @return a {@link net.sourceforge.seqware.common.model.WorkflowParam} object. */ public static WorkflowParam getCurrentWorkflowParam(HttpServletRequest request) { HttpSession session = request.getSession(false); if (session != null) { Object workflowParam = session.getAttribute("workflowParam"); if (workflowParam != null) { return (WorkflowParam) workflowParam; } } return new WorkflowParam(); } /** * <p> * saveSelectedWorkflowParamValue. * </p> * * @param request * a {@link javax.servlet.http.HttpServletRequest} object. * @param workflowParamId * a {@link java.lang.Integer} object. * @param strWorkflowParamValueId * a {@link java.lang.String} object. */ public static void saveSelectedWorkflowParamValue(HttpServletRequest request, Integer workflowParamId, String strWorkflowParamValueId) { Map<Integer, String> selectedValues = getSelectedWorkflowParamValue(request); selectedValues.put(workflowParamId, strWorkflowParamValueId); request.getSession(false).setAttribute(SELECTED_VALUES, selectedValues); } /** * <p> * getSelectedWorkflowParamValue. * </p> * * @param request * a {@link javax.servlet.http.HttpServletRequest} object. * @return a {@link java.util.Map} object. */ public static Map<Integer, String> getSelectedWorkflowParamValue(HttpServletRequest request) { Map<Integer, String> selectedValues = (Map<Integer, String>) request.getSession(false).getAttribute(SELECTED_VALUES); if (selectedValues == null) { selectedValues = new HashMap<>(); } return selectedValues; } /** * <p> * getWorkflowRunParam. * </p> * * @param params * a {@link java.util.SortedSet} object. * @return a {@link java.util.SortedSet} object. */ public static SortedSet<WorkflowRunParam> getWorkflowRunParam(SortedSet<WorkflowParam> params) { SortedSet<WorkflowRunParam> runParams = new TreeSet<>(); // SortedSet<WorkflowParam> params = workflow.getWorkflowParams(); // SortedSet<WorkflowParam> params = workflow.getVisibleWorkflowParams(); for (WorkflowParam param : params) { WorkflowRunParam runParam = new WorkflowRunParam(); runParam.setWorkflowRunParamId(param.getWorkflowParamId()); runParam.setKey(param.getKey()); runParam.setType(param.getType()); runParam.setValue(param.getValue()); Log.info("Key = " + param.getKey() + "; Type = " + param.getType() + "; Value = " + param.getValue() + ";"); /* * if(param.getDisplay()){ runParam.setValue(param.getValue()); Log.info("Set value = " + param.getValue() + ";"); }else{ * runParam.setValue(param.getDefaultValue()); Log.info("Set def value = " + param.getDefaultValue() + ";"); } */ runParams.add(runParam); } return runParams; } }