package net.sourceforge.solexatools.webapp.controller; import java.util.HashMap; import java.util.List; import javax.servlet.ServletContext; 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.WorkflowRun; import io.seqware.common.model.WorkflowRunStatus; import net.sourceforge.seqware.common.util.Bool; 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> * SummaryLaunchWorkflowController class. * </p> * * @author boconnor * @version $Id: $Id */ public class SummaryLaunchWorkflowController extends MultiActionController { private WorkflowService workflowService; private WorkflowRunService workflowRunService; /** * <p> * Constructor for SummaryLaunchWorkflowController. * </p> */ public SummaryLaunchWorkflowController() { super(); } /** * <p> * Constructor for SummaryLaunchWorkflowController. * </p> * * @param delegate * a {@link java.lang.Object} object. */ public SummaryLaunchWorkflowController(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; Integer workflowRunId = getCurrentWorkflowRun(request).getWorkflowRunId(); Integer workflowId = getCurrentWorkflow(request).getWorkflowId(); WorkflowRun workflowRun = getWorkflowRunService().findByID(workflowRunId); Workflow workflow = getWorkflowService().findByID(workflowId); if (workflowRun != null) { workflowRun.setStatus(WorkflowRunStatus.submitted); if (workflow != null) { workflowRun.setName(workflow.getName()); workflowRun.setCommand(workflow.getCommand()); workflowRun.setTemplate(workflow.getTemplate()); workflowRun.setSeqwareRevision(workflow.getVersion()); workflowRun.setCurrentWorkingDir(workflow.getCwd()); workflowRun.setCommand(workflow.getCommand()); } getWorkflowRunService().update(workflowRun); clearSession(request); } request.setAttribute("isRunningTabSelected", true); modelAndView = new ModelAndView("AnalisysList"); return modelAndView; } /** * 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 { ModelAndView modelAndView = null; Workflow workflow = getCurrentWorkflow(request); // set this attribute for view Select Inputs bar request.setAttribute("isHasSelectedInputMenu", true); if (workflow.getWorkflowParamsWithDifferentFileMetaType().size() > 0) { modelAndView = new ModelAndView("SelectInput"); } else { HashMap<String, Object> model = new HashMap<>(); request.setAttribute(getCommandName(command), workflow); List<Workflow> list = getWorkflowService().list(); model.put("workflows", list); modelAndView = new ModelAndView("LaunchWorkflow", model); } return modelAndView; } /** * 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 handleCancel(HttpServletRequest request, HttpServletResponse response, Workflow command) throws Exception { Registration registration = Security.getRegistration(request); if (registration == null) return new ModelAndView("redirect:/login.htm"); ServletContext context = this.getServletContext(); boolean deleteRealFiles = Bool.parse(context.getInitParameter("delete.files.for.node.deletion")); ModelAndView modelAndView = null; WorkflowRun workflowRun = getCurrentWorkflowRun(request); clearSession(request); workflowRun = getWorkflowRunService().findByID(workflowRun.getWorkflowRunId()); getWorkflowRunService().delete(workflowRun, deleteRealFiles); modelAndView = new ModelAndView("redirect:/launchWorkflowSetup.htm"); return modelAndView; } private void clearSession(HttpServletRequest request) { request.getSession(false).removeAttribute("workflow"); request.getSession(false).removeAttribute("workflowRun"); request.getSession(false).removeAttribute("workflowParam"); request.getSession(false).removeAttribute("summaryData"); LaunchWorkflowUtil.removeSelectedItemsLaunchWorkflow(request); } /** * 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 WorkflowRun getCurrentWorkflowRun(HttpServletRequest request) { HttpSession session = request.getSession(false); if (session != null) { Object workflowRun = session.getAttribute("workflowRun"); if (workflowRun != null) { return (WorkflowRun) workflowRun; } } return new WorkflowRun(); } }