/*
* 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;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
/**
* This interface define a step of the workflow.
* @author Laurent Jourdren
* @since 2.0
*/
public interface Step extends Serializable {
/**
* This enum define the type of step.
* @author Laurent Jourdren
* @since 2.0
*/
enum StepType {
ROOT_STEP(0, "root"), DESIGN_STEP(1, "design"), CHECKER_STEP(2, "checker"),
GENERATOR_STEP(3, null), FIRST_STEP(4, "first"), STANDARD_STEP(5, null),
TERMINAL_STEP(6, "terminal");
private final int priority;
private final String defaultStepId;
/**
* Get the priority of the step.
* @return the priority of the step
*/
public int getPriority() {
return this.priority;
}
/**
* Get default step id.
* @return the default step id or null if not exists
*/
public String getDefaultStepId() {
return this.defaultStepId;
}
/**
* Return the available default step ids of the step types.
* @return a set with the values
*/
public static Set<String> getAllDefaultStepId() {
final Set<String> result = new HashSet<>();
for (StepType type : values()) {
final String stepId = type.getDefaultStepId();
if (stepId != null) {
result.add(stepId);
}
}
return result;
}
//
// Constructor
//
/**
* Constructor.
* @param priority priority of the ste
* @param defaultStepId default step id
*/
StepType(final int priority, final String defaultStepId) {
this.priority = priority;
this.defaultStepId = defaultStepId;
}
}
/**
* This enum define the states of the steps.
* @author Laurent Jourdren
* @since 2.0
*/
enum StepState {
CREATED, CONFIGURED, WAITING, READY, WORKING, PARTIALLY_DONE, DONE, FAILED,
ABORTED;
/**
* Test if the state is a final state.
* @return true if the state is a final state
*/
public boolean isFinalState() {
return this == DONE || this == FAILED || this == ABORTED;
}
/**
* Test if the state is a working state.
* @return true if the state is a working state
*/
public boolean isWorkingState() {
return this == WORKING || this == PARTIALLY_DONE;
}
/**
* Test if the state is a done state.
* @return true if the state is a done state
*/
public boolean isDoneState() {
return this == PARTIALLY_DONE || this == DONE;
}
}
/**
* Get the workflow of the step.
* @return the workflow of the step
*/
Workflow getWorkflow();
/**
* Get the unique numerical identifier of the step.
* @return the number of the step
*/
int getNumber();
/**
* Get step id.
* @return the step id
*/
String getId();
/**
* Test if the step must be skipped
* @return true if the step must be skipped
*/
boolean isSkip();
/**
* Get the type of the step.
* @return the type of the step;
*/
StepType getType();
/**
* Get the module name.
* @return the module object
*/
String getModuleName();
/**
* Get the step version required by user.
* @return a string with the version of the step required by the user
*/
String getStepVersion();
/**
* Get the parameter of the step.
* @return a Set with the parameters of the step
*/
Set<Parameter> getParameters();
/**
* Get the required memory for the step.
* @return the required memory of the step in MB or -1 if the default setting
* must be used
*/
int getRequiredMemory();
/**
* Get the required processors for the step.
* @return the required processors count for the step in MB or -1 if the
* default setting must be used
*/
int getRequiredProcessors();
/**
* Get the input ports of the step.
* @return the input ports of the step
*/
InputPorts getInputPorts();
/**
* Get the output ports of the step.
* @return the output ports of the step
*/
OutputPorts getOutputPorts();
/**
* Get the state of the step.
* @return the state of the step
*/
StepState getState();
}