package com.datascience.scheduler;
import com.datascience.core.base.LObject;
import com.datascience.core.base.Project;
import com.datascience.core.base.Worker;
import com.datascience.datastoring.jobs.JobCommand;
/**
* @Author: konrad
* If no object could be found than empty results is returned
*/
public class SchedulerCommands {
static public class GetNextObject<T> extends JobCommand<LObject<T>, Project>{
public GetNextObject(){
super(true); // because we modify scheduler state
}
protected IScheduler<T> checkAndgetScheduler(){
IScheduler<T> scheduler = project.getScheduler();
if (scheduler == null) {
throw new IllegalArgumentException("This job don't have scheduler enabled!");
}
return scheduler;
}
protected LObject<T> getNextObject(){
return checkAndgetScheduler().nextObject();
}
@Override
protected void realExecute() {
setResult(getNextObject());
}
}
static public class GetNextObjectForWorker<T> extends GetNextObject<T>{
protected String workerName;
public GetNextObjectForWorker(String worker){
super();
this.workerName = worker;
}
@Override
protected LObject<T> getNextObject(){
Worker worker = project.getData().getOrCreateWorker(workerName);
return checkAndgetScheduler().nextObject(worker);
}
}
}