package net.sourceforge.solexatools.webapp.controller; import java.util.HashMap; import java.util.List; import java.util.SortedSet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import net.sourceforge.seqware.common.business.WorkflowRunService; import net.sourceforge.seqware.common.business.WorkflowService; import net.sourceforge.seqware.common.model.Registration; import net.sourceforge.seqware.common.model.Workflow; import net.sourceforge.seqware.common.model.WorkflowParam; import net.sourceforge.seqware.common.model.WorkflowRun; import io.seqware.common.model.WorkflowRunStatus; import net.sourceforge.solexatools.Security; import net.sourceforge.solexatools.util.LaunchWorkflowUtil; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.multiaction.MultiActionController; /** * <p> * SelectInputController class. * </p> * * @author boconnor * @version $Id: $Id */ public class SelectInputController extends MultiActionController { private WorkflowService workflowService; private WorkflowRunService workflowRunService; /** * <p> * Constructor for SelectInputController. * </p> */ public SelectInputController() { super(); } /** * <p> * Constructor for SelectInputController. * </p> * * @param delegate * a {@link java.lang.Object} object. */ public SelectInputController(Object delegate) { super(delegate); } /** * <p> * Getter for the field <code>workflowService</code>. * </p> * * @return a {@link net.sourceforge.seqware.common.business.WorkflowService} object. */ public WorkflowService getWorkflowService() { return workflowService; } /** * <p> * Setter for the field <code>workflowService</code>. * </p> * * @param workflowService * a {@link net.sourceforge.seqware.common.business.WorkflowService} object. */ public void setWorkflowService(WorkflowService workflowService) { this.workflowService = workflowService; } /** * <p> * Getter for the field <code>workflowRunService</code>. * </p> * * @return a {@link net.sourceforge.seqware.common.business.WorkflowRunService} object. */ public WorkflowRunService getWorkflowRunService() { return workflowRunService; } /** * <p> * Setter for the field <code>workflowRunService</code>. * </p> * * @param workflowRunService * a {@link net.sourceforge.seqware.common.business.WorkflowRunService} object. */ public void setWorkflowRunService(WorkflowRunService workflowRunService) { this.workflowRunService = workflowRunService; } /** * Handles the user's request to submit a new study. * * @param request * HttpServletRequest * @param response * HttpServletResponse * @param command * Study command object * @return ModelAndView * @throws java.lang.Exception * if any. */ public ModelAndView handleNext(HttpServletRequest request, HttpServletResponse response, Workflow command) throws Exception { Registration registration = Security.getRegistration(request); if (registration == null) return new ModelAndView("redirect:/login.htm"); ModelAndView modelAndView = null; boolean isHasNextParam = nextWorkflowParam(request); if (isHasNextParam) { modelAndView = new ModelAndView("SelectInput"); } else { // get current workflow Workflow workflow = getCurrentWorkflow(request); SortedSet<WorkflowParam> visibleParams = workflow.getVisibleWorkflowParams(); workflow = getWorkflowService().findByID(workflow.getWorkflowId()); // workflow.setWorkflowParams(visibleParams); // create new workflow WorkflowRun workflowRun = new WorkflowRun(); workflowRun.setWorkflow(workflow); workflowRun.setStatus(WorkflowRunStatus.pending); workflowRun.setOwner(registration); getWorkflowRunService().insert(workflowRun, LaunchWorkflowUtil.getWorkflowRunParam(visibleParams), LaunchWorkflowUtil.getAllSelectedFiles(request)); request.getSession(false).setAttribute("workflowRun", workflowRun); request.setAttribute("summaryData", LaunchWorkflowUtil.getSummaryData(request)); clearSession(request); modelAndView = new ModelAndView("SummaryLaunchWorkflow"); } // set this attribute for view Select Inputs bar request.setAttribute("isHasSelectedInputMenu", true); return modelAndView; } private void clearSession(HttpServletRequest request) { LaunchWorkflowUtil.removeSelectedItemsLaunchWorkflow(request); } /* * private SortedSet<WorkflowRunParam> getWorkflowRunParam(SortedSet<WorkflowParam> params){ SortedSet<WorkflowRunParam> runParams = new * TreeSet<WorkflowRunParam>(); // 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() + ";"); runParams.add(runParam); * } return runParams; } */ private boolean nextWorkflowParam(HttpServletRequest request) { Workflow workflow = getCurrentWorkflow(request); WorkflowParam currWorkflowParam = getCurrentWorkflowParam(request); boolean isHasNext = false; boolean isFindCurr = false; WorkflowParam nextParam = null; // SortedSet<WorkflowParam> workflowParams = workflow.getVisibleWorkflowParams(); SortedSet<WorkflowParam> workflowParams = workflow.getWorkflowParamsWithDifferentFileMetaType(); for (WorkflowParam workflowParam : workflowParams) { if (isFindCurr) { isHasNext = true; nextParam = workflowParam; break; } if (currWorkflowParam.equals(workflowParam)) { isFindCurr = true; } } if (isHasNext) { request.getSession(false).setAttribute("workflowParam", nextParam); } return isHasNext; } /** * Handles the user's request to cancel the study or the study update page. * * @param command * Study command object * @param request * a {@link javax.servlet.http.HttpServletRequest} object. * @param response * a {@link javax.servlet.http.HttpServletResponse} object. * @return a {@link org.springframework.web.servlet.ModelAndView} object. * @throws java.lang.Exception * if any. */ public ModelAndView handlePrevious(HttpServletRequest request, HttpServletResponse response, Workflow command) throws Exception { Registration registration = Security.getRegistration(request); if (registration == null) return new ModelAndView("redirect:/login.htm"); ModelAndView modelAndView = null; boolean isHasPrevParam = previousWorkflowParam(request); if (isHasPrevParam) { modelAndView = new ModelAndView("SelectInput"); } else { HashMap<String, Object> model = new HashMap<>(); Workflow workflow = getCurrentWorkflow(request); request.setAttribute(getCommandName(command), workflow); List<Workflow> list = getWorkflowService().list(); model.put("workflows", list); modelAndView = new ModelAndView("LaunchWorkflow", model); } // set this attribute for view Select Inputs bar request.setAttribute("isHasSelectedInputMenu", true); return modelAndView; } private boolean previousWorkflowParam(HttpServletRequest request) { Workflow workflow = getCurrentWorkflow(request); WorkflowParam currWorkflowParam = getCurrentWorkflowParam(request); boolean isHasPrev = true; boolean isFirstParam = true; // SortedSet<WorkflowParam> workflowParams = workflow.getVisibleWorkflowParams(); SortedSet<WorkflowParam> workflowParams = workflow.getWorkflowParamsWithDifferentFileMetaType(); WorkflowParam previousParam = null; for (WorkflowParam workflowParam : workflowParams) { if (isFirstParam) { isFirstParam = false; if (currWorkflowParam.equals(workflowParam)) { isHasPrev = false; } } if (currWorkflowParam.equals(workflowParam)) { break; } previousParam = workflowParam; } // remove selected items in session if (isHasPrev) { // LaunchWorkflowUtil.removeSelectedItemsLastParam(request); } else { // LaunchWorkflowUtil.removeSelectedItemsLaunchWorkflow(request); } if (previousParam != null) { request.getSession(false).setAttribute("workflowParam", previousParam); } return isHasPrev; } /** * Gets the study from the session. * * @param request * HttpServletRequest * * @return instance of Study from the session, or a new instance if the study is not in the session (e.g. the user is not logged in) */ private 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(); } private 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(); } }