package uk.ac.ox.zoo.seeg.abraid.mp.modelwrapper.config.run; import org.apache.commons.configuration.ConfigurationException; import uk.ac.ox.zoo.seeg.abraid.mp.modelwrapper.config.ModelWrapperConfigurationService; import java.io.File; import java.io.IOException; import java.nio.file.Paths; /** * Provides a factory method for RunConfigurations. * Copyright (c) 2014 University of Oxford */ public class RunConfigurationFactoryImpl implements RunConfigurationFactory { private static final String RUNS_SUBDIRECTORY = "runs"; private final ModelWrapperConfigurationService modelWrapperConfigurationService; public RunConfigurationFactoryImpl(ModelWrapperConfigurationService modelWrapperConfigurationService) { this.modelWrapperConfigurationService = modelWrapperConfigurationService; } /** * Creates a new RunConfiguration using the current defaults. * @param runName The name of the model run. * @return The new RunConfiguration * @throws ConfigurationException When the R executable cannot be found. * @throws IOException When the covariate configuration cannot be read. */ @Override public RunConfiguration createDefaultConfiguration(String runName) throws ConfigurationException, IOException { return new RunConfiguration( runName, buildBaseDir(), modelWrapperConfigurationService.getDeleteWorkspaces(), buildExecutionConfig()); } private File buildBaseDir() { return Paths.get(modelWrapperConfigurationService.getCacheDirectory(), RUNS_SUBDIRECTORY).toFile(); } private ExecutionRunConfiguration buildExecutionConfig() throws ConfigurationException { return new ExecutionRunConfiguration( Paths.get(modelWrapperConfigurationService.getRExecutablePath()).toFile(), modelWrapperConfigurationService.getMaxModelRunDuration() ); } }