From 050ff874a24c32111b0b8cbfa1c8dd62da8c4898 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Fri, 20 Nov 2020 17:25:31 +0100 Subject: [PATCH] rewrite MinosoftCommandLineArguments, improvement --- .../data/entities/EntityInformation.java | 17 +---- .../util/MinosoftCommandLineArguments.java | 73 +++++++++---------- .../java/de/bixilon/minosoft/util/Util.java | 6 +- 3 files changed, 41 insertions(+), 55 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/data/entities/EntityInformation.java b/src/main/java/de/bixilon/minosoft/data/entities/EntityInformation.java index 994718c28..f916a5921 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/EntityInformation.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/EntityInformation.java @@ -14,17 +14,14 @@ package de.bixilon.minosoft.data.entities; import com.google.gson.JsonObject; +import de.bixilon.minosoft.data.mappings.ModIdentifier; -public class EntityInformation { - private final String mod; - private final String identifier; - +public class EntityInformation extends ModIdentifier { private final float width; private final float height; public EntityInformation(String mod, String identifier, float width, float height) { - this.mod = mod; - this.identifier = identifier; + super(mod, identifier); this.width = width; this.height = height; } @@ -33,14 +30,6 @@ public class EntityInformation { return new EntityInformation(mod, identifier, data.get("width").getAsFloat(), data.get("height").getAsFloat()); } - public String getMod() { - return mod; - } - - public String getIdentifier() { - return identifier; - } - public float getWidth() { return width; } diff --git a/src/main/java/de/bixilon/minosoft/util/MinosoftCommandLineArguments.java b/src/main/java/de/bixilon/minosoft/util/MinosoftCommandLineArguments.java index 8f3f58ada..0f7bc1584 100644 --- a/src/main/java/de/bixilon/minosoft/util/MinosoftCommandLineArguments.java +++ b/src/main/java/de/bixilon/minosoft/util/MinosoftCommandLineArguments.java @@ -16,57 +16,54 @@ package de.bixilon.minosoft.util; import de.bixilon.minosoft.config.StaticConfiguration; import org.apache.commons.cli.*; +import javax.annotation.Nullable; +import java.util.HashMap; + public class MinosoftCommandLineArguments { + private static final HashMap optionHashMap = new HashMap<>(); + private static final Options options = new Options(); + private static final HelpFormatter formatter = new HelpFormatter(); + + static { + registerDefaultArguments(); + } public static void parseCommandLineArguments(String[] args) { - Options options = new Options(); - - Option help = new Option("?", "help", false, "Displays this help"); - options.addOption(help); - - Option homeFolder = new Option("home_folder", true, "Home of Minosoft"); - options.addOption(homeFolder); - - Option coloredLog = new Option("colored_log", true, "Should the log be colored"); - options.addOption(coloredLog); - - Option verboseEntityLogLevel = new Option("verbose_entity_logging", true, "Should entity meta data be printed"); - options.addOption(verboseEntityLogLevel); - - Option relativeTimeLogging = new Option("log_time_relativ", true, "Should time in log timestamp be relative"); - options.addOption(relativeTimeLogging); - - HelpFormatter formatter = new HelpFormatter(); - CommandLine commandLine; + MinosoftCommandLineArguments.optionHashMap.forEach((option, commandLineArgumentHandler) -> options.addOption(option)); try { - commandLine = new DefaultParser().parse(options, args); + CommandLine commandLine = new DefaultParser().parse(options, args); + + for (Option option : commandLine.getOptions()) { + if (!MinosoftCommandLineArguments.optionHashMap.containsKey(option)) { + continue; + } + MinosoftCommandLineArguments.optionHashMap.get(option).handle(option.getValue()); + } } catch (ParseException e) { System.out.println(e.getMessage()); formatter.printHelp("java -jar Minosoft.jar", options); - System.exit(1); - return; } - if (commandLine.hasOption(help.getOpt())) { + } + + public static void registerCommandLineOption(Option option, CommandLineArgumentHandler handler) { + optionHashMap.put(option, handler); + } + + private static void registerDefaultArguments() { + registerCommandLineOption(new Option("?", "help", false, "Displays this help"), (value -> { formatter.printHelp("java -jar Minosoft.jar", options); System.exit(1); - return; - } - if (commandLine.hasOption(homeFolder.getOpt())) { - StaticConfiguration.HOME_DIRECTORY = commandLine.getOptionValue(homeFolder.getOpt()); - } - if (commandLine.hasOption(coloredLog.getOpt())) { - StaticConfiguration.COLORED_LOG = Boolean.parseBoolean(commandLine.getOptionValue(coloredLog.getOpt())); - } - if (commandLine.hasOption(verboseEntityLogLevel.getOpt())) { - StaticConfiguration.VERBOSE_ENTITY_META_DATA_LOGGING = Boolean.parseBoolean(commandLine.getOptionValue(verboseEntityLogLevel.getOpt())); - } - if (commandLine.hasOption(relativeTimeLogging.getOpt())) { - StaticConfiguration.LOG_RELATIVE_TIME = Boolean.parseBoolean(commandLine.getOptionValue(relativeTimeLogging.getOpt())); - } - + })); + registerCommandLineOption(new Option("home_folder", true, "Home of Minosoft"), (value -> StaticConfiguration.HOME_DIRECTORY = value + "/")); + registerCommandLineOption(new Option("colored_log", true, "Should the log be colored"), (value -> StaticConfiguration.COLORED_LOG = Boolean.parseBoolean(value))); + registerCommandLineOption(new Option("verbose_entity_logging", true, "Should entity meta data be printed"), (value -> StaticConfiguration.VERBOSE_ENTITY_META_DATA_LOGGING = Boolean.parseBoolean(value))); + registerCommandLineOption(new Option("log_time_relativ", true, "Should time in log timestamp be relative"), (value -> StaticConfiguration.LOG_RELATIVE_TIME = Boolean.parseBoolean(value))); + } + public interface CommandLineArgumentHandler { + void handle(@Nullable String value); } } diff --git a/src/main/java/de/bixilon/minosoft/util/Util.java b/src/main/java/de/bixilon/minosoft/util/Util.java index 549fe78fe..ec2cafa20 100644 --- a/src/main/java/de/bixilon/minosoft/util/Util.java +++ b/src/main/java/de/bixilon/minosoft/util/Util.java @@ -227,15 +227,15 @@ public final class Util { public static void downloadFile(String url, String destination) throws IOException { createParentFolderIfNotExist(destination); - copyFile(getInputStreamByURL(url), new FileOutputStream(destination)); + copyStream(getInputStreamByURL(url), new FileOutputStream(destination)); } public static void downloadFileAsGz(String url, String destination) throws IOException { createParentFolderIfNotExist(destination); - copyFile(getInputStreamByURL(url), new GZIPOutputStream(new FileOutputStream(destination))); + copyStream(getInputStreamByURL(url), new GZIPOutputStream(new FileOutputStream(destination))); } - public static void copyFile(InputStream inputStream, OutputStream output) throws IOException { + public static void copyStream(InputStream inputStream, OutputStream output) throws IOException { byte[] buffer = new byte[ProtocolDefinition.DEFAULT_BUFFER_SIZE]; int length; while ((length = inputStream.read(buffer, 0, buffer.length)) != -1) {