From b90ab4b5dba258efdf7532917961fdde83587929 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Sat, 1 May 2021 00:21:18 +0300 Subject: [PATCH] =?UTF-8?q?cli:=20=D0=BF=D0=BE=D0=B4=D0=B3=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=BE=D0=BA=D1=80=D1=83=D0=B6=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/src/main/java/mc/server/Main.java | 44 +++++++++++++++++++++--- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/mc/server/Main.java b/server/src/main/java/mc/server/Main.java index c839916..6f57b77 100644 --- a/server/src/main/java/mc/server/Main.java +++ b/server/src/main/java/mc/server/Main.java @@ -21,20 +21,25 @@ import mc.server.di.ServerComponent; import org.apache.commons.io.IOUtils; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Base64; import java.util.Collections; import java.util.List; +import java.util.Objects; @Slf4j +@SuppressWarnings("java:S106") public class Main { + private static final String CLI_CONFIG = "config"; private void run(OptionSet optionSet) { log.info("mc-project launch"); - ConfigModule configModule = new ConfigModule((Path) optionSet.valueOf("config")); + ConfigModule configModule = new ConfigModule((Path) optionSet.valueOf(CLI_CONFIG)); ServerComponent serverComponent = DaggerServerComponent.builder() .configModule(configModule) @@ -85,8 +90,7 @@ public class Main { server.bind(config.server().host(), config.server().port()); } - @SuppressWarnings("java:S106") - public static void main(String[] args) { + public static void main(String[] args) throws IOException { OptionParser optionParser = createOptionParser(); OptionSet optionSet = optionParser.parse(args); @@ -98,6 +102,25 @@ public class Main { e.printStackTrace(System.err); } return; + } else if (optionSet.has("init")) { + Path configPath = (Path) optionSet.valueOf(CLI_CONFIG); + Path logbackPath = Paths.get(System.getProperty("logback.configurationFile", "logback.xml")); + + if (!initializeCheckFiles(configPath, logbackPath)) { + return; + } + + InputStream configResource = Objects.requireNonNull(Main.class.getResourceAsStream("/config-sample.yml")); + InputStream logbackResource = Objects.requireNonNull(Main.class.getResourceAsStream("/logback-sample.xml")); + + try(OutputStream configOut = Files.newOutputStream(configPath); + OutputStream logbackOut = Files.newOutputStream(logbackPath)) { + IOUtils.copy(configResource, configOut); + IOUtils.copy(logbackResource, logbackOut); + } + + System.out.println("Initialization environment done."); + return; } if (log.isDebugEnabled()) { @@ -113,10 +136,11 @@ public class Main { private static OptionParser createOptionParser() { OptionParser optionParser = new OptionParser(); optionParser.acceptsAll(List.of("h", "help"), "Help page").forHelp(); - optionParser.accepts("config", "Path to configuration file") + optionParser.accepts(CLI_CONFIG, "Path to configuration file") .withRequiredArg() .withValuesConvertedBy(new PathConverter()) .defaultsTo(Paths.get("config.yml")); + optionParser.accepts("init", "Initialize environment"); return optionParser; } @@ -131,4 +155,16 @@ public class Main { return ""; } } + + private static boolean initializeCheckFiles(Path... paths) { + for (Path path : paths) { + if (Files.exists(path)) { + System.err.printf("File '%s' already exist. Initialization environment canceled.%n", + path.toAbsolutePath()); + return false; + } + } + + return true; + } }