aboutsummaryrefslogtreecommitdiff
path: root/src/dk.biks.bachelorizer/dk/biks/bachelorizer/Main.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/dk.biks.bachelorizer/dk/biks/bachelorizer/Main.java')
-rw-r--r--src/dk.biks.bachelorizer/dk/biks/bachelorizer/Main.java90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/dk.biks.bachelorizer/dk/biks/bachelorizer/Main.java b/src/dk.biks.bachelorizer/dk/biks/bachelorizer/Main.java
new file mode 100644
index 0000000..2efd5b8
--- /dev/null
+++ b/src/dk.biks.bachelorizer/dk/biks/bachelorizer/Main.java
@@ -0,0 +1,90 @@
+// SPDX-FileCopyrightText: 2025 Jonas Smedegaard <dr@jones.dk>
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package dk.biks.bachelorizer;
+
+import java.lang.UnsupportedOperationException;
+import java.util.Arrays;
+
+/* TODO
+import dk.biks.bachelorizer.view.Oneshot;
+import dk.biks.bachelorizer.view.Prompt;
+import dk.biks.bachelorizer.view.Pipe;
+import dk.biks.bachelorizer.view.Screen;
+*/
+import dk.biks.bachelorizer.view.Window;
+
+/// Bachelorizer - bachelor programme registrar
+///
+/// Tool for registering students
+/// for activities in their bachelor programme.
+///
+/// Runner class spawning an interactive or non-interactive application
+/// based on passed arguments
+///
+/// Multi-framework MVC structure inspired by project Криптоанализатор
+/// written by Александр Хмелев <akhmelev@gmail.com>.
+///
+/// * v0.0.1-draft
+/// * initial release, as part of delivery "Portfolio 1"
+///
+/// @version 0.0.1-draft
+/// @see <https://moodle.ruc.dk/mod/assign/view.php?id=523186>
+/// @see <https://github.com/demologin/CryptoAnalyzerLed>
+public class Main {
+
+ /// Default constructor
+ ///
+ /// @param args command-line arguments or default demo data
+ public Main(final String[] args) {
+
+ switch (uiFromArgs(args)) {
+ case "gui" -> { Window.main(args); }
+// TODO case "tui" -> { Screen.main(args); }
+// TODO case "cli" -> { Line.main(args); }
+ default -> {
+ throw new UnsupportedOperationException(
+ "Not yet implemented.");
+ }
+ }
+ }
+
+ /// JVM entry point
+ ///
+ /// @param args command-line arguments
+ public static void main(String[] args) {
+
+ // inject initial sample data unless passed as arguments
+ if ((args.length == 0)
+ || (!Arrays.stream(args).anyMatch(
+ s -> s != null && !s.startsWith("-")))
+ ) {
+ args = new String[] {
+ "Jonas Smedegaard",
+ "CS-SMC2",
+ "CS-SMC3",
+ };
+ }
+
+ new Main(args);
+ }
+
+ /// minimal argument parser to detect explicit UI choice
+ ///
+ /// @param args command-line arguments
+ /// @return choice of UI as String
+ public static String uiFromArgs(String[] args) {
+ // TODO: make "cli" the default when implemented
+ String defaultUI = "gui";
+
+ for (String arg : args) {
+ if (arg.matches("--(gui|tui|cli)")) {
+ return (arg.length() == 2)
+ ? defaultUI
+ : arg.substring(2);
+ }
+ }
+
+ return defaultUI;
+ }
+}