X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Frhynodge%2Fengine%2FStarter.java;h=bed4935bd6f395680fd1bb16d8e21e038400acfc;hb=7a62280f42b7430279b8fd1b5818ddf0e7530b2a;hp=a5d79ac0517c14849e97fd59c48e27c76d6e1f9a;hpb=6f69aff66ba5617d0bb27874014b4274bc551ab8;p=rhynodge.git diff --git a/src/main/java/net/pterodactylus/rhynodge/engine/Starter.java b/src/main/java/net/pterodactylus/rhynodge/engine/Starter.java index a5d79ac..bed4935 100644 --- a/src/main/java/net/pterodactylus/rhynodge/engine/Starter.java +++ b/src/main/java/net/pterodactylus/rhynodge/engine/Starter.java @@ -17,11 +17,18 @@ package net.pterodactylus.rhynodge.engine; +import java.io.IOException; +import java.util.Arrays; + +import net.pterodactylus.rhynodge.actions.EmailAction; import net.pterodactylus.rhynodge.loader.ChainWatcher; -import net.pterodactylus.rhynodge.states.StateManager; +import net.pterodactylus.rhynodge.loader.ChainWatcher.ChainDirectory; +import net.pterodactylus.rhynodge.states.StateManager.StateDirectory; +import net.pterodactylus.util.envopt.Parser; +import net.pterodactylus.util.inject.ObjectBinding; -import com.lexicalscope.jewel.cli.CliFactory; -import com.lexicalscope.jewel.cli.Option; +import com.google.inject.Guice; +import com.google.inject.Injector; /** * Rhynodge main starter class. @@ -36,48 +43,24 @@ public class Starter { * @param arguments * Command-line arguments */ - public static void main(String... arguments) { - - /* parse command line. */ - Parameters parameters = CliFactory.parseArguments(Parameters.class, arguments); - - /* create the state manager. */ - StateManager stateManager = new StateManager(parameters.getStateDirectory()); + public static void main(String... arguments) throws IOException { + Options options = Parser.fromSystemEnvironment().parseEnvironment(Options::new); + EmailAction errorEmailAction = + createErrorEmailAction(options.smtpHostname, options.errorEmailSender, options.errorEmailRecipient); - /* create the engine. */ - Engine engine = new Engine(stateManager); + Injector injector = Guice.createInjector(Arrays.asList( + ObjectBinding.forClass(StateDirectory.class).is(StateDirectory.of(options.stateDirectory)), + ObjectBinding.forClass(ChainDirectory.class).is(ChainDirectory.of(options.chainDirectory)), + ObjectBinding.forClass(EmailAction.class).is(errorEmailAction) + )); /* start a watcher. */ - ChainWatcher chainWatcher = new ChainWatcher(engine, parameters.getChainDirectory()); + ChainWatcher chainWatcher = injector.getInstance(ChainWatcher.class); chainWatcher.start(); - - /* start the engine. */ - engine.start(); } - /** - * Definition of the command-line parameters. - * - * @author David ‘Bombe’ Roden - */ - private static interface Parameters { - - /** - * Returns the directory to watch for chains. - * - * @return The chain directory - */ - @Option(defaultValue = "chains", shortName = "c", description = "The directory to watch for chains") - String getChainDirectory(); - - /** - * Returns the directory to store states in. - * - * @return The states directory - */ - @Option(defaultValue = "states", shortName = "s", description = "The directory to store states in") - String getStateDirectory(); - + private static EmailAction createErrorEmailAction(String smtpHostname, String errorEmailSender, String errorEmailRecipient) { + return new EmailAction(smtpHostname, errorEmailSender, errorEmailRecipient); } }