aboutsummaryrefslogtreecommitdiff
path: root/dk/abcdefghijklmnopqrstuvxyzæøå/bachelorizer/Main.java
diff options
context:
space:
mode:
authorJonas Smedegaard <dr@jones.dk>2025-03-31 17:05:42 +0200
committerJonas Smedegaard <dr@jones.dk>2025-03-31 17:07:33 +0200
commitdb57e539760b4f9d3fba2f7027abe9dbd017c45d (patch)
treef4165a9b65e7a9da28cdfbac9616609528e5f2a5 /dk/abcdefghijklmnopqrstuvxyzæøå/bachelorizer/Main.java
parent4649104978b834156a649d7f1e4613c940e6b626 (diff)
expand to use multi-framework MVC pattern
Diffstat (limited to 'dk/abcdefghijklmnopqrstuvxyzæøå/bachelorizer/Main.java')
-rw-r--r--dk/abcdefghijklmnopqrstuvxyzæøå/bachelorizer/Main.java75
1 files changed, 49 insertions, 26 deletions
diff --git a/dk/abcdefghijklmnopqrstuvxyzæøå/bachelorizer/Main.java b/dk/abcdefghijklmnopqrstuvxyzæøå/bachelorizer/Main.java
index 633f5f7..d5da2b7 100644
--- a/dk/abcdefghijklmnopqrstuvxyzæøå/bachelorizer/Main.java
+++ b/dk/abcdefghijklmnopqrstuvxyzæøå/bachelorizer/Main.java
@@ -3,39 +3,48 @@
package dk.abcdefghijklmnopqrstuvxyzæøå.bachelorizer;
+import java.lang.UnsupportedOperationException;
import java.util.Arrays;
+/* TODO
+import dk.abcdefghijklmnopqrstuvxyzæøå.bachelorizer.view.Oneshot;
+import dk.abcdefghijklmnopqrstuvxyzæøå.bachelorizer.view.Prompt;
+import dk.abcdefghijklmnopqrstuvxyzæøå.bachelorizer.view.Pipe;
+import dk.abcdefghijklmnopqrstuvxyzæøå.bachelorizer.view.Screen;
+*/
+import dk.abcdefghijklmnopqrstuvxyzæøå.bachelorizer.view.Window;
+
/// Bachelorizer - bachelor programme registrar
///
/// Tool for registering students
/// for activities in their bachelor programme.
///
-/// Core class usable in several ways
-/// * as self-contained executable via method main()
-/// * embedded in a larger system by instantiating Bachelorizer()
+/// 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 {
- /// Student name
- public String name;
-
- /// Student activity list
- public String[] activities;
-
- /// Main constructor
+ /// Default constructor
///
/// @param args command-line arguments or default demo data
public Main(final String[] args) {
- if (args.length > 0 && args[0] != null) {
- this.name = args[0];
- if (args.length > 1 && args[1] != null) {
- this.activities = Arrays.copyOfRange(
- args, 1, args.length);
+
+ 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.");
}
}
}
@@ -45,23 +54,37 @@ public class Main {
/// @param args command-line arguments
public static void main(String[] args) {
- if (args.length == 0)
+ // 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",
};
+ }
- Main session = new Main(args);
+ 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);
+ }
+ }
- // minimal viable product
- System.out.printf("Hi %s%n",
- (session.name != null)
- ? session.name
- : "stranger");
- System.out.printf("You chose these activities: %s%n",
- (session.activities != null)
- ? Arrays.toString(session.activities)
- : "[nothing]");
+ return defaultUI;
}
}