diff options
author | Jonas Smedegaard <dr@jones.dk> | 2025-03-31 17:05:42 +0200 |
---|---|---|
committer | Jonas Smedegaard <dr@jones.dk> | 2025-03-31 17:07:33 +0200 |
commit | db57e539760b4f9d3fba2f7027abe9dbd017c45d (patch) | |
tree | f4165a9b65e7a9da28cdfbac9616609528e5f2a5 /dk/abcdefghijklmnopqrstuvxyzæøå/bachelorizer/Main.java | |
parent | 4649104978b834156a649d7f1e4613c940e6b626 (diff) |
expand to use multi-framework MVC pattern
Diffstat (limited to 'dk/abcdefghijklmnopqrstuvxyzæøå/bachelorizer/Main.java')
-rw-r--r-- | dk/abcdefghijklmnopqrstuvxyzæøå/bachelorizer/Main.java | 75 |
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; } } |