package com.github.dreamhead.moco.bootstrap.tasks; import com.github.dreamhead.moco.bootstrap.BootstrapTask; import com.github.dreamhead.moco.bootstrap.arg.StartArgs; import com.github.dreamhead.moco.bootstrap.parser.StartArgsParser; import com.github.dreamhead.moco.runner.Runner; import com.github.dreamhead.moco.runner.RunnerFactory; import com.google.common.base.Stopwatch; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public abstract class StartTask implements BootstrapTask { private Logger logger = LoggerFactory.getLogger(StartTask.class); private final StartArgsParser startArgsParser; private final RunnerFactory factory; protected StartTask(final String shutdownKey, final StartArgsParser startArgsParser) { this.startArgsParser = startArgsParser; this.factory = new RunnerFactory(shutdownKey); } @Override public void run(final String[] args) { final Runner runner = createRunner(args); final Stopwatch stopwatch = Stopwatch.createStarted(); runner.run(); Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { @Override public void run() { runner.stop(); stopwatch.stop(); logger.info("Total time: " + stopwatch); } })); } private Runner createRunner(final String[] args) { StartArgs startArgs = startArgsParser.parse(args); return factory.createRunner(startArgs); } }