/ 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"