aboutsummaryrefslogtreecommitdiff
path: root/src/dk.biks.bachelorizer/dk/biks/bachelorizer/Main.java
blob: a88d1f44dc6fb196df3f35ad3362acd1a10f4a95 (plain)
  1. // SPDX-FileCopyrightText: 2025 Jonas Smedegaard <dr@jones.dk>
  2. // SPDX-License-Identifier: GPL-3.0-or-later
  3. package dk.biks.bachelorizer;
  4. import java.util.Arrays;
  5. /// Bachelorizer - bachelor programme registrar
  6. ///
  7. /// Tool for registering students
  8. /// for activities in their bachelor programme.
  9. ///
  10. /// Runner class spawning an interactive or non-interactive application
  11. /// based on passed arguments
  12. ///
  13. /// Multi-framework MVC structure inspired by project Криптоанализатор
  14. /// written by Александр Хмелев <akhmelev@gmail.com>.
  15. ///
  16. /// * v0.0.1-draft
  17. /// * initial release, as part of delivery "Portfolio 1"
  18. ///
  19. /// @version 0.0.1-draft
  20. /// @see <https://moodle.ruc.dk/mod/assign/view.php?id=523186>
  21. /// @see <https://github.com/demologin/CryptoAnalyzerLed>
  22. public class Main {
  23. /// Default constructor
  24. ///
  25. /// @param args command-line arguments or default demo data
  26. public Main(final String[] args) {
  27. switch (uiFromArgs(args)) {
  28. case "gui" -> { Window.main(args); }
  29. // TODO case "tui" -> { Screen.main(args); }
  30. // TODO case "cli" -> { Prompt.main(args); }
  31. default -> {
  32. throw new UnsupportedOperationException(
  33. "Not yet implemented.");
  34. }
  35. }
  36. }
  37. /// JVM entry point
  38. ///
  39. /// @param args command-line arguments
  40. public static void main(String[] args) {
  41. // inject initial sample data unless passed as arguments
  42. if ((args.length == 0)
  43. || (!Arrays.stream(args).anyMatch(
  44. s -> s != null && !s.startsWith("-")))
  45. ) {
  46. args = new String[] {
  47. "Jonas Smedegaard",
  48. "CS-SMC2",
  49. "CS-SMC3",
  50. };
  51. }
  52. new Main(args);
  53. }
  54. /// minimal argument parser to detect explicit UI choice
  55. ///
  56. /// @param args command-line arguments
  57. /// @return choice of UI as String
  58. public static String uiFromArgs(final String[] args) {
  59. // TODO: make "cli" the default when implemented
  60. String defaultUI = "gui";
  61. for (String arg : args) {
  62. if (arg.matches("--(gui|tui|cli)")) {
  63. return (arg.length() == 2)
  64. ? defaultUI
  65. : arg.substring(2);
  66. }
  67. }
  68. return defaultUI;
  69. }
  70. }