package org.ovirt.engine.core.bll.context;
import org.ovirt.engine.core.bll.job.ExecutionContext;
import org.ovirt.engine.core.utils.lock.EngineLock;
/**
* Holds the context for execution of the command.
*/
public final class CommandContext implements Cloneable {
/**
* The compensation context holds the required information for compensating the failed command.
*/
private CompensationContext compensationContext;
/**
* Holds common attributes to all engine flows
*/
private final EngineContext engineContext;
/**
* The Lock in the command context is used by the parent command to pass to the child command locks the child needs
* to acquire.
*/
private EngineLock lock;
/**
* The execution context describe how the command should be monitored
*/
private ExecutionContext executionContext;
public CommandContext(CommandContext ctx) {
this.compensationContext = ctx.compensationContext;
this.lock = ctx.lock;
this.executionContext = ctx.executionContext;
this.engineContext = ctx.engineContext;
}
public CommandContext(EngineContext engineContext) {
this.engineContext = engineContext;
}
public static CommandContext createContext(String sessionId) {
return new CommandContext(new EngineContext().withSessionId(sessionId)).withoutExecutionContext();
}
public EngineContext getEngineContext() {
return engineContext;
}
public CommandContext withCompensationContext(CompensationContext compensationContext) {
this.compensationContext = compensationContext;
return this;
}
public CommandContext withoutCompensationContext() {
return withCompensationContext(null);
}
public CompensationContext getCompensationContext() {
return compensationContext;
}
public CommandContext withExecutionContext(ExecutionContext executionContext) {
this.executionContext = executionContext;
return this;
}
public CommandContext withoutExecutionContext() {
return withExecutionContext(new ExecutionContext());
}
public ExecutionContext getExecutionContext() {
return executionContext;
}
public CommandContext withLock(EngineLock lock) {
this.lock = lock;
return this;
}
public CommandContext withoutLock() {
return withLock(null);
}
public EngineLock getLock() {
return lock;
}
@Override
public CommandContext clone() {
return new CommandContext(this);
}
}