From 6a52ab9d5a63438204de3d4c3fec186ccef9f052 Mon Sep 17 00:00:00 2001 From: Leonard Kupper <leonard.kupper@mailbox.tu-dresden.de> Date: Wed, 2 Oct 2019 02:41:32 +0200 Subject: [PATCH] Fix missing options for single -h parameter. --- .../de/tudresden/inf/mci/brailleplot/App.java | 16 ++++------ .../commandline/CommandLineParser.java | 32 +++++++++++++++++-- 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/src/main/java/de/tudresden/inf/mci/brailleplot/App.java b/src/main/java/de/tudresden/inf/mci/brailleplot/App.java index ced2b62e..2d1ad1a4 100644 --- a/src/main/java/de/tudresden/inf/mci/brailleplot/App.java +++ b/src/main/java/de/tudresden/inf/mci/brailleplot/App.java @@ -54,7 +54,6 @@ import java.io.Reader; import java.net.URL; import java.nio.file.Path; import java.util.Objects; -import java.util.Optional; import java.util.concurrent.ConcurrentLinkedDeque; import static tec.units.ri.unit.Units.METRE; @@ -62,8 +61,8 @@ import static tec.units.ri.unit.Units.METRE; /** * Main class. * Set up the application and run it. - * @author Georg GraĆnick, Andrey Ruzhanskiy - * @version 2019.09.30 + * @author Georg GraĆnick, Andrey Ruzhanskiy, Leonard Kupper + * @version 2019.10.02 */ public final class App { @@ -161,16 +160,13 @@ public final class App { mLogger.info("Application started"); // Parse command line parameters CommandLineParser cliParser = new CommandLineParser(); - SettingsWriter settings = cliParser.parse(args); - SettingsReader settingsReader = settings; - - - // If requested, print help and exit - Optional<Boolean> printHelp = settingsReader.isTrue(SettingType.DISPLAY_HELP); - if (printHelp.isPresent() && printHelp.get()) { + if (CommandLineParser.checkForHelp(args)) { + // If requested, print help and exit cliParser.printHelp(); return EXIT_SUCCESS; } + SettingsWriter settings = cliParser.parse(args); + SettingsReader settingsReader = settings; // Config Parsing JavaPropertiesConfigurationParser configParser; diff --git a/src/main/java/de/tudresden/inf/mci/brailleplot/commandline/CommandLineParser.java b/src/main/java/de/tudresden/inf/mci/brailleplot/commandline/CommandLineParser.java index 869b2851..ea0f76f3 100644 --- a/src/main/java/de/tudresden/inf/mci/brailleplot/commandline/CommandLineParser.java +++ b/src/main/java/de/tudresden/inf/mci/brailleplot/commandline/CommandLineParser.java @@ -3,11 +3,11 @@ package de.tudresden.inf.mci.brailleplot.commandline; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.DefaultParser; import org.apache.commons.cli.HelpFormatter; +import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; -import java.lang.reflect.Array; -import java.util.Arrays; +import java.util.Objects; /** @@ -19,13 +19,20 @@ public class CommandLineParser { private Options mOptions; + public static Option helpOption = Option.builder("h") + .longOpt("help") + .required(false) + .hasArg(false) + .desc("Print help and exit") + .build(); + public CommandLineParser() { setupOptions(); } private void setupOptions() { mOptions = new Options(); - mOptions.addOption("h", SettingType.DISPLAY_HELP.toString(), false, "Print help and exit") + mOptions.addOption(helpOption) .addRequiredOption("c", SettingType.CSV_LOCATION.toString(), true, "Path to CSV") .addRequiredOption("p", SettingType.PRINTER_CONFIG_PATH.toString(), true, "Path to printer configuration file") .addRequiredOption("t", SettingType.DIAGRAM_TITLE.toString(), true, "Title of the diagram") @@ -57,6 +64,25 @@ public class CommandLineParser { return new Settings(cmdLine); } + public static boolean checkForHelp(final String[] args) { + + boolean hasHelp = false; + Options options = new Options(); + options.addOption(helpOption); + org.apache.commons.cli.CommandLineParser parser = new DefaultParser(); + CommandLine cmd = null; + try { + cmd = parser.parse(options, args); + } catch (ParseException e) { + // Will occur if any other option than "help" is encountered + // For this case we can safely ignore it. + } + if (Objects.nonNull(cmd) && cmd.hasOption(helpOption.getOpt())) { + hasHelp = true; + } + return hasHelp; + } + /** * Print usage information to the command line. */ -- GitLab