package com.indeed.proctor.webapp.controllers;
import com.indeed.proctor.webapp.extensions.AfterBackgroundJobExecute;
import com.indeed.proctor.webapp.extensions.BeforeBackgroundJobExecute;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Collections;
import java.util.List;
public class BackgroundJobFactory {
@Autowired(required=false)
private List<BeforeBackgroundJobExecute> beforeBackgroundJobExecutes = Collections.emptyList();
@Autowired(required=false)
private List<AfterBackgroundJobExecute> afterBackgroundJobExecutes = Collections.emptyList();
public interface Executor<T> {
T execute(BackgroundJob job) throws Exception;
}
public <T> BackgroundJob<T> createBackgroundJob(final String jobTitle, final BackgroundJob.JobType jobType, final Executor<T> executor) {
return new BackgroundJob<T>() {
@Override
public String getTitle() {
return jobTitle;
}
@Override
public JobType getJobType() {
return jobType;
}
@Override
protected T execute() throws Exception {
return executor.execute(this);
}
@Override
protected List<BeforeBackgroundJobExecute> getBeforeBackgroundJobExecutes() {
return beforeBackgroundJobExecutes;
}
@Override
protected List<AfterBackgroundJobExecute> getAfterBackgroundJobExecutes() {
return afterBackgroundJobExecutes;
}
};
}
}