package net.sourceforge.solexatools.util; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import net.sourceforge.seqware.common.model.Experiment; import net.sourceforge.seqware.common.model.File; import net.sourceforge.seqware.common.model.IUS; import net.sourceforge.seqware.common.model.Lane; import net.sourceforge.seqware.common.model.Processing; import net.sourceforge.seqware.common.model.Sample; import net.sourceforge.seqware.common.model.Study; import net.sourceforge.seqware.common.model.WorkflowRun; import net.sourceforge.seqware.common.util.Log; /** * <p> * BulkUtil class. * </p> * * @author boconnor * @version $Id: $Id */ public class BulkUtil { /** * <p> * getFiles. * </p> * * @param request * a {@link javax.servlet.http.HttpServletRequest} object. * @param nameList * a {@link java.lang.String} object. * @return a {@link java.util.List} object. */ public static List<File> getFiles(HttpServletRequest request, String nameList) { List<File> list = null; HttpSession session = request.getSession(false); if (nameList.equals("unknow")) { list = (List<File>) session.getAttribute("bulkDownloadFiles"); if (list == null) { Log.info("Get Analysis Files"); list = (List<File>) session.getAttribute("analysisBulkDownloadFiles"); } } else { list = (List<File>) session.getAttribute(nameList); } if (list == null) { // list = new ArrayList<File>(); list = Collections.synchronizedList(new LinkedList<File>()); } return list; } /** * <p> * updateSelectedIds. * </p> * * @param request * a {@link javax.servlet.http.HttpServletRequest} object. * @param nameSelected * a {@link java.lang.String} object. * @param isSelect * a boolean. * @param nodeIds * a {@link java.util.List} object. */ public static void updateSelectedIds(HttpServletRequest request, String nameSelected, boolean isSelect, List<String> nodeIds) { // List<String> list = (List<String>)request.getSession(false).getAttribute(nameSelected); // // if(list == null){ // list = new LinkedList<String>(); // } List<String> list = getCurrentSelectedNodes(request, nameSelected); // Log.info("nodsIds = " + nodeIds.toString()); for (String id : nodeIds) { if (isSelect) { // list.add(id); // Log.info("ADD"); list = addSelectedId(id, list); } else { // Log.info("Remove"); list.remove(id); } } // Log.info("list selected2 = " + list.toString()); // set updated Selected Ids // request.getSession(false).setAttribute(nameSelected, list); setCurrentSelectedNodes(request, nameSelected, list); } /** * <p> * getSelectedIds. * </p> * * @param request * a {@link javax.servlet.http.HttpServletRequest} object. * @param nameSelected * a {@link java.lang.String} object. * @param ids * an array of {@link java.lang.String} objects. * @param statuses * an array of {@link java.lang.String} objects. * @return a {@link java.lang.String} object. */ public static String getSelectedIds(HttpServletRequest request, String nameSelected, String[] ids, String[] statuses) { String selectedIds = ""; List<String> list = getCurrentSelectedNodes(request, nameSelected); // update Selected Ids for (int i = 0; i < ids.length; i++) { String id = ids[i]; Integer status = Integer.parseInt(statuses[i]); // delete nodes if (status == 0) { // Log.info("Remove select"); list.remove(id); // list = removeId(list, files); } // add new nodes if (status == 1) { // Log.info("Add select"); // list.add(id); list = addSelectedId(id, list); } } // Log.info("list selected1 = " + list.toString()); // set updated Selected Ids // request.getSession(false).setAttribute(nameSelected, list); setCurrentSelectedNodes(request, nameSelected, list); return selectedIds; } private static List<String> addSelectedId(String addId, List<String> list) { boolean isAdd = true; for (String id : list) { if (id.equals(addId)) { isAdd = false; break; } } if (isAdd) { list.add(addId); } return list; } private static List<String> getCurrentSelectedNodes(HttpServletRequest request, String nameSelected) { List<String> list = null; if (nameSelected.equals("launchSelectedNodes")) { list = LaunchWorkflowUtil.getCurrentSelectedNodes(request); } else { list = (List<String>) request.getSession(false).getAttribute(nameSelected); } if (list == null) { list = new LinkedList<>(); } return list; } private static void setCurrentSelectedNodes(HttpServletRequest request, String nameSelected, List<String> list) { if (nameSelected.equals("launchSelectedNodes")) { LaunchWorkflowUtil.setCurrentSelectedNodes(request, list); } else { request.getSession(false).setAttribute(nameSelected, list); } } private static void selectedNessIUSNode(SortedSet<IUS> iuss, List<String> selectedIds) { // check from the list for (String selectedObjectId : selectedIds) { for (IUS ius : iuss) { String iusUIId = Constant.IUS_PREFIX + ius.getIusId(); if (selectedObjectId.equals(iusUIId)) { ius.setIsSelected(true); } } } } /** * <p> * selectIUSNode. * </p> * * @param selectedIds * a {@link java.util.List} object. * @param sample * a {@link net.sourceforge.seqware.common.model.Sample} object. * @return a {@link java.util.SortedSet} object. */ public static SortedSet<IUS> selectIUSNode(List<String> selectedIds, Sample sample) { SortedSet<IUS> iuss = sample.getIUS(); if (selectedIds != null) { selectedNessIUSNode(iuss, selectedIds); SortedSet<Processing> processings = new TreeSet<>(sample.getProcessings()); selectedNessProcessingNode(processings, selectedIds); SortedSet<Sample> samples = new TreeSet<>(sample.getChildren()); selectedNessSampleNode(samples, selectedIds); } return iuss; } private static void selectedNessSampleNode(SortedSet<Sample> samples, List<String> selectedIds) { // check from the list for (String selectedObjectId : selectedIds) { for (Sample sample : samples) { String experimentUIId = Constant.SAMPLE_PREFIX + sample.getSampleId(); if (selectedObjectId.equals(experimentUIId)) { sample.setIsSelected(true); } } } } /** * <p> * selectSampleNode. * </p> * * @param selectedIds * a {@link java.util.List} object. * @param experiment * a {@link net.sourceforge.seqware.common.model.Experiment} object. * @return a {@link java.util.SortedSet} object. */ public static SortedSet<Sample> selectSampleNode(List<String> selectedIds, Experiment experiment) { SortedSet<Sample> samples = experiment.getSamples(); if (selectedIds != null) { SortedSet<Processing> processings = new TreeSet<>(experiment.getProcessings()); selectedNessSampleNode(samples, selectedIds); selectedNessProcessingNode(processings, selectedIds); } return samples; } private static void selectedNessExperimentNode(SortedSet<Experiment> experiments, List<String> selectedIds) { // check from the list for (String selectedObjectId : selectedIds) { for (Experiment experiment : experiments) { String experimentUIId = Constant.EXPERIMENT_PREFIX + experiment.getExperimentId(); if (selectedObjectId.equals(experimentUIId)) { experiment.setIsSelected(true); } } } } /** * <p> * selectExperimentNode. * </p> * * @param selectedIds * a {@link java.util.List} object. * @param study * a {@link net.sourceforge.seqware.common.model.Study} object. * @return a {@link java.util.SortedSet} object. */ public static SortedSet<Experiment> selectExperimentNode(List<String> selectedIds, Study study) { SortedSet<Experiment> experiments = study.getExperiments(); SortedSet<Processing> processings = new TreeSet<>(study.getProcessings()); if (selectedIds != null) { selectedNessExperimentNode(experiments, selectedIds); selectedNessProcessingNode(processings, selectedIds); } return experiments; } /** * <p> * selectStudyNode. * </p> * * @param selectedIds * a {@link java.util.List} object. * @param studies * a {@link java.util.List} object. * @return a {@link java.util.List} object. */ public static List<Study> selectStudyNode(List<String> selectedIds, List<Study> studies) { if (selectedIds != null) { for (String selectedObjectId : selectedIds) { for (Study study : studies) { String studyUIId = Constant.STUDY_PREFIX + study.getStudyId(); if (selectedObjectId.equals(studyUIId)) { study.setIsSelected(true); } } } } return studies; } /** * <p> * selectWorkflowRunNode. * </p> * * @param selectedIds * a {@link java.util.List} object. * @param workflowRuns * a {@link java.util.List} object. * @return a {@link java.util.List} object. */ public static List<WorkflowRun> selectWorkflowRunNode(List<String> selectedIds, List<WorkflowRun> workflowRuns) { if (selectedIds != null) for (String selectedObjectId : selectedIds) { for (WorkflowRun workflowRun : workflowRuns) { String workflowRunUIId = Constant.WORKFLOW_RUN_PREFIX + workflowRun.getWorkflowRunId(); if (selectedObjectId.equals(workflowRunUIId)) { workflowRun.setIsSelected(true); } } } return workflowRuns; } private static void selectedNessProcessingNode(SortedSet<Processing> processings, List<String> selectedIds) { // check from the list for (String selectedObjectId : selectedIds) { for (Processing processing : processings) { String processingUIId = Constant.PROCESSING_PREFIX + processing.getProcessingId(); if (selectedObjectId.equals(processingUIId)) { processing.setIsSelected(true); } } } } /** * <p> * selectProcessingNode. * </p> * * @param selectedIds * a {@link java.util.List} object. * @param workflowRun * a {@link net.sourceforge.seqware.common.model.WorkflowRun} object. * @return a {@link java.util.Set} object. */ public static Set<Processing> selectProcessingNode(List<String> selectedIds, WorkflowRun workflowRun) { SortedSet<Processing> processings = workflowRun.getProcessings(); // select processing if (selectedIds != null) { selectedNessProcessingNode(processings, selectedIds); } return processings; } private static void selectedNessProcessingNode(Set<File> files, Set<Processing> processings, List<String> selectedIds) { // select files for (String selectedObjectId : selectedIds) { for (File file : files) { String fileUIId = Constant.FILE_PREFIX + file.getFileId(); Log.info("fileUI=" + fileUIId); if (selectedObjectId.equals(fileUIId)) { file.setIsSelected(true); } } } List<WorkflowRun> workflowRuns = new ArrayList<>(); // select processing for (String selectedObjectId : selectedIds) { for (Processing processing : processings) { String processingUIId = Constant.PROCESSING_PREFIX + processing.getProcessingId(); if (selectedObjectId.equals(processingUIId)) { processing.setIsSelected(true); if (processing.getWorkflowRun() != null) { processing.getWorkflowRun().setIsSelected(true); } } workflowRuns.add(processing.getWorkflowRun()); } } // select workflow run /* * for (String selectedObjectId : selectedIds) { for(WorkflowRun workflowRun : workflowRuns){ if(workflowRun != null){ String * workflowRunUIId = Constant.WORKFLOW_RUN_PREFIX + workflowRun.getWorkflowRunId(); if(selectedObjectId.equals(workflowRunUIId)){ * workflowRun.setIsSelected(true); } } } } */ } /** * <p> * selectProcessingNode. * </p> * * @param selectedIds * a {@link java.util.List} object. * @param proc * a {@link net.sourceforge.seqware.common.model.Processing} object. * @return a {@link java.util.Set} object. */ public static Set<Processing> selectProcessingNode(List<String> selectedIds, Processing proc) { if (selectedIds == null) return proc.getChildren(); Set<File> files = proc.getFiles(); Set<Processing> processings = proc.getChildren(); selectedNessProcessingNode(files, processings, selectedIds); return processings; } /** * <p> * selectProcessingNode. * </p> * * @param selectedIds * a {@link java.util.List} object. * @param lane * a {@link net.sourceforge.seqware.common.model.Lane} object. * @return a {@link java.util.Set} object. */ public static Set<Processing> selectProcessingNode(List<String> selectedIds, Lane lane) { if (selectedIds == null) return lane.getProcessings(); Set<File> files = new TreeSet<>(); Set<Processing> processings = lane.getProcessings(); selectedNessProcessingNode(files, processings, selectedIds); return processings; } /** * <p> * selectProcessingNode. * </p> * * @param selectedIds * a {@link java.util.List} object. * @param ius * a {@link net.sourceforge.seqware.common.model.IUS} object. * @return a {@link java.util.Set} object. */ public static Set<Processing> selectProcessingNode(List<String> selectedIds, IUS ius) { if (selectedIds == null) return ius.getProcessings(); Set<File> files = new TreeSet<>(); Set<Processing> processings = ius.getProcessings(); selectedNessProcessingNode(files, processings, selectedIds); return processings; } }