package fr.ens.biologie.genomique.eoulsan.util.r;
import java.io.File;
import java.io.IOException;
/**
* This class define a factory to create RExecutor objects.
* @author Laurent Jourdren
* @since 2.0
*/
public class RExecutorFactory {
/**
* Define a enum for the mode of RExecutor.
*/
public enum Mode {
PROCESS, RSERVE, DOCKER;
/**
* Parse a mode name and returns the mode.
* @param name mode name
* @return a mode object or null if the mode is not found
*/
public static Mode parse(final String name) {
if (name == null) {
return null;
}
for (Mode m : values()) {
if (m.name().toLowerCase().equals(name.toLowerCase().trim())) {
return m;
}
}
return null;
}
}
/**
* Create a new instance of RExecutor.
* @param mode executor mode
* @param rServeServer the Rserve server
* @param dockerImage docker image
* @param outputDirectory output directory
* @param temporaryDirectory temporary directory
* @return a new instance of RExecutor
* @throws IOException if an error occurs while creating the instance of
* RExecutor
*/
public static RExecutor newRExecutor(final Mode mode,
final String rServeServer, final String dockerImage,
final File outputDirectory, final File temporaryDirectory)
throws IOException {
if (mode != null) {
switch (mode) {
case PROCESS:
return new ProcessRExecutor(outputDirectory, temporaryDirectory);
case RSERVE:
return new RserveRExecutor(outputDirectory, temporaryDirectory,
rServeServer);
case DOCKER:
return new DockerRExecutor(outputDirectory, temporaryDirectory,
dockerImage);
default:
break;
}
}
if (rServeServer != null) {
return new RserveRExecutor(outputDirectory, temporaryDirectory,
rServeServer);
}
if (dockerImage != null) {
return new DockerRExecutor(outputDirectory, temporaryDirectory,
dockerImage);
}
return new ProcessRExecutor(outputDirectory, temporaryDirectory);
}
}