/* * Eoulsan development code * * This code may be freely distributed and modified under the * terms of the GNU Lesser General Public License version 2.1 or * later and CeCILL-C. This should be distributed with the code. * If you do not have a copy, see: * * http://www.gnu.org/licenses/lgpl-2.1.txt * http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.txt * * Copyright for this code is held jointly by the Genomic platform * of the Institut de Biologie de l'École normale supérieure and * the individual authors. These should be listed in @author doc * comments. * * For more information on the Eoulsan project and its aims, * or to join the Eoulsan Google group, visit the home page * at: * * http://outils.genomique.biologie.ens.fr/eoulsan * */ package fr.ens.biologie.genomique.eoulsan.core.workflow; import static com.google.common.base.Preconditions.checkNotNull; import java.io.File; import java.util.Set; import java.util.logging.Logger; import fr.ens.biologie.genomique.eoulsan.AbstractEoulsanRuntime; import fr.ens.biologie.genomique.eoulsan.EoulsanRuntime; import fr.ens.biologie.genomique.eoulsan.Settings; import fr.ens.biologie.genomique.eoulsan.core.InputPorts; import fr.ens.biologie.genomique.eoulsan.core.OutputPorts; import fr.ens.biologie.genomique.eoulsan.core.Parameter; import fr.ens.biologie.genomique.eoulsan.core.Step; import fr.ens.biologie.genomique.eoulsan.core.StepConfigurationContext; import fr.ens.biologie.genomique.eoulsan.core.Workflow; import fr.ens.biologie.genomique.eoulsan.data.DataFile; /** * This class define a concrete implementation of the configuration context of a * step. * @author Laurent Jourdren * @since 2.0 */ public class StepConfigurationContextImpl implements StepConfigurationContext { private final WorkflowContext workflowContext; private final AbstractStep step; private static class WorkflowStepWrapper implements Step { private static final long serialVersionUID = 6362676600557016431L; private final AbstractStep step; @Override public Workflow getWorkflow() { throw new IllegalStateException( "This method cannot be used from a configuration context"); } @Override public int getNumber() { return this.step.getNumber(); } @Override public String getId() { return this.step.getId(); } @Override public boolean isSkip() { return this.step.isSkip(); } @Override public StepType getType() { return this.step.getType(); } @Override public String getModuleName() { return this.step.getModuleName(); } @Override public String getStepVersion() { return this.step.getStepVersion(); } @Override public Set<Parameter> getParameters() { return this.step.getParameters(); } @Override public int getRequiredMemory() { return this.step.getRequiredMemory(); } @Override public int getRequiredProcessors() { return this.step.getRequiredProcessors(); } @Override public InputPorts getInputPorts() { throw new IllegalStateException( "This method cannot be used from a configuration context"); } @Override public OutputPorts getOutputPorts() { throw new IllegalStateException( "This method cannot be used from a configuration context"); } @Override public StepState getState() { return this.step.getState(); } // // Constructor // /** * Constructor. * @param step step */ private WorkflowStepWrapper(final AbstractStep step) { this.step = step; } } // // Getters // /** * Get the local working directory. * @return Returns the local working Path */ public DataFile getLocalWorkingDirectory() { return this.workflowContext.getLocalWorkingDirectory(); } /** * Get the Hadoop working directory. * @return Returns the Hadoop working directory */ public DataFile getHadoopWorkingDirectory() { return this.workflowContext.getHadoopWorkingDirectory(); } /** * Get the job directory. * @return Returns the job directory */ public DataFile getJobDirectory() { return this.workflowContext.getJobDirectory(); } /** * Get the task output directory. * @return Returns the task output directory */ public DataFile getTaskOutputDirectory() { return this.workflowContext.getTaskDirectory(); } @Override public DataFile getOutputDirectory() { return this.workflowContext.getOutputDirectory(); } @Override public DataFile getStepOutputDirectory() { return this.step.getStepOutputDirectory(); } @Override public String getJobId() { return this.workflowContext.getJobId(); } @Override public String getJobHost() { return this.workflowContext.getJobHost(); } @Override public DataFile getDesignFile() { return this.workflowContext.getDesignFile(); } @Override public DataFile getWorkflowFile() { return this.workflowContext.getWorkflowFile(); } /** * Get the application jar file. * @return Returns the jar file */ public DataFile getJarPathname() { return this.workflowContext.getJarFile(); } @Override public String getJobUUID() { return this.workflowContext.getJobUUID(); } @Override public String getJobDescription() { return this.workflowContext.getJobDescription(); } @Override public String getJobEnvironment() { return this.workflowContext.getJobEnvironment(); } @Override public String getCommandName() { return this.workflowContext.getCommandName(); } @Override public String getCommandDescription() { return this.workflowContext.getCommandDescription(); } @Override public String getCommandAuthor() { return this.workflowContext.getCommandAuthor(); } @Override public Step getCurrentStep() { return new WorkflowStepWrapper(this.step); } // // Other methods // @Override public AbstractEoulsanRuntime getRuntime() { return this.workflowContext.getRuntime(); } @Override public Settings getSettings() { return this.workflowContext.getSettings(); } @Override public Logger getLogger() { return this.workflowContext.getLogger(); } @Override public File getLocalTempDirectory() { return EoulsanRuntime.getRuntime().getTempDirectory(); } // // Constructor // /** * Constructor. * @param step step related to the context */ StepConfigurationContextImpl(final AbstractStep step) { checkNotNull(step, "step cannot be null"); this.workflowContext = step.getAbstractWorkflow().getWorkflowContext(); this.step = step; } }