package org.ovirt.engine.core.bll;
import javax.inject.Inject;
import org.apache.commons.lang.StringUtils;
import org.ovirt.engine.core.bll.context.CommandContext;
import org.ovirt.engine.core.bll.job.ExecutionContext;
import org.ovirt.engine.core.bll.job.JobRepository;
import org.ovirt.engine.core.common.action.AddStepParameters;
import org.ovirt.engine.core.common.errors.EngineMessage;
import org.ovirt.engine.core.common.job.Job;
import org.ovirt.engine.core.common.job.Step;
import org.ovirt.engine.core.common.utils.ExecutionMethod;
import org.ovirt.engine.core.dao.JobDao;
import org.ovirt.engine.core.dao.StepDao;
public abstract class AddStepCommand<T extends AddStepParameters> extends CommandBase<T> {
protected Job job;
protected Step parentStep;
@Inject
private JobRepository jobRepository;
@Inject
private JobDao jobDao;
@Inject
private StepDao stepDao;
protected AddStepCommand(T parameters, CommandContext cmdContext) {
super(parameters, cmdContext);
}
@Override
protected boolean validate() {
boolean retValue=true;
job = jobDao.get(getParameters().getParentId());
if (job == null) {
parentStep = stepDao.get(getParameters().getParentId());
}
if (job == null && parentStep == null) {
retValue=false;
addValidationMessage(EngineMessage.ACTION_TYPE_NO_PARENT);
}
if (StringUtils.isBlank(getParameters().getDescription())) {
retValue=false;
addValidationMessage(EngineMessage.ACTION_TYPE_EMPTY_DESCRIPTION);
}
return retValue;
}
@Override
protected void executeCommand() {
ExecutionContext context = new ExecutionContext();
context.setMonitored(true);
if (parentStep == null) { // A step that is directly under a job
context.setJob(job);
context.setExecutionMethod(ExecutionMethod.AsJob);
jobRepository.loadJobSteps(job);
Step step = executionHandler.addStep(context, getParameters().getStepType(), getParameters().getDescription(), true);
setActionReturnValue(step.getId());
setSucceeded(true);
}
else {// this is a sub-step
context.setStep(parentStep);
context.setExecutionMethod(ExecutionMethod.AsStep);
jobRepository.loadParentStepSteps(parentStep);
Step step = executionHandler.addSubStep(context, parentStep, getParameters().getStepType(), getParameters().getDescription(), true);
setActionReturnValue(step.getId());
setSucceeded(true);
}
}
}