/*
* Copyright (C) 2012 SeqWare
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package net.sourceforge.seqware.common.hibernate;
import java.io.IOException;
import java.io.Writer;
import net.sourceforge.seqware.common.module.FileMetadata;
import net.sourceforge.seqware.common.module.ReturnValue;
/**
* Static methods that provide a bridge between BasicDecider and the old SymlinkFileReporter.
*
* The history behind this is that the BasicDecider used to rely upon the code shared with SymlinkFileReporter. Deciders that are based on
* BasicDecider thus code directly against these headers. This class also used to handle all of the actual traversal of the database
* hierarchy to find files, hence the name.
*
* @author mtaschuk
* @version $Id: $Id
*/
public class FindAllTheFiles {
public static void addAttributeToReturnValue(ReturnValue ret, String key, String value) {
if (ret.getAttribute(key) != null) {
ret.setAttribute(key, ret.getAttribute(key) + ";" + value);
} else {
ret.setAttribute(key, value);
}
}
public enum Header {
STUDY_TITLE("Study Title"), STUDY_SWA("Study SWID"), STUDY_TAG_PREFIX("study."), STUDY_ATTRIBUTES("Study Attributes"), EXPERIMENT_NAME(
"Experiment Name"), EXPERIMENT_SWA("Experiment SWID"), EXPERIMENT_TAG_PREFIX("experiment."), EXPERIMENT_ATTRIBUTES(
"Experiment Attributes"), PARENT_SAMPLE_NAME("Parent Sample Name"), PARENT_SAMPLE_SWA("Parent Sample SWID"), PARENT_SAMPLE_TAG_PREFIX(
"parent_sample."), PARENT_SAMPLE_ATTRIBUTES("Parent Sample Attributes"), SAMPLE_NAME("Sample Name"), SAMPLE_SWA(
"Sample SWID"), SAMPLE_TAG_PREFIX("sample."), SAMPLE_ATTRIBUTES("Sample Attributes"), IUS_SWA("IUS SWID"), IUS_TAG(
"IUS Tag"), IUS_TAG_PREFIX("ius."), IUS_ATTRIBUTES("IUS Attributes"), LANE_NAME("Lane Name"), LANE_SWA("Lane SWID"), LANE_NUM(
"Lane Number"), LANE_TAG_PREFIX("lane."), LANE_ATTRIBUTES("Lane Attributes"), SEQUENCER_RUN_NAME("Sequencer Run Name"), SEQUENCER_RUN_SWA(
"Sequencer Run SWID"), SEQUENCER_RUN_TAG_PREFIX("sequencerrun."), SEQUENCER_RUN_ATTRIBUTES("Sequencer Run Attributes"), WORKFLOW_RUN_NAME(
"Workflow Run Name"), WORKFLOW_RUN_SWA("Workflow Run SWID"), WORKFLOW_RUN_STATUS("Workflow Run Status"), WORKFLOW_NAME(
"Workflow Name"), WORKFLOW_SWA("Workflow SWID"), WORKFLOW_VERSION("Workflow Version"), FILE_SWA("File SWID"), FILE_DESCRIPTION(
"File Description"), FILE_MD5SUM("File Md5sum"), FILE_SIZE("File Size"), FILE_PATH("File Path"), FILE_META_TYPE(
"File Meta-Type"), FILE_TAG_PREFIX("file."), FILE_ATTRIBUTES("File Attributes"), PROCESSING_DATE("Last Modified"), PROCESSING_SWID(
"Processing SWID"), PROCESSING_ALGO("Processing Algorithm"), PROCESSING_TAG_PREFIX("processing."), PROCESSING_ATTRIBUTES(
"Processing Attributes"), INPUT_FILE_META_TYPES("Input File Meta-Types"), INPUT_FILE_SWIDS("Input File SWIDs"), INPUT_FILE_PATHS(
"Input File Paths"), SKIP("Skip");
private final String title;
Header(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
}
/** Constant <code>STUDY_TITLE="Header.STUDY_TITLE.getTitle()"</code> */
public static final String STUDY_TITLE = Header.STUDY_TITLE.getTitle();
/** Constant <code>STUDY_SWA="Header.STUDY_SWA.getTitle()"</code> */
public static final String STUDY_SWA = Header.STUDY_SWA.getTitle();
/** Constant <code>STUDY_TAG_PREFIX="Header.STUDY_TAG_PREFIX.getTitle()"</code> */
public static final String STUDY_TAG_PREFIX = Header.STUDY_TAG_PREFIX.getTitle();
/** Constant <code>STUDY_ATTRIBUTES="Header.STUDY_ATTRIBUTES.getTitle()"</code> */
public static final String STUDY_ATTRIBUTES = Header.STUDY_ATTRIBUTES.getTitle();
/** Constant <code>EXPERIMENT_NAME="Header.EXPERIMENT_NAME.getTitle()"</code> */
public static final String EXPERIMENT_NAME = Header.EXPERIMENT_NAME.getTitle();
/** Constant <code>EXPERIMENT_SWA="Header.EXPERIMENT_SWA.getTitle()"</code> */
public static final String EXPERIMENT_SWA = Header.EXPERIMENT_SWA.getTitle();
/** Constant <code>EXPERIMENT_TAG_PREFIX="Header.EXPERIMENT_TAG_PREFIX.getTitle()"</code> */
public static final String EXPERIMENT_TAG_PREFIX = Header.EXPERIMENT_TAG_PREFIX.getTitle();
/** Constant <code>EXPERIMENT_ATTRIBUTES="Header.EXPERIMENT_ATTRIBUTES.getTitle()"</code> */
public static final String EXPERIMENT_ATTRIBUTES = Header.EXPERIMENT_ATTRIBUTES.getTitle();
/** Constant <code>PARENT_SAMPLE_NAME="Header.PARENT_SAMPLE_NAME.getTitle()"</code> */
public static final String PARENT_SAMPLE_NAME = Header.PARENT_SAMPLE_NAME.getTitle();
/** Constant <code>PARENT_SAMPLE_SWA="Header.PARENT_SAMPLE_SWA.getTitle()"</code> */
public static final String PARENT_SAMPLE_SWA = Header.PARENT_SAMPLE_SWA.getTitle();
/** Constant <code>PARENT_SAMPLE_TAG_PREFIX="Header.PARENT_SAMPLE_TAG_PREFIX.getTitl"{trunked}</code> */
public static final String PARENT_SAMPLE_TAG_PREFIX = Header.PARENT_SAMPLE_TAG_PREFIX.getTitle();
/** Constant <code>PARENT_SAMPLE_ATTRIBUTES="Header.PARENT_SAMPLE_ATTRIBUTES.getTitl"{trunked}</code> */
public static final String PARENT_SAMPLE_ATTRIBUTES = Header.PARENT_SAMPLE_ATTRIBUTES.getTitle();
/** Constant <code>SAMPLE_NAME="Header.SAMPLE_NAME.getTitle()"</code> */
public static final String SAMPLE_NAME = Header.SAMPLE_NAME.getTitle();
/** Constant <code>SAMPLE_SWA="Header.SAMPLE_SWA.getTitle()"</code> */
public static final String SAMPLE_SWA = Header.SAMPLE_SWA.getTitle();
/** Constant <code>SAMPLE_TAG_PREFIX="Header.SAMPLE_TAG_PREFIX.getTitle()"</code> */
public static final String SAMPLE_TAG_PREFIX = Header.SAMPLE_TAG_PREFIX.getTitle();
/** Constant <code>SAMPLE_ATTRIBUTES="Header.SAMPLE_ATTRIBUTES.getTitle()"</code> */
public static final String SAMPLE_ATTRIBUTES = Header.SAMPLE_ATTRIBUTES.getTitle();
/** Constant <code>IUS_SWA="Header.IUS_SWA.getTitle()"</code> */
public static final String IUS_SWA = Header.IUS_SWA.getTitle();
/** Constant <code>IUS_TAG="Header.IUS_TAG.getTitle()"</code> */
public static final String IUS_TAG = Header.IUS_TAG.getTitle();
/** Constant <code>IUS_TAG_PREFIX="Header.IUS_TAG_PREFIX.getTitle()"</code> */
public static final String IUS_TAG_PREFIX = Header.IUS_TAG_PREFIX.getTitle();
/** Constant <code>IUS_ATTRIBUTES="Header.IUS_ATTRIBUTES.getTitle()"</code> */
public static final String IUS_ATTRIBUTES = Header.IUS_ATTRIBUTES.getTitle();
/** Constant <code>LANE_NAME="Header.LANE_NAME.getTitle()"</code> */
public static final String LANE_NAME = Header.LANE_NAME.getTitle();
/** Constant <code>LANE_SWA="Header.LANE_SWA.getTitle()"</code> */
public static final String LANE_SWA = Header.LANE_SWA.getTitle();
/** Constant <code>LANE_NUM="Header.LANE_NUM.getTitle()"</code> */
public static final String LANE_NUM = Header.LANE_NUM.getTitle();
/** Constant <code>LANE_TAG_PREFIX="Header.LANE_TAG_PREFIX.getTitle()"</code> */
public static final String LANE_TAG_PREFIX = Header.LANE_TAG_PREFIX.getTitle();
/** Constant <code>LANE_ATTRIBUTES="Header.LANE_ATTRIBUTES.getTitle()"</code> */
public static final String LANE_ATTRIBUTES = Header.LANE_ATTRIBUTES.getTitle();
/** Constant <code>SEQUENCER_RUN_NAME="Header.SEQUENCER_RUN_NAME.getTitle()"</code> */
public static final String SEQUENCER_RUN_NAME = Header.SEQUENCER_RUN_NAME.getTitle();
/** Constant <code>SEQUENCER_RUN_SWA="Header.SEQUENCER_RUN_SWA.getTitle()"</code> */
public static final String SEQUENCER_RUN_SWA = Header.SEQUENCER_RUN_SWA.getTitle();
/** Constant <code>SEQUENCER_RUN_TAG_PREFIX="Header.SEQUENCER_RUN_TAG_PREFIX.getTitl"{trunked}</code> */
public static final String SEQUENCER_RUN_TAG_PREFIX = Header.SEQUENCER_RUN_TAG_PREFIX.getTitle();
/** Constant <code>SEQUENCER_RUN_ATTRIBUTES="Header.SEQUENCER_RUN_ATTRIBUTES.getTitl"{trunked}</code> */
public static final String SEQUENCER_RUN_ATTRIBUTES = Header.SEQUENCER_RUN_ATTRIBUTES.getTitle();
/** Constant <code>WORKFLOW_RUN_NAME="Header.WORKFLOW_RUN_NAME.getTitle()"</code> */
public static final String WORKFLOW_RUN_NAME = Header.WORKFLOW_RUN_NAME.getTitle();
/** Constant <code>WORKFLOW_RUN_SWA="Header.WORKFLOW_RUN_SWA.getTitle()"</code> */
public static final String WORKFLOW_RUN_SWA = Header.WORKFLOW_RUN_SWA.getTitle();
/** Constant <code>WORKFLOW_RUN_STATUS="Header.WORKFLOW_RUN_STATUS.getTitle()"</code> */
public static final String WORKFLOW_RUN_STATUS = Header.WORKFLOW_RUN_STATUS.getTitle();
/** Constant <code>WORKFLOW_NAME="Header.WORKFLOW_NAME.getTitle()"</code> */
public static final String WORKFLOW_NAME = Header.WORKFLOW_NAME.getTitle();
/** Constant <code>WORKFLOW_SWA="Header.WORKFLOW_SWA.getTitle()"</code> */
public static final String WORKFLOW_SWA = Header.WORKFLOW_SWA.getTitle();
/** Constant <code>WORKFLOW_VERSION="Header.WORKFLOW_VERSION.getTitle()"</code> */
public static final String WORKFLOW_VERSION = Header.WORKFLOW_VERSION.getTitle();
/** Constant <code>FILE_SWA="Header.FILE_SWA.getTitle()"</code> */
public static final String FILE_SWA = Header.FILE_SWA.getTitle();
public static final String FILE_TAG_PREFIX = Header.FILE_TAG_PREFIX.getTitle();
public static final String FILE_ATTRIBUTES = Header.FILE_ATTRIBUTES.getTitle();
public static final String FILE_DESCRIPTION = Header.FILE_DESCRIPTION.getTitle();
public static final String FILE_SIZE = Header.FILE_SIZE.getTitle();
public static final String FILE_MD5SUM = Header.FILE_MD5SUM.getTitle();
public static final String FILE_PATH = Header.FILE_PATH.getTitle();
/** Constant <code>PROCESSING_DATE="Header.PROCESSING_DATE.getTitle()"</code> */
public static final String PROCESSING_DATE = Header.PROCESSING_DATE.getTitle();
/** Constant <code>PROCESSING_SWID="Header.PROCESSING_SWID.getTitle()"</code> */
public static final String PROCESSING_SWID = Header.PROCESSING_SWID.getTitle();
/** Constant <code>PROCESSING_ALGO="Header.PROCESSING_ALGO.getTitle()"</code> */
public static final String PROCESSING_ALGO = Header.PROCESSING_ALGO.getTitle();
/** Constant <code>PROCESSING_TAG_PREFIX="Header.PROCESSING_TAG_PREFIX.getTitle()"</code> */
public static final String PROCESSING_TAG_PREFIX = Header.PROCESSING_TAG_PREFIX.getTitle();
/** Constant <code>PROCESSING_ATTRIBUTES="Header.PROCESSING_ATTRIBUTES.getTitle()"</code> */
public static final String PROCESSING_ATTRIBUTES = Header.PROCESSING_ATTRIBUTES.getTitle();
public static final String INPUT_FILE_META_TYPES = Header.INPUT_FILE_META_TYPES.getTitle();
public static final String INPUT_FILE_FILE_PATHS = Header.INPUT_FILE_PATHS.getTitle();
public static final String INPUT_FILE_SWIDS = Header.INPUT_FILE_SWIDS.getTitle();
public static void print(Writer writer, ReturnValue ret, String studyName, boolean showStatus, FileMetadata fm) throws IOException {
print(writer, ret, studyName, showStatus, fm, false);
}
/**
* Prints a line to the Excel spreadsheet.
*
* @param reportInputFiles
* @throws java.io.IOException
* if any.
* @param writer
* a {@link java.io.Writer} object.
* @param ret
* a {@link net.sourceforge.seqware.common.module.ReturnValue} object.
* @param studyName
* a {@link java.lang.String} object.
* @param showStatus
* a boolean.
* @param fm
* a {@link net.sourceforge.seqware.common.module.FileMetadata} object.
*/
public static void print(Writer writer, ReturnValue ret, String studyName, boolean showStatus, FileMetadata fm, boolean reportInputFiles)
throws IOException {
StringBuilder parentSampleTag = new StringBuilder();
StringBuilder sampleTag = new StringBuilder();
StringBuilder laneTag = new StringBuilder();
StringBuilder studyTag = new StringBuilder();
StringBuilder experimentTag = new StringBuilder();
StringBuilder iusTag = new StringBuilder();
StringBuilder seqencerrunTag = new StringBuilder();
StringBuilder processingTag = new StringBuilder();
StringBuilder fileTag = new StringBuilder();
for (String key : ret.getAttributes().keySet()) {
if (key.startsWith(FindAllTheFiles.PARENT_SAMPLE_TAG_PREFIX)) {
parentSampleTag.append(key).append("=").append(ret.getAttribute(key)).append(";");
} else if (key.startsWith(FindAllTheFiles.SAMPLE_TAG_PREFIX)) {
sampleTag.append(key).append("=").append(ret.getAttribute(key)).append(";");
} else if (key.startsWith(FindAllTheFiles.LANE_TAG_PREFIX)) {
laneTag.append(key).append("=").append(ret.getAttribute(key)).append(";");
} else if (key.startsWith(FindAllTheFiles.STUDY_TAG_PREFIX)) {
studyTag.append(key).append("=").append(ret.getAttribute(key)).append(";");
} else if (key.startsWith(FindAllTheFiles.EXPERIMENT_TAG_PREFIX)) {
experimentTag.append(key).append("=").append(ret.getAttribute(key)).append(";");
} else if (key.startsWith(FindAllTheFiles.IUS_TAG_PREFIX)) {
iusTag.append(key).append("=").append(ret.getAttribute(key)).append(";");
} else if (key.startsWith(FindAllTheFiles.SEQUENCER_RUN_TAG_PREFIX)) {
seqencerrunTag.append(key).append("=").append(ret.getAttribute(key)).append(";");
} else if (key.startsWith(FindAllTheFiles.PROCESSING_TAG_PREFIX)) {
processingTag.append(key).append("=").append(ret.getAttribute(key)).append(";");
} else if (key.startsWith(FindAllTheFiles.FILE_TAG_PREFIX)) {
fileTag.append(key).append("=").append(ret.getAttribute(key)).append(";");
}
}
StringBuilder sb = new StringBuilder();
sb.append(ret.getAttribute(PROCESSING_DATE)).append("\t");
sb.append(studyName).append("\t");
sb.append(ret.getAttribute(STUDY_SWA)).append("\t");
sb.append(studyTag.toString()).append("\t");
sb.append(ret.getAttribute(EXPERIMENT_NAME)).append("\t");
sb.append(ret.getAttribute(EXPERIMENT_SWA)).append("\t");
sb.append(experimentTag.toString()).append("\t");
sb.append(ret.getAttribute(PARENT_SAMPLE_NAME)).append("\t");
sb.append(ret.getAttribute(PARENT_SAMPLE_SWA)).append("\t");
sb.append(parentSampleTag.toString()).append("\t");
sb.append(ret.getAttribute(SAMPLE_NAME)).append("\t");
sb.append(ret.getAttribute(SAMPLE_SWA)).append("\t");
sb.append(sampleTag.toString()).append("\t");
sb.append(ret.getAttribute(SEQUENCER_RUN_NAME)).append("\t");
sb.append(ret.getAttribute(SEQUENCER_RUN_SWA)).append("\t");
sb.append(seqencerrunTag.toString()).append("\t");
sb.append(ret.getAttribute(LANE_NAME)).append("\t");
sb.append(ret.getAttribute(LANE_NUM)).append("\t");
sb.append(ret.getAttribute(LANE_SWA)).append("\t");
sb.append(laneTag.toString()).append("\t");
sb.append(ret.getAttribute(IUS_TAG)).append("\t");
sb.append(ret.getAttribute(IUS_SWA)).append("\t");
sb.append(iusTag.toString()).append("\t");
sb.append(ret.getAttribute(WORKFLOW_NAME)).append("\t");
sb.append(ret.getAttribute(WORKFLOW_VERSION)).append("\t");
sb.append(ret.getAttribute(WORKFLOW_SWA)).append("\t");
sb.append(ret.getAttribute(WORKFLOW_RUN_NAME)).append("\t");
if (showStatus) {
sb.append(ret.getAttribute(WORKFLOW_RUN_STATUS)).append("\t");
}
sb.append(ret.getAttribute(WORKFLOW_RUN_SWA)).append("\t");
sb.append(ret.getAttribute(PROCESSING_ALGO)).append("\t");
sb.append(ret.getAttribute(PROCESSING_SWID)).append("\t");
sb.append(processingTag.toString()).append("\t");
sb.append(fm.getMetaType()).append("\t");
sb.append(ret.getAttribute(FILE_SWA)).append("\t");
sb.append(fm.getFilePath()).append("\t");
sb.append(fileTag.toString());
if (reportInputFiles) {
sb.append("\t");
sb.append(ret.getAttribute(INPUT_FILE_META_TYPES)).append("\t");
sb.append(ret.getAttribute(INPUT_FILE_SWIDS)).append("\t");
sb.append(ret.getAttribute(INPUT_FILE_FILE_PATHS)).append("\t");
}
sb.append("\n");
writer.write(sb.toString());
}
public static void printHeader(Writer writer, boolean showStatus) throws IOException {
printHeader(writer, showStatus, false);
}
/**
* Print the header of the Excel spreadsheet to file.
*
* @param reportInputFiles
* @throws java.io.IOException
* if any.
* @param writer
* a {@link java.io.Writer} object.
* @param showStatus
* a boolean.
*/
public static void printHeader(Writer writer, boolean showStatus, boolean reportInputFiles) throws IOException {
StringBuilder sb = new StringBuilder();
sb.append(PROCESSING_DATE).append("\t");
sb.append(STUDY_TITLE).append("\t");
sb.append(STUDY_SWA).append("\t");
sb.append(STUDY_ATTRIBUTES).append("\t");
sb.append(EXPERIMENT_NAME).append("\t");
sb.append(EXPERIMENT_SWA).append("\t");
sb.append(EXPERIMENT_ATTRIBUTES).append("\t");
sb.append(PARENT_SAMPLE_NAME).append("\t");
sb.append(PARENT_SAMPLE_SWA).append("\t");
sb.append(PARENT_SAMPLE_ATTRIBUTES).append("\t");
sb.append(SAMPLE_NAME).append("\t");
sb.append(SAMPLE_SWA).append("\t");
sb.append(SAMPLE_ATTRIBUTES).append("\t");
sb.append(SEQUENCER_RUN_NAME).append("\t");
sb.append(SEQUENCER_RUN_SWA).append("\t");
sb.append(SEQUENCER_RUN_ATTRIBUTES).append("\t");
sb.append(LANE_NAME).append("\t");
sb.append(LANE_NUM).append("\t");
sb.append(LANE_SWA).append("\t");
sb.append(LANE_ATTRIBUTES).append("\t");
sb.append(IUS_TAG).append("\t");
sb.append(IUS_SWA).append("\t");
sb.append(IUS_ATTRIBUTES).append("\t");
sb.append(WORKFLOW_NAME).append("\t");
sb.append(WORKFLOW_VERSION).append("\t");
sb.append(WORKFLOW_SWA).append("\t");
sb.append(WORKFLOW_RUN_NAME).append("\t");
if (showStatus) {
sb.append(WORKFLOW_RUN_STATUS).append("\t");
}
sb.append(WORKFLOW_RUN_SWA).append("\t");
sb.append(PROCESSING_ALGO).append("\t");
sb.append(PROCESSING_SWID).append("\t");
sb.append(PROCESSING_ATTRIBUTES).append("\t");
sb.append("File Meta-Type").append("\t");
sb.append(FILE_SWA).append("\t");
sb.append("File Path").append("\t");
sb.append(FILE_ATTRIBUTES);
if (reportInputFiles) {
sb.append("\t");
sb.append(INPUT_FILE_META_TYPES).append("\t");
sb.append(INPUT_FILE_SWIDS).append("\t");
sb.append(INPUT_FILE_FILE_PATHS).append("\t");
}
sb.append("\n");
writer.write(sb.toString());
}
}