package com.github.dreamhead.moco.runner; import com.github.dreamhead.moco.bootstrap.arg.StartArgs; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import static com.github.dreamhead.moco.runner.JsonRunner.newJsonRunnerWithStreams; import static com.google.common.collect.ImmutableList.of; public abstract class FileRunner implements Runner { private Runner runner; protected abstract Runner newRunner(); private FileRunner() { this.runner = newRunner(); } public synchronized void restart() { this.runner.stop(); this.runner = newRunner(); this.runner.run(); } public Runner getRunner() { return runner; } @Override public void run() { this.runner.run(); } @Override public void stop() { this.runner.stop(); } public static FileRunner createConfigurationFileRunner(final File file, final StartArgs startArgs) { return new FileRunner() { @Override protected Runner newRunner() { return newJsonRunnerWithStreams(of(toInputStream(file)), startArgs); } }; } public static FileRunner createSettingFileRunner(final File settingsFile, final StartArgs startArgs) { return new FileRunner() { @Override protected Runner newRunner() { return new SettingRunner(toInputStream(settingsFile), startArgs); } }; } private static FileInputStream toInputStream(final File file) { try { return new FileInputStream(file); } catch (FileNotFoundException e) { throw new RuntimeException(e); } } }