/ README.md
README.md
1 # Bachelor programme processor _(Bachelorizer)_ 2 3 Bachelorizer is a command-line tool 4 to validate course compositions for bachelor programmes 5 at Roskilde University. 6 7 It was initially created 8 as a Computer Science mini project assignment 9 for the bachelor course in Computer Science 10 "Subject Module Course 2: Software Development F2025" 11 at Roskilde University, 12 done by [Jonas Smedegaard]. 13 14 [Jonas Smedegaard]: <https://dr.jones.dk/> 15 16 Bachelorizer is publicly available as [source]. 17 18 [source]: <https://app.radicle.xyz/nodes/seed.radicle.garden/rad:z3Xeo1Wg65SQAhD6QFTtVWQmjVHJU> 19 "Web instance of sources for Bachelorizer" 20 21 ## Database creation 22 23 The database file `identifier.sqlite` needed by the program 24 can be created on a linux system using the command-line tool `sqlite3` 25 with the following command: 26 27 ```shell 28 sqlite3 identifier.sqlite < database.txt 29 ``` 30 31 Since Intellij executes from a different directory than from commandline, 32 the generated database file is then copied 33 into the directory `src/dk.biks.bachelorizer`. 34 35 ## Code execution 36 37 The code has only been verified to work from command-line 38 (it is unknown if it works in IDEs other than Intellij, 39 such as Eclipse or NetBeans). 40 41 GNUMake files are provided for building, packaging and running the code. 42 43 For those not using GNUMake, 44 a concrete example command is provided below, 45 executing on build 20 of OpenJDK 25. 46 47 Execution succeeds with OpenJDK 17, 21, 22, 23, 24 and build 20 of 25, 48 except JavaFX/OpenJFX code fails with OpenJDK 17 and 21, 49 and fails with OpenJDK 17, 21, 22 and 23 when executed from source. 50 These failures are likely limitations to "source code mode" 51 (i.e. [JEP 330] since OpenJDK 11 and [JEP 458] since OpenJDK 22). 52 53 OpenJDK versions before 23 emit many errors 54 due to not recognizing the Markdown-flavored javadoc comments. 55 56 Code has been tested only against the following library releases: 57 58 * JavaFX/OpenJFX 11.0.11 59 from <https://packages.debian.org/sid/openjfx>. 60 * JUnit 5.10.3 61 from <https://packages.debian.org/sid/junit5>. 62 * SQLite JDBC 3.46.1.3 63 from <https://packages.debian.org/sid/libxerial-sqlite-jdbc-java>. 64 65 [JEP 330]: https://openjdk.org/jeps/330 66 67 [JEP 458]: https://openjdk.org/jeps/458 68 69 ### Executing from class files 70 71 The command `make runclass-dk.biks.bachelorizer` 72 is equivalent to these five commands: 73 74 ```sh 75 rm -rf mods/com.example.portfolio2 76 javac --module-path /usr/share/java/sqlite-jdbc.jar \ 77 -Xlint -Xdoclint -implicit:none -Xlint -Xdoclint -implicit:none \ 78 -d mods/com.example.portfolio2 \ 79 src/com.example.portfolio2/module-info.java \ 80 src/com.example.portfolio2/com/example/portfolio2/MyDB.java 81 rm -rf mods/com.example.portfolio3 82 javac -Xlint -Xdoclint -implicit:none -Xlint -Xdoclint -implicit:none \ 83 -d mods/com.example.portfolio3 \ 84 src/com.example.portfolio3/module-info.java \ 85 src/com.example.portfolio3/com/example/portfolio3/AbstractGraph.java \ 86 src/com.example.portfolio3/com/example/portfolio3/AdjListGraph.java \ 87 src/com.example.portfolio3/com/example/portfolio3/AdjMapGraph.java \ 88 src/com.example.portfolio3/com/example/portfolio3/Edge.java \ 89 src/com.example.portfolio3/com/example/portfolio3/EdgeGraph.java \ 90 src/com.example.portfolio3/com/example/portfolio3/GraphAlgorithms.java \ 91 src/com.example.portfolio3/com/example/portfolio3/Graph.java \ 92 src/com.example.portfolio3/com/example/portfolio3/Graphs.java \ 93 src/com.example.portfolio3/com/example/portfolio3/MatrixGraph.java \ 94 src/com.example.portfolio3/com/example/portfolio3/Vertex.java 95 rm -rf mods/dk.biks.bachelorizer 96 javac --module-path \ 97 /usr/share/openjfx/lib:/usr/share/java/sqlite-jdbc.jar\ 98 :mods/com.example.portfolio2\ 99 :mods/com.example.portfolio3 \ 100 --add-modules javafx.base,javafx.controls,javafx.graphics \ 101 -Xlint -Xdoclint -implicit:none -Xlint -Xdoclint -implicit:none \ 102 -d mods/dk.biks.bachelorizer \ 103 src/dk.biks.bachelorizer/module-info.java \ 104 src/dk.biks.bachelorizer/dk/biks/bachelorizer/Main.java \ 105 src/dk.biks.bachelorizer/dk/biks/bachelorizer/Graph.java \ 106 src/dk.biks.bachelorizer/dk/biks/bachelorizer/Window.java \ 107 src/dk.biks.bachelorizer/dk/biks/bachelorizer/Controller.java \ 108 src/dk.biks.bachelorizer/dk/biks/bachelorizer/Database.java \ 109 src/dk.biks.bachelorizer/dk/biks/bachelorizer/GUI.java \ 110 src/dk.biks.bachelorizer/dk/biks/bachelorizer/Person.java \ 111 src/dk.biks.bachelorizer/dk/biks/bachelorizer/Storage.java \ 112 src/dk.biks.bachelorizer/dk/biks/bachelorizer/UI.java 113 java --module-path mods/dk.biks.bachelorizer\ 114 :/usr/share/openjfx/lib\ 115 :/usr/share/java/sqlite-jdbc.jar\ 116 :mods/com.example.portfolio2\ 117 :mods/com.example.portfolio3 \ 118 --add-modules javafx.base,javafx.controls,javafx.graphics \ 119 --enable-native-access=javafx.graphics \ 120 --enable-native-access=sqlite.jdbc \ 121 --sun-misc-unsafe-memory-access=allow \ 122 -m dk.biks.bachelorizer/dk.biks.bachelorizer.Main 123 ``` 124 125 When compiled like above, the class Graph may be executed as well: 126 127 ```sh 128 java --module-path mods/dk.biks.bachelorizer\ 129 :/usr/share/openjfx/lib\ 130 :/usr/share/java/sqlite-jdbc.jar\ 131 :mods/com.example.portfolio2\ 132 :mods/com.example.portfolio3 \ 133 --add-modules javafx.base,javafx.controls,javafx.graphics \ 134 --enable-native-access=javafx.graphics \ 135 --enable-native-access=sqlite.jdbc \ 136 --sun-misc-unsafe-memory-access=allow \ 137 -m dk.biks.bachelorizer/dk.biks.bachelorizer.Graph 138 ``` 139 140 ## License 141 142 Copyright © 2025 Jonas Smedegaard 143 144 Except when otherwise noted, 145 this work is licensed 146 under a Creative Commons Attribution-ShareAlike 4.0 International License 147 ([CC-BY-SA-4.0]). 148 149 [CC-BY-SA-4.0]: <https://creativecommons.org/licenses/by-sa/4.0/> 150 "Creative Commons Attribution-ShareAlike 4.0 International license"