From 591d4312269d71672fa8b981873742c9f5727efb Mon Sep 17 00:00:00 2001 From: Nathan McRae Date: Fri, 24 Jan 2025 23:23:29 -0800 Subject: [PATCH] Add argument parsing --- src/main/java/build.ps1 | 4 +- .../name/nathanmcrae/numbersstation/Main.java | 46 ++++++++++++++++++- 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/src/main/java/build.ps1 b/src/main/java/build.ps1 index 932b143..f5a439a 100644 --- a/src/main/java/build.ps1 +++ b/src/main/java/build.ps1 @@ -1,6 +1,6 @@ $Env:JAVA_HOME = "C:\Users\nathanm\Downloads\openjdk-23.0.1_windows-x64_bin\jdk-23.0.1" $Env:PATH = "C:\Users\nathanm\Downloads\openjdk-23.0.1_windows-x64_bin\jdk-23.0.1\bin;$($Env:PATH)" $Env:PATH_TO_FX="C:\Users\nathanm\Downloads\openjfx-23.0.1_windows-x64_bin-sdk\javafx-sdk-23.0.1\lib" -javac --module-path "$Env:PATH_TO_FX;P:\personal_root\projects\number-station\lib" --add-modules javafx.controls,javafx.fxml,com.fasterxml.jackson.annotation,com.fasterxml.jackson.core,com.fasterxml.jackson.dataformat.xml,com.fasterxml.jackson.datatype.jsr310 .\name\nathanmcrae\numbersstation\*.java -d out +javac --module-path "$Env:PATH_TO_FX;P:\personal_root\projects\number-station\lib" --add-modules javafx.controls,javafx.fxml,com.fasterxml.jackson.annotation,com.fasterxml.jackson.core,com.fasterxml.jackson.dataformat.xml,com.fasterxml.jackson.datatype.jsr310,org.apache.commons.cli .\name\nathanmcrae\numbersstation\*.java -d out cp name/nathanmcrae/numbersstation/*.fxml out/name/nathanmcrae/numbersstation -java --module-path "$Env:PATH_TO_FX;P:\personal_root\projects\number-station\lib" --add-modules javafx.controls,javafx.fxml,com.fasterxml.jackson.annotation,com.fasterxml.jackson.core,com.fasterxml.jackson.dataformat.xml,com.fasterxml.jackson.datatype.jsr310 -cp out name.nathanmcrae.numbersstation.Main +java --module-path "$Env:PATH_TO_FX;P:\personal_root\projects\number-station\lib" --add-modules javafx.controls,javafx.fxml,com.fasterxml.jackson.annotation,com.fasterxml.jackson.core,com.fasterxml.jackson.dataformat.xml,com.fasterxml.jackson.datatype.jsr310,org.apache.commons.cli -cp out name.nathanmcrae.numbersstation.Main @args diff --git a/src/main/java/name/nathanmcrae/numbersstation/Main.java b/src/main/java/name/nathanmcrae/numbersstation/Main.java index 8030e99..b9c095d 100644 --- a/src/main/java/name/nathanmcrae/numbersstation/Main.java +++ b/src/main/java/name/nathanmcrae/numbersstation/Main.java @@ -13,10 +13,12 @@ import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; +import org.apache.commons.cli.*; public class Main extends Application { private static final Logger logger = Logger.getLogger(Main.class.getName()); - + // TODO: get git info + private static final String VERSION = "0.0.1"; private static Path statePath = null; public Path getStatePath() { @@ -59,7 +61,49 @@ public class Main extends Application { } } + private static void parseArguments(String[] args) { + Options options = new Options(); + + Option help = new Option("h", "help", false, "Show help"); + options.addOption(help); + + Option version = new Option("v", "version", false, "Show version"); + options.addOption(version); + + Option station = new Option("s", "station", true, "Specify station name"); + station.setArgName("station-name"); + options.addOption(station); + + CommandLineParser parser = new DefaultParser(); + HelpFormatter formatter = new HelpFormatter(); + String stationName = null; + + try { + CommandLine cmd = parser.parse(options, args); + + if (cmd.hasOption("help")) { + formatter.printHelp("numbers-station", options); + System.exit(0); + } + + if (cmd.hasOption("version")) { + System.out.println("Numbers Station version " + VERSION); + System.exit(0); + } + + if (cmd.hasOption("station")) { + stationName = cmd.getOptionValue("station"); + } + } catch (ParseException e) { + System.out.println(e.getMessage()); + formatter.printHelp("numbers-station", options); + System.exit(1); + } + } + public static void main(String[] args) { + parseArguments(args); + Thread.setDefaultUncaughtExceptionHandler((thread, throwable) -> { logger.log(Level.SEVERE, "Unhandled exception caught", throwable); });