package fr.ens.biologie.genomique.eoulsan.requirements; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; import java.util.Collections; import java.util.Set; import org.rosuda.REngine.REngineException; import fr.ens.biologie.genomique.eoulsan.EoulsanException; import fr.ens.biologie.genomique.eoulsan.core.Parameter; import fr.ens.biologie.genomique.eoulsan.core.Progress; import fr.ens.biologie.genomique.eoulsan.util.r.RSConnection; /** * This class define a Rserve server requirement. * @author Laurent Jourdren * @since 2.0 */ public class RserveRequirement extends AbstractRequirement { public static final String REQUIREMENT_NAME = "rserve"; private static final String SERVER_NAME_PARAMETER = "rserve.servername"; private String serverName; @Override public String getName() { return REQUIREMENT_NAME; } @Override public void configure(Set<Parameter> parameters) throws EoulsanException { for (Parameter p : parameters) { switch (p.getName()) { case SERVER_NAME_PARAMETER: this.serverName = p.getValue(); break; default: super.configure(Collections.singleton(p)); break; } } } @Override public Set<Parameter> getParameters() { final Set<Parameter> result = super.getParameters(); result.add(new Parameter(SERVER_NAME_PARAMETER, this.serverName)); return Collections.unmodifiableSet(result); } @Override public boolean isAvailable() { final RSConnection connection = new RSConnection(this.serverName); try { connection.getRConnection(); connection.disConnect(); } catch (REngineException e) { return false; } return true; } @Override public void install(Progress progress) throws EoulsanException { // Do nothing as this requirement is not installable } // // Constructor // /** * Create a new mandatory Rserve requirement. * @param rserveServerName the Rserve server name */ public static Requirement newRserveRequirement( final String rserveServerName) { return newRserveRequirement(rserveServerName, false); } /** * Create a new Rserve requirement. * @param rserveServerName the Rserve server name * @param optional true if the Rserve server is a mandatory requirement */ public static Requirement newRserveRequirement(final String rserveServerName, final boolean optional) { checkNotNull(rserveServerName, "rserveServerName argument cannot be null"); checkArgument(!rserveServerName.trim().isEmpty(), "rserveServerName argument cannot be empty"); final RserveRequirement result = new RserveRequirement(); result.serverName = rserveServerName.trim(); result.setInstallable(false); result.setOptionnal(optional); return result; } // // Object method // @Override public String toString() { return "Rserve server: " + this.serverName; } }