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