package fr.ens.biologie.genomique.eoulsan.core.workflow;
import static com.google.common.base.Preconditions.checkNotNull;
import fr.ens.biologie.genomique.eoulsan.core.FileNaming;
import fr.ens.biologie.genomique.eoulsan.data.DataFile;
/**
* This class contains methods to create workflow data file names.
* @author Laurent Jourdren
* @since 2.0
*/
public class WorkflowFileNaming extends FileNaming {
//
// Setters
//
/**
* Set several field of the object from a workflow output port.
* @param port the workflow output port
*/
private void set(final StepOutputPort port) {
checkNotNull(port, "port argument cannot be null");
setStepId(port.getStep().getId());
setPortName(port.getName());
setFormat(port.getFormat());
setCompression(port.getCompression());
}
//
// Static methods
//
/**
* Create the prefix of a filename.
* @param port output port that generate the file
* @return a String with the prefix of the file
*/
public static String filePrefix(final StepOutputPort port) {
final WorkflowFileNaming f = new WorkflowFileNaming();
f.set(port);
return f.filePrefix();
}
/**
* Create the glob for the port.
* @return a glob in a string
*/
public static String glob(final StepOutputPort port) {
final WorkflowFileNaming f = new WorkflowFileNaming();
f.set(port);
return f.glob();
}
//
// Middle creation
//
/**
* Create the middle of a filename.
* @param port output port that generate the file
* @param data the data
* @param fileIndex file index
* @return a String with the suffix of a file
*/
public static String fileMiddle(final StepOutputPort port,
final DataElement data, final int fileIndex) {
final WorkflowFileNaming f = new WorkflowFileNaming();
f.set(port);
f.set(data);
f.setFileIndex(fileIndex);
return f.fileMiddle();
}
/**
* Create the middle of a filename.
* @param port output port that generate the file
* @param fileIndex file index
* @param part file part
* @return a String with the suffix of a file
*/
public static String fileMiddle(final StepOutputPort port,
final String dataName, final int fileIndex, final int part) {
final WorkflowFileNaming f = new WorkflowFileNaming();
f.set(port);
f.setDataName(dataName);
f.setPart(part);
f.setFileIndex(fileIndex);
return f.fileMiddle();
}
//
// Suffix creation
//
/**
* Create the suffix of a filename.
* @param port a workflow port
* @return a string with the suffix that correspond to the filename
*/
public static String fileSuffix(final StepOutputPort port) {
final WorkflowFileNaming f = new WorkflowFileNaming();
f.set(port);
return f.fileSuffix();
}
//
// File name
//
/**
* Create the name of a data file of the workflow.
* @param port port that generate the data
* @param data data
* @param fileIndex file index
* @return a String with the name of the file
*/
public static String filename(final StepOutputPort port,
final DataElement data, final int fileIndex) {
final WorkflowFileNaming f = new WorkflowFileNaming();
f.set(port);
f.set(data);
f.setFileIndex(fileIndex);
return f.filename();
}
//
// File creation
//
/**
* Create a DataFile object for a file of the workflow.
* @param port port that generate the data
* @param data data
* @param fileIndex file index
* @return a DataFile object
*/
public static DataFile file(final StepOutputPort port, final DataElement data,
final int fileIndex) {
return new DataFile(port.getStep().getStepOutputDirectory(),
filename(port, data, fileIndex));
}
//
// Constructor
//
/**
* Private constructor.
*/
private WorkflowFileNaming() {
}
}