aboutsummaryrefslogtreecommitdiff
path: root/src/dk.biks.bachelorizer/dk/biks/bachelorizer/Main.java
blob: 2efd5b8fe0dc7e16e8afc49c2a70ec35cc42cca3 (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. /* TODO
  7. import dk.biks.bachelorizer.view.Oneshot;
  8. import dk.biks.bachelorizer.view.Prompt;
  9. import dk.biks.bachelorizer.view.Pipe;
  10. import dk.biks.bachelorizer.view.Screen;
  11. */
  12. import dk.biks.bachelorizer.view.Window;
  13. /// Bachelorizer - bachelor programme registrar
  14. ///
  15. /// Tool for registering students
  16. /// for activities in their bachelor programme.
  17. ///
  18. /// Runner class spawning an interactive or non-interactive application
  19. /// based on passed arguments
  20. ///
  21. /// Multi-framework MVC structure inspired by project Криптоанализатор
  22. /// written by Александр Хмелев <akhmelev@gmail.com>.
  23. ///
  24. /// * v0.0.1-draft
  25. /// * initial release, as part of delivery "Portfolio 1"
  26. ///
  27. /// @version 0.0.1-draft
  28. /// @see <https://moodle.ruc.dk/mod/assign/view.php?id=523186>
  29. /// @see <https://github.com/demologin/CryptoAnalyzerLed>
  30. public class Main {
  31. /// Default constructor
  32. ///
  33. /// @param args command-line arguments or default demo data
  34. public Main(final String[] args) {
  35. switch (uiFromArgs(args)) {
  36. case "gui" -> { Window.main(args); }
  37. // TODO case "tui" -> { Screen.main(args); }
  38. // TODO case "cli" -> { Line.main(args); }
  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(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. }