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