package me.atam.atam4j; import com.google.common.util.concurrent.ThreadFactoryBuilder; import me.atam.atam4j.health.AcceptanceTestsState; import org.junit.runner.notification.RunListener; import java.util.List; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class AcceptanceTestsRunnerTaskScheduler { private final Class[] testClasses; private final long initialDelay; private final long period; private final TimeUnit unit; private final ScheduledExecutorService scheduler; private final List<RunListener> runListeners; public AcceptanceTestsRunnerTaskScheduler(final Class[] testClasses, final long initialDelay, final long period, final TimeUnit unit, final List<RunListener> runListeners) { this.testClasses = testClasses; this.initialDelay = initialDelay; this.period = period; this.unit = unit; this.runListeners = runListeners; this.scheduler = Executors.newSingleThreadScheduledExecutor( new ThreadFactoryBuilder() .setNameFormat("acceptance-tests-runner") .setDaemon(false) .build()); } public void scheduleAcceptanceTestsRunnerTask(final AcceptanceTestsState acceptanceTestsState) { scheduler.scheduleAtFixedRate( new AcceptanceTestsRunnerTask(acceptanceTestsState, runListeners, testClasses), initialDelay, period, unit); } }