From 1d5a032bdf628fb7e484c17353af8c09c25ccaba Mon Sep 17 00:00:00 2001 From: Peter Pitterling Date: Tue, 4 Dec 2018 00:47:22 +0100 Subject: [PATCH 1/3] add picocli to project --- build.gradle | 1 + .../java/net/atomique/ksar/CmdLineArgs.java | 40 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 src/main/java/net/atomique/ksar/CmdLineArgs.java diff --git a/build.gradle b/build.gradle index 14fb9089..11953a15 100644 --- a/build.gradle +++ b/build.gradle @@ -29,6 +29,7 @@ dependencies { compile group: 'com.itextpdf', name: 'itextpdf', version: '5.5.13' compile group: 'com.jcraft', name: 'jsch', version: '0.1.54' compile group: 'org.jfree', name: 'jfreechart', version: '1.5.0' + compile group: 'info.picocli', name: 'picocli', version: '3.8.1' testCompile 'junit:junit:4.12' } diff --git a/src/main/java/net/atomique/ksar/CmdLineArgs.java b/src/main/java/net/atomique/ksar/CmdLineArgs.java new file mode 100644 index 00000000..70172bb4 --- /dev/null +++ b/src/main/java/net/atomique/ksar/CmdLineArgs.java @@ -0,0 +1,40 @@ +/* + * Copyright 2018 The kSAR Project. All rights reserved. + * See the LICENSE file in the project root for more information. + */ + +package net.atomique.ksar; + +import picocli.CommandLine.Option; + +public class CmdLineArgs { + + @Option(names = "-input", description = "sar file to be processed") + private String filename; + + @Option(names = "-help", description = "show usage", help=true) + private boolean help; + + @Option(names = "-version", description = "print version information") + private boolean version = false; + + @Option(names = "-test", description = "debug mode") + private boolean debug = false; + + public String getFilename() { + return filename; + } + + public boolean isHelp() { + return help; + } + + public boolean isVersion() { + return version; + } + + public boolean isDebug() { + return debug; + } + +} From 6089dbead7e1a9ac57abff88cc4bf7f639cbc824 Mon Sep 17 00:00:00 2001 From: Peter Pitterling Date: Wed, 5 Dec 2018 09:30:20 +0100 Subject: [PATCH 2/3] replace own cmdline handling with picocli processing --- .../java/net/atomique/ksar/CmdLineArgs.java | 2 +- src/main/java/net/atomique/ksar/Main.java | 51 ++++++++++--------- 2 files changed, 27 insertions(+), 26 deletions(-) diff --git a/src/main/java/net/atomique/ksar/CmdLineArgs.java b/src/main/java/net/atomique/ksar/CmdLineArgs.java index 70172bb4..be77f2ba 100644 --- a/src/main/java/net/atomique/ksar/CmdLineArgs.java +++ b/src/main/java/net/atomique/ksar/CmdLineArgs.java @@ -12,7 +12,7 @@ public class CmdLineArgs { @Option(names = "-input", description = "sar file to be processed") private String filename; - @Option(names = "-help", description = "show usage", help=true) + @Option(names = "-help", description = "show usage", help = true) private boolean help; @Option(names = "-version", description = "print version information") diff --git a/src/main/java/net/atomique/ksar/Main.java b/src/main/java/net/atomique/ksar/Main.java index d15bd676..57e88dce 100644 --- a/src/main/java/net/atomique/ksar/Main.java +++ b/src/main/java/net/atomique/ksar/Main.java @@ -15,6 +15,8 @@ import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; +import picocli.CommandLine; + public class Main { private static final Logger log = LoggerFactory.getLogger(Main.class); @@ -61,8 +63,6 @@ public void run() { } public static void main(String[] args) { - int i = 0; - String arg; log.info("ksar Version : {}", VersionNumber.getVersionString()); log.info("Java runtime Version : {}", System.getProperty("java.runtime.version")); @@ -79,30 +79,31 @@ public static void main(String[] args) { config = Config.getInstance(); globaloptions = GlobalOptions.getInstance(); + CmdLineArgs cmdl_args = new CmdLineArgs(); + new CommandLine(cmdl_args).parse(args); - if (args.length > 0) { - while (i < args.length && args[i].startsWith("-")) { - arg = args[i++]; - if ("-version".equals(arg)) { - show_version(); - System.exit(0); - } - if ("-help".equals(arg)) { - usage(); - continue; - } - if ("-test".equals(arg)) { - GlobalOptions.setDodebug(true); - continue; - } - if ("-input".equals(arg)) { - if (i < args.length) { - GlobalOptions.setCLfilename(args[i++]); - } else { - exit_error(resource.getString("INPUT_REQUIRE_ARG")); - } - continue; - } + if (cmdl_args.isVersion()) { + show_version(); + System.exit(0); + } + + if (cmdl_args.isHelp()) { + usage(); + System.exit(0); + } + + if (cmdl_args.isDebug()) { + GlobalOptions.setDodebug(true); + } else { + GlobalOptions.setDodebug(false); + } + + if (cmdl_args.getFilename() != null) { + if (cmdl_args.getFilename().isEmpty()) { + exit_error(resource.getString("INPUT_REQUIRE_ARG")); + } + else { + GlobalOptions.setCLfilename(cmdl_args.getFilename()); } } From e66034627fd423c16a3c2f6740498ff7613178f6 Mon Sep 17 00:00:00 2001 From: Peter Pitterling Date: Wed, 5 Dec 2018 10:05:40 +0100 Subject: [PATCH 3/3] fix checkstyle errors and copyright --- src/main/java/net/atomique/ksar/Main.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/atomique/ksar/Main.java b/src/main/java/net/atomique/ksar/Main.java index 57e88dce..34e44dd4 100644 --- a/src/main/java/net/atomique/ksar/Main.java +++ b/src/main/java/net/atomique/ksar/Main.java @@ -1,5 +1,5 @@ /* - * Copyright 2008 The kSAR Project. All rights reserved. + * Copyright 2018 The kSAR Project. All rights reserved. * See the LICENSE file in the project root for more information. */ @@ -8,6 +8,7 @@ import net.atomique.ksar.ui.Desktop; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import picocli.CommandLine; import java.util.ResourceBundle; @@ -15,8 +16,6 @@ import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; -import picocli.CommandLine; - public class Main { private static final Logger log = LoggerFactory.getLogger(Main.class); @@ -94,15 +93,14 @@ public static void main(String[] args) { if (cmdl_args.isDebug()) { GlobalOptions.setDodebug(true); - } else { + } else { GlobalOptions.setDodebug(false); } if (cmdl_args.getFilename() != null) { if (cmdl_args.getFilename().isEmpty()) { exit_error(resource.getString("INPUT_REQUIRE_ARG")); - } - else { + } else { GlobalOptions.setCLfilename(cmdl_args.getFilename()); } }