package com.github.dreamhead.moco.runner.watcher;
import com.github.dreamhead.moco.runner.FileRunner;
import com.github.dreamhead.moco.runner.Runner;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
public class MonitorFactory {
private static Logger logger = LoggerFactory.getLogger(MonitorFactory.class);
public ShutdownMocoRunnerWatcher createShutdownWatcher(final Runner runner,
final Optional<Integer> shutdownPort,
final String shutdownKey) {
return new ShutdownMocoRunnerWatcher(shutdownPort, shutdownKey, new ShutdownListener() {
@Override
public void onShutdown() {
runner.stop();
}
});
}
public FileMocoRunnerWatcher createConfigurationWatcher(final File configuration, final FileRunner fileRunner) {
return new FileMocoRunnerWatcher(configuration, createListener(fileRunner));
}
public MocoRunnerWatcher createSettingWatcher(final File settingsFile,
final Iterable<File> configurationFiles,
final FileRunner fileRunner) {
ImmutableList<File> files = ImmutableList.<File>builder().add(settingsFile).addAll(configurationFiles).build();
return new FilesMocoRunnerWatcher(files, createListener(fileRunner));
}
private FileAlterationListenerAdaptor createListener(final FileRunner fileRunner) {
return new FileAlterationListenerAdaptor() {
@Override
public void onFileChange(final File file) {
logger.info("{} change detected.", file.getName());
try {
fileRunner.restart();
} catch (Exception e) {
logger.error("Fail to load configuration in {}.", file.getName());
logger.error(e.getMessage());
}
}
};
}
}