aboutsummaryrefslogtreecommitdiff
path: root/src/dk.biks.bachelorizer/dk/biks/bachelorizer/Main.java
blob: ecce6d01ef575e109193397dd82d3d1baa7273a3 (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" -> {
  29. Window.main(args);
  30. }
  31. /* TODO
  32. case "tui" -> {
  33. Screen.main(args);
  34. }
  35. case "cli" -> {
  36. Prompt.main(args);
  37. }
  38. */
  39. default -> {
  40. throw new UnsupportedOperationException(
  41. "Not yet implemented.");
  42. }
  43. }
  44. }
  45. /// JVM entry point
  46. ///
  47. /// @param args command-line arguments
  48. public static void main(String[] args) {
  49. // inject initial sample data unless passed as arguments
  50. if ((args.length == 0)
  51. || (!Arrays.stream(args).anyMatch(
  52. s -> s != null && !s.startsWith("-")))
  53. ) {
  54. args = new String[] {
  55. "Jonas Smedegaard",
  56. "CS-SMC2",
  57. "CS-SMC3",
  58. };
  59. }
  60. new Main(args);
  61. }
  62. /// minimal argument parser to detect explicit UI choice
  63. ///
  64. /// @param args command-line arguments
  65. /// @return choice of UI as String
  66. public static String uiFromArgs(final String[] args) {
  67. // TODO: make "cli" the default when implemented
  68. String defaultUI = "gui";
  69. for (String arg : args) {
  70. if (arg.matches("--(gui|tui|cli)")) {
  71. return (arg.length() == 2)
  72. ? defaultUI
  73. : arg.substring(2);
  74. }
  75. }
  76. return defaultUI;
  77. }
  78. }