package com.datascience.datastoring.storages;
import com.datascience.datastoring.jobs.IJobStorage;
import com.datascience.datastoring.jobs.Job;
import com.datascience.core.base.Project;
import com.datascience.executor.ProjectCommandExecutor;
import com.datascience.datastoring.jobs.JobsLocksManager;
/**
*
* @author konrad
*/
public class JobStorageUsingExecutor extends WrappedJobStorage{
protected ProjectCommandExecutor executor;
protected JobsLocksManager jobsLocksManager;
public JobStorageUsingExecutor(IJobStorage internalStorage,
ProjectCommandExecutor executor,
JobsLocksManager jobsLocksManager){
super(internalStorage);
this.executor = executor;
this.jobsLocksManager = jobsLocksManager;
}
@Override
public <T extends Project> Job<T> get(String id) throws Exception {
// I think we don't need to sync it
return wrappedJobStorage.get(id);
}
@Override
public void add(Job job) throws Exception {
executor.add(new JobStorageCommands.Adder(wrappedJobStorage, jobsLocksManager, job));
}
@Override
public void remove(Job job) throws Exception {
executor.add(new JobStorageCommands.Remover(wrappedJobStorage, jobsLocksManager, job));
}
@Override
public void test() throws Exception {
wrappedJobStorage.test();
}
@Override
public void stop() throws Exception {
executor.stop();
wrappedJobStorage.stop();
}
@Override
public void flush(Job job){
}
@Override
public String toString() {
return wrappedJobStorage.toString() + "UsingExecutor";
}
}