package net.sourceforge.solexatools.util; import java.util.LinkedList; import java.util.List; import java.util.Set; import java.util.SortedSet; 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.Processing; import net.sourceforge.seqware.common.model.Sample; import net.sourceforge.seqware.common.model.Study; import net.sourceforge.seqware.common.model.WorkflowRun; /** * <p> * FindChildUtil class. * </p> * * @author boconnor * @version $Id: $Id */ public class FindChildUtil { /** * <p> * getNodeIds. * </p> * * @param node * a {@link java.lang.Object} object. * @return a {@link java.util.List} object. */ public static List<String> getNodeIds(Object node) { List<String> ids = new LinkedList<>(); if (node instanceof Study) { Study study = (Study) node; ids.add(Constant.STUDY_PREFIX + study.getStudyId()); ids.addAll(getIds(study)); } else if (node instanceof Experiment) { Experiment experiment = (Experiment) node; ids.add(Constant.EXPERIMENT_PREFIX + experiment.getExperimentId()); ids.addAll(getIds(experiment)); } else if (node instanceof Sample) { Sample sample = (Sample) node; ids.add(Constant.SAMPLE_PREFIX + sample.getSampleId()); ids.addAll(getIds(sample)); } else // if(node instanceof Lane){ // Lane lane = (Lane)node; // ids.add(Constant.LANE_PREFIX + lane.getLaneId()); // ids.addAll(getIds(lane)); // }else if (node instanceof IUS) { IUS ius = (IUS) node; ids.add(Constant.IUS_PREFIX + ius.getIusId()); ids.addAll(getIds(ius)); } else if (node instanceof Processing) { Processing processing = (Processing) node; ids.add(Constant.PROCESSING_PREFIX + processing.getProcessingId()); ids.addAll(getIds(processing)); } else if (node instanceof WorkflowRun) { WorkflowRun workflowRun = (WorkflowRun) node; ids.add(Constant.WORKFLOW_RUN_PREFIX + workflowRun.getWorkflowRunId()); SortedSet<Processing> processings = workflowRun.getProcessings(); for (Processing processing : processings) { ids.add(Constant.PROCESSING_PREFIX + processing.getProcessingId()); ids.addAll(getIds(processing)); } // Processing processing = getRootProcessing(workflowRun); // ids.add(Constant.WORKFLOW_RUN_PREFIX + workflowRun.getWorkflowRunId()); } return ids; } /** * <p> * getRootProcessing. * </p> * * @param workflowRun * a {@link net.sourceforge.seqware.common.model.WorkflowRun} object. * @return a {@link net.sourceforge.seqware.common.model.Processing} object. */ public static Processing getRootProcessing(WorkflowRun workflowRun) { Set<Processing> processings = workflowRun.getProcessings(); for (Processing processing : processings) { return processing; } return null; } private static List<String> getIds(Study study) { List<String> ids = new LinkedList<>(); SortedSet<Experiment> experiments = study.getExperiments(); for (Experiment experiment : experiments) { ids.add(Constant.EXPERIMENT_PREFIX + experiment.getExperimentId()); ids.addAll(getIds(experiment)); } Set<Processing> processings = study.getProcessings(); for (Processing processing : processings) { ids.add(Constant.PROCESSING_PREFIX + processing.getProcessingId()); ids.addAll(getIds(processing)); } return ids; } private static List<String> getIds(Experiment experiment) { List<String> ids = new LinkedList<>(); SortedSet<Sample> samples = experiment.getSamples(); for (Sample sample : samples) { ids.add(Constant.SAMPLE_PREFIX + sample.getSampleId()); ids.addAll(getIds(sample)); } Set<Processing> processings = experiment.getProcessings(); for (Processing processing : processings) { ids.add(Constant.PROCESSING_PREFIX + processing.getProcessingId()); ids.addAll(getIds(processing)); } return ids; } private static List<String> getIds(Sample sample) { List<String> ids = new LinkedList<>(); SortedSet<IUS> iuss = sample.getIUS(); for (IUS ius : iuss) { ids.add(Constant.IUS_PREFIX + ius.getIusId()); ids.addAll(getIds(ius)); } /* * SortedSet<Lane> lanes = sample.getLanes(); for (Lane lane : lanes) { ids.add(Constant.LANE_PREFIX +lane.getLaneId()); * ids.addAll(getIds(lane)); } */ Set<Processing> processings = sample.getProcessings(); for (Processing processing : processings) { ids.add(Constant.PROCESSING_PREFIX + processing.getProcessingId()); ids.addAll(getIds(processing)); } Set<Sample> children = sample.getChildren(); for (Sample child : children) { ids.add(Constant.SAMPLE_PREFIX + child.getSampleId()); ids.addAll(getIds(child)); } return ids; } private static List<String> getIds(IUS ius) { List<String> ids = new LinkedList<>(); Set<Processing> processings = ius.getProcessings(); for (Processing processing : processings) { ids.add(Constant.PROCESSING_PREFIX + processing.getProcessingId()); ids.addAll(getIds(processing)); } return ids; } /* * private static List<String> getIds(Lane lane){ List<String> ids = new LinkedList<String>(); Set<Processing> processings = * lane.getProcessings(); for (Processing processing : processings) { ids.add(Constant.PROCESSING_PREFIX +processing.getProcessingId()); * // if(processing.getWorkflowRun() != null){ // ids.add(Constant.WORKFLOW_RUN_PREFIX + * processing.getWorkflowRun().getWorkflowRunId()); // } ids.addAll(getIds(processing)); } return ids; } */ private static List<String> getIds(Processing processing) { List<String> ids = new LinkedList<>(); ids.addAll(getIds(processing.getFiles())); Set<Processing> processings = processing.getChildren(); for (Processing pr : processings) { // select Workflow Run // if(pr.getWorkflowRun() != null){ // Log.info("Proc Id = " + pr.getProcessingId() + " WR Id = " + pr.getWorkflowRun().getWorkflowRunId()); // } // if(pr.getWorkflowRun() != null){ // Log.info("Add WR ID = " + pr.getWorkflowRun().getWorkflowRunId() ); // ids.add(Constant.WORKFLOW_RUN_PREFIX + pr.getWorkflowRun().getWorkflowRunId()); // } // then select Processing ids.add(Constant.PROCESSING_PREFIX + pr.getProcessingId()); // and then select File // ids.addAll(getIds(pr.getFiles())); // also call function ids.addAll(getIds(pr)); } return ids; } private static List<String> getIds(Set<File> files) { List<String> ids = new LinkedList<>(); for (File file : files) { ids.add(Constant.FILE_PREFIX + file.getFileId()); } return ids; } }