package com.datascience.core.commands;
/**
* T is result type
* @author konrad
*/
public abstract class ProjectCommand<T> {
final boolean modifies;
private T result;
private Exception exception;
public ProjectCommand(boolean modifies){
this.modifies = modifies;
}
public T getResult(){
return result;
}
public Exception getError(){
return exception;
}
protected void setResult(T result){
this.result = result;
}
public boolean modifies(){
return modifies;
}
public void execute(){
try {
prepareExecution();
realExecute();
afterExecution();
} catch (Exception e) {
exception = e;
}
}
protected abstract void prepareExecution() throws Exception;
protected abstract void realExecute() throws Exception;
protected abstract void afterExecution() throws Exception;
public boolean wasOk(){
return exception == null;
}
}