package net.sourceforge.seqware.common.metadata; import io.seqware.common.model.ProcessingStatus; import io.seqware.common.model.SequencerRunStatus; import io.seqware.common.model.WorkflowRunStatus; import java.io.IOException; import java.io.Writer; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import net.sourceforge.seqware.common.model.Experiment; import net.sourceforge.seqware.common.model.ExperimentAttribute; import net.sourceforge.seqware.common.model.ExperimentLibraryDesign; import net.sourceforge.seqware.common.model.ExperimentSpotDesign; import net.sourceforge.seqware.common.model.ExperimentSpotDesignReadSpec; import net.sourceforge.seqware.common.model.FileAttribute; import net.sourceforge.seqware.common.model.FileProvenanceParam; import net.sourceforge.seqware.common.model.IUS; import net.sourceforge.seqware.common.model.IUSAttribute; import net.sourceforge.seqware.common.model.Lane; import net.sourceforge.seqware.common.model.LaneAttribute; import net.sourceforge.seqware.common.model.LibrarySelection; import net.sourceforge.seqware.common.model.LibrarySource; import net.sourceforge.seqware.common.model.LibraryStrategy; import net.sourceforge.seqware.common.model.Organism; import net.sourceforge.seqware.common.model.ParentAccessionModel; import net.sourceforge.seqware.common.model.Platform; import net.sourceforge.seqware.common.model.Processing; import net.sourceforge.seqware.common.model.ProcessingAttribute; import net.sourceforge.seqware.common.model.Sample; import net.sourceforge.seqware.common.model.SampleAttribute; import net.sourceforge.seqware.common.model.SequencerRun; import net.sourceforge.seqware.common.model.SequencerRunAttribute; import net.sourceforge.seqware.common.model.Study; import net.sourceforge.seqware.common.model.StudyAttribute; import net.sourceforge.seqware.common.model.StudyType; import net.sourceforge.seqware.common.model.Workflow; import net.sourceforge.seqware.common.model.WorkflowAttribute; import net.sourceforge.seqware.common.model.WorkflowParam; import net.sourceforge.seqware.common.model.WorkflowRun; import net.sourceforge.seqware.common.model.WorkflowRunAttribute; import net.sourceforge.seqware.common.module.ReturnValue; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * <p> * MetadataNoConnection class. * </p> * * @author boconnor@oicr.on.ca * * This Metadata object essentially does nothing. It returns null, 0, or a successful ReturnValue for all methods. This lets us do * absolutely no metadata writeback with objects that expect a validate Metadata object. Keep in mind this may break code that * assumes it's talking to a Database- or WebService-backed Metadata object! * @version $Id: $Id */ public class MetadataNoConnection implements Metadata { private final Logger logger = LoggerFactory.getLogger(MetadataNoConnection.class); @Override public void fileProvenanceReport(Map<FileProvenanceParam, List<String>> params, Writer out) { try { out.write("Last Modified\tStudy Title\tStudy SWID\tStudy Attributes\tExperiment Name\tExperiment SWID\tExperiment Attributes\tParent Sample Name\tParent Sample SWID\tParent Sample Attributes\tSample Name\tSample SWID\tSample Attributes\tSequencer Run Name\tSequencer Run SWID\tSequencer Run Attributes\tLane Name\tLane Number\tLane SWID\tLane Attributes\tIUS Tag\tIUS SWID\tIUS Attributes\tWorkflow Name\tWorkflow Version\tWorkflow SWID\tWorkflow Run Name\tWorkflow Run Status\tWorkflow Run SWID\tProcessing Algorithm\tProcessing SWID\tProcessing Attributes\tFile Meta-Type\tFile SWID\tFile Path\tSkip"); } catch (IOException e) { throw new RuntimeException(e); } } @Override public List<Map<String, String>> fileProvenanceReport(Map<FileProvenanceParam, List<String>> params) { return Collections.emptyList(); } /** {@inheritDoc} */ @Override public ReturnValue addStudy(String title, String description, String centerName, String centerProjectName, Integer studyTypeId) { logger.info("No metadata connection"); return (new ReturnValue(ReturnValue.SUCCESS)); } /** * {@inheritDoc} * * @param experimentLibraryDesignId * the value of experimentLibraryDesignId * @param experimentSpotDesignId * the value of experimentSpotDesignId */ @Override public ReturnValue addExperiment(Integer studySwAccession, Integer platformId, String description, String title, Integer experimentLibraryDesignId, Integer experimentSpotDesignId) { logger.info("No metadata connection"); return (new ReturnValue(ReturnValue.SUCCESS)); } /** * {@inheritDoc} * * @param parentSampleAccession */ @Override public ReturnValue addSample(Integer experimentAccession, Integer parentSampleAccession, Integer organismId, String description, String title) { logger.info("No metadata connection"); return (new ReturnValue(ReturnValue.SUCCESS)); } @Override public ReturnValue addSequencerRun(Integer platformAccession, String name, String description, boolean pairdEnd, boolean skip, String filePath, SequencerRunStatus status) { logger.info("No metadata connection"); return (new ReturnValue(ReturnValue.SUCCESS)); } @Override public ReturnValue addLane(Integer sequencerRunAccession, Integer studyTypeId, Integer libraryStrategyId, Integer librarySelectionId, Integer librarySourceId, String name, String description, String cycleDescriptor, boolean skip, Integer laneNumber) { logger.info("No metadata connection"); return (new ReturnValue(ReturnValue.SUCCESS)); } @Override public ReturnValue addIUS(Integer laneAccession, Integer sampleAccession, String name, String description, String barcode, boolean skip) { logger.info("No metadata connection"); return (new ReturnValue(ReturnValue.SUCCESS)); } @Override public List<Platform> getPlatforms() { logger.info("No metadata connection"); return (new ArrayList<>()); } @Override public List<Organism> getOrganisms() { logger.info("No metadata connection"); return (new ArrayList<>()); } @Override public List<StudyType> getStudyTypes() { logger.info("No metadata connection"); return (new ArrayList<>()); } @Override public List<LibraryStrategy> getLibraryStrategies() { logger.info("No metadata connection"); return (new ArrayList<>()); } @Override public List<LibrarySelection> getLibrarySelections() { logger.info("No metadata connection"); return (new ArrayList<>()); } @Override public List<LibrarySource> getLibrarySource() { logger.info("No metadata connection"); return (new ArrayList<>()); } // FIXME: This should all be a transaction. For now, we end up with cruft in // the DB if something failed. /* * FIXME: instead of taking in parentID's here, need to take in tubles to discuss the relationship. Different types of relationships: * match1 -> variant1 is process match -> variant is algorithm match -> match1, match2, etc is subprocess */ /** {@inheritDoc} */ @Override public ReturnValue add_empty_processing_event(int[] parentIDs) { logger.info("No metadata connection"); ReturnValue finished = new ReturnValue(ReturnValue.PROCESSING); finished.setExitStatus(ReturnValue.SUCCESS); return finished; } /** {@inheritDoc} */ @Override public ReturnValue add_empty_processing_event_by_parent_accession(int[] parentAccessions) { logger.info("No metadata connection"); ReturnValue finished = new ReturnValue(ReturnValue.PROCESSING); finished.setExitStatus(ReturnValue.SUCCESS); return finished; } /** * {@inheritDoc} * * This maps processing_id to sw_accession for that event. */ @Override public int mapProcessingIdToAccession(int processingId) { logger.info("No metadata connection"); return (0); } /** * {@inheritDoc} * * TODO: needs to support more relationship types, but will need to add to the SQL schema to support this */ @Override public boolean linkWorkflowRunAndParent(int workflowRunId, int parentAccession) throws SQLException { logger.info("No metadata connection"); return (true); } /** {@inheritDoc} */ @Override public ReturnValue processing_event_to_task_group(int processingID, int parentIDs[], int[] childIDs, String algorithm, String description) { logger.info("No metadata connection"); ReturnValue finished = new ReturnValue(ReturnValue.PROCESSING); finished.setExitStatus(ReturnValue.SUCCESS); return finished; } /** {@inheritDoc} */ @Override public ReturnValue add_task_group(int parentIDs[], int[] childIDs, String algorithm, String description) { logger.info("No metadata connection"); ReturnValue finished = new ReturnValue(ReturnValue.PROCESSING); finished.setExitStatus(ReturnValue.SUCCESS); return finished; } /** {@inheritDoc} */ @Override /* * FIXME: this should check if association is already made, to make duplicates impossible */ public ReturnValue associate_processing_event_with_parents_and_child(int processingID, int[] parentIDs, int[] childIDs) { logger.info("No metadata connection"); ReturnValue finished = new ReturnValue(ReturnValue.PROCESSING); finished.setExitStatus(ReturnValue.SUCCESS); return finished; } /** {@inheritDoc} */ @Override public ReturnValue update_processing_status(int processingID, ProcessingStatus status) { logger.info("No metadata connection"); ReturnValue finished = new ReturnValue(ReturnValue.PROCESSING); finished.setExitStatus(ReturnValue.SUCCESS); return finished; } /** {@inheritDoc} */ @Override public int add_workflow_run(int workflowAccession) { logger.info("No metadata connection"); return (0); } /** {@inheritDoc} */ @Override public int get_workflow_run_accession(int workflowRunId) { logger.info("No metadata connection"); return (0); } /** {@inheritDoc} */ @Override public int get_workflow_run_id(int workflowRunAccession) { logger.info("No metadata connection"); return (0); } /** {@inheritDoc} */ @Override public WorkflowRun getWorkflowRun(int workflowRunAccession) { return null; } /** {@inheritDoc} */ @Override public void add_workflow_run_ancestor(int workflowRunAccession, int processingId) { logger.info("No metadata connection"); } /** * {@inheritDoc} * * @param workflowRunAccession */ @Override public ReturnValue update_processing_workflow_run(int processingID, int workflowRunAccession) { logger.info("No metadata connection"); ReturnValue finished = new ReturnValue(ReturnValue.PROCESSING); finished.setExitStatus(ReturnValue.SUCCESS); return finished; } /** * {@inheritDoc} * * @param inputFiles */ @Override public ReturnValue update_workflow_run(int workflowRunId, String pegasusCmd, String workflowTemplate, WorkflowRunStatus status, String statusCmd, String workingDirectory, String dax, String ini, String host, String stdErr, String stdOut, String workflowEngine, Set<Integer> inputFiles) { logger.info("No metadata connection"); ReturnValue finished = new ReturnValue(ReturnValue.PROCESSING); finished.setExitStatus(ReturnValue.SUCCESS); return finished; } @Override public void updateWorkflowRun(WorkflowRun wr) { logger.info("No metadata connection"); } /** {@inheritDoc} */ @Override public ReturnValue update_processing_event(int processingID, ReturnValue retval) { logger.info("No metadata connection"); ReturnValue finished = new ReturnValue(ReturnValue.PROCESSING); finished.setExitStatus(ReturnValue.SUCCESS); return finished; } /** {@inheritDoc} */ @Override public ReturnValue clean_up() { logger.info("No metadata connection"); ReturnValue finished = new ReturnValue(ReturnValue.PROCESSING); finished.setExitStatus(ReturnValue.SUCCESS); return finished; } /** * {@inheritDoc} * */ @Override public ReturnValue addWorkflow(String name, String version, String description, String baseCommand, String configFile, String templateFile, String provisionDir, boolean storeProvisionDir, String archiveZip, boolean storeArchiveZip, String workflowClass, String workflowType, String workflowEngine, String seqwareVersion) { logger.info("No metadata connection"); ReturnValue finished = new ReturnValue(ReturnValue.PROCESSING); finished.setExitStatus(ReturnValue.SUCCESS); return finished; } /** {@inheritDoc} */ @Override public Map<String, String> get_workflow_info(int workflowAccession) { logger.info("No metadata connection"); HashMap<String, String> map = new HashMap<>(); return (map); } /** {@inheritDoc} */ @Override public Boolean isDuplicateFile(String filepath) { logger.info("No metadata connection"); return false; } /** {@inheritDoc} */ @Override public ReturnValue updateWorkflow(int workflowId, String permanentBundleLocation) { logger.info("No metadata connection"); return new ReturnValue(); } /** {@inheritDoc} */ @Override public String listInstalledWorkflows() { logger.info("No metadata connection"); return ""; } /** {@inheritDoc} */ @Override public String listInstalledWorkflowParams(String workflowAccession) { logger.info("No metadata connection"); return ""; } /** {@inheritDoc} */ @Override public int getWorkflowAccession(String name, String version) { logger.info("No metadata connection"); return 1; } /** {@inheritDoc} */ @Override public List<WorkflowRun> getWorkflowRunsByStatus(WorkflowRunStatus status) { logger.info("No metadata connection"); return new ArrayList<>(); } /** {@inheritDoc} */ @Override public WorkflowRun getWorkflowRunWithWorkflow(String workflowRunAccession) { return null; } /** * <p> * getAllStudies. * </p> * * @return a {@link java.util.List} object. */ @Override public List<Study> getAllStudies() { logger.info("No metadata connection"); return new ArrayList<>(); } /** * <p> * getSequencerRunReport. * </p> * * @return a {@link java.lang.String} object. */ @Override public String getSequencerRunReport() { logger.info("No metadata connection"); return null; } /** * {@inheritDoc} * * @param iusSWID */ @Override public void annotateIUS(int iusSWID, IUSAttribute iusAtt, Boolean skip) { logger.info("No metadata connection"); } /** {@inheritDoc} */ @Override public void annotateLane(int laneSWID, LaneAttribute laneAtt, Boolean skip) { logger.info("No metadata connection"); } /** {@inheritDoc} */ @Override public void annotateSequencerRun(int sequencerRunSWID, SequencerRunAttribute sequencerRunAtt, Boolean skip) { logger.info("No metadata connection"); } /** {@inheritDoc} */ @Override public void annotateExperiment(int experimentSWID, ExperimentAttribute att, Boolean skip) { logger.info("No metadata connection"); } /** {@inheritDoc} */ @Override public void annotateProcessing(int processingSWID, ProcessingAttribute att, Boolean skip) { logger.info("No metadata connection"); } /** {@inheritDoc} */ @Override public void annotateSample(int sampleSWID, SampleAttribute att, Boolean skip) { logger.info("No metadata connection"); } /** {@inheritDoc} */ @Override public void annotateStudy(int studySWID, StudyAttribute att, Boolean skip) { logger.info("No metadata connection"); } /** {@inheritDoc} */ @Override public String getWorkflowRunReport(int workflowRunSWID) { logger.info("No metadata connection"); return ""; } /** {@inheritDoc} */ @Override public String getWorkflowRunReport(int workflowSWID, Date earliestDate, Date latestDate) { logger.info("No metadata connection"); return ""; } /** {@inheritDoc} */ @Override public String getWorkflowRunReport(Date earliestDate, Date latestDate) { logger.info("No metadata connection"); return ""; } /** {@inheritDoc} */ @Override public net.sourceforge.seqware.common.model.File getFile(int swAccession) { return new net.sourceforge.seqware.common.model.File(); } /** {@inheritDoc} */ @Override public SortedSet<WorkflowParam> getWorkflowParams(String swAccession) { logger.info("No metadata connection"); return new TreeSet<>(); } /** {@inheritDoc} */ @Override public void annotateWorkflow(int workflowSWID, WorkflowAttribute att, Boolean skip) { // TODO Auto-generated method stub } /** {@inheritDoc} */ @Override public void annotateWorkflowRun(int workflowrunSWID, WorkflowRunAttribute att, Boolean skip) { // TODO Auto-generated method stub } /** {@inheritDoc} */ @Override public void annotateIUS(int laneSWID, Set<IUSAttribute> iusAtts) { // TODO Auto-generated method stub } /** {@inheritDoc} */ @Override public void annotateLane(int laneSWID, Set<LaneAttribute> laneAtts) { // TODO Auto-generated method stub } /** {@inheritDoc} */ @Override public void annotateSequencerRun(int sequencerRunSWID, Set<SequencerRunAttribute> sequencerRunAtts) { // TODO Auto-generated method stub } /** {@inheritDoc} */ @Override public void annotateExperiment(int experimentSWID, Set<ExperimentAttribute> atts) { // TODO Auto-generated method stub } /** {@inheritDoc} */ @Override public void annotateProcessing(int processingSWID, Set<ProcessingAttribute> atts) { // TODO Auto-generated method stub } /** {@inheritDoc} */ @Override public void annotateSample(int sampleSWID, Set<SampleAttribute> atts) { // TODO Auto-generated method stub } /** {@inheritDoc} */ @Override public void annotateStudy(int studySWID, Set<StudyAttribute> atts) { // TODO Auto-generated method stub } /** {@inheritDoc} */ @Override public void annotateWorkflow(int workflowSWID, Set<WorkflowAttribute> atts) { // TODO Auto-generated method stub } /** {@inheritDoc} */ @Override public void annotateWorkflowRun(int workflowSWID, Set<WorkflowRunAttribute> atts) { // TODO Auto-generated method stub } @Override public String getProcessingRelations(String swAccession) { // TODO Auto-generated method stub return ""; } @Override public String getWorkflowRunReportStdErr(int workflowRunSWID) { return (""); } @Override public String getWorkflowRunReportStdOut(int workflowRunSWID) { return (""); } @Override public Workflow getWorkflow(int workflowAccession) { logger.info("No metadata connection"); return null; } @Override public List<SequencerRun> getAllSequencerRuns() { return new ArrayList<>(); } @Override public List<Lane> getLanesFrom(int sequencerRunAccession) { return new ArrayList<>(); } @Override public List<IUS> getIUSFrom(int laneOrSampleAccession) { return new ArrayList<>(); } @Override public List<Experiment> getExperimentsFrom(int studyAccession) { return new ArrayList<>(); } @Override public List<Sample> getSamplesFrom(int experimentAccession) { return new ArrayList<>(); } @Override public List<Sample> getChildSamplesFrom(int parentSampleAccession) { return new ArrayList<>(); } @Override public List<Sample> getParentSamplesFrom(int childSampleAccession) { return new ArrayList<>(); } @Override public List<WorkflowRun> getWorkflowRunsAssociatedWithInputFiles(List<Integer> fileAccessions) { return new ArrayList<>(); } @Override public List<WorkflowRun> getWorkflowRunsAssociatedWithInputFiles(List<Integer> fileAccessions, List<Integer> workflowAccessions) { return new ArrayList<>(); } @Override public List<WorkflowRun> getWorkflowRunsAssociatedWithFiles(List<Integer> fileAccessions, String search_type) { return new ArrayList<>(); } @Override public void annotateFile(int laneSWID, FileAttribute iusAtt, Boolean skip) { logger.info("No metadata connection"); } @Override public void annotateFile(int fileSWID, Set<FileAttribute> iusAtts) { logger.info("No metadata connection"); } @Override public Lane getLane(int laneAccession) { logger.info("No metadata connection"); return null; } @Override public SequencerRun getSequencerRun(int sequencerRunAccession) { logger.info("No metadata connection"); return null; } @Override public List<ExperimentLibraryDesign> getExperimentLibraryDesigns() { logger.info("No metadata connection"); return null; } @Override public List<ExperimentSpotDesignReadSpec> getExperimentSpotDesignReadSpecs() { logger.info("No metadata connection"); return null; } @Override public List<ExperimentSpotDesign> getExperimentSpotDesigns() { logger.info("No metadata connection"); return null; } @Override public Experiment getExperiment(int swAccession) { logger.info("No metadata connection"); return null; } @Override public List<ParentAccessionModel> getViaParentAccessions(int[] potentialParentAccessions) { logger.info("No metadata connection"); return null; } @Override public List<Object> getViaAccessions(int[] accessions) { logger.info("No metadata connection"); return null; } @Override public void fileProvenanceReportTrigger() { logger.info("No metadata connection"); } @Override public List<Study> getStudyByName(String name) { logger.info("No metadata connection"); return null; } @Override public List<Sample> getSampleByName(String name) { logger.info("No metadata connection"); return null; } @Override public SequencerRun getSequencerRunByName(String name) { logger.info("No metadata connection"); return null; } @Override public Processing getProcessing(int processingAccession) { logger.info("No metadata connection"); return null; } @Override public String getWorkflowRunReport(WorkflowRunStatus status, Date earliestDate, Date latestDate) { logger.info("No metadata connection"); return null; } @Override public String getWorkflowRunReport(Integer workflowSWID, WorkflowRunStatus status, Date earliestDate, Date latestDate) { logger.info("No metadata connection"); return null; } @Override public List<WorkflowRun> getWorkflowRunsByStatusCmd(String statusCmd) { logger.info("No metadata connection"); return null; } @Override public Map<String, String> getEnvironmentReport() { logger.info("No metadata connection"); return null; } @Override public boolean checkClientServerMatchingVersion() { return false; } @Override public IUS getIUS(int swAccession) { logger.info("No metadata connection"); return null; } @Override public Sample getSample(int swAccession) { logger.info("No metadata connection"); return null; } @Override public Study getStudy(int swAccession) { logger.info("No metadata connection"); return null; } }