This Java program provides a graphical user interface (GUI) for the workshop management system that makes use of a database. It keeps track of workshops, helpers, instructors and rooms. When everything is updated in the database the program can be used to generate a website for the workshop.
Start by making sure that you have Java 17 or later installed. You can do this
by opening a bash terminal or a command prompt and then type java -version.
You should get something like:
openjdk version "21.0.8" 2025-07-15
OpenJDK Runtime Environment (build 21.0.8+9-Ubuntu-0ubuntu124.04.1)
OpenJDK 64-Bit Server VM (build 21.0.8+9-Ubuntu-0ubuntu124.04.1, mixed mode, sharing)Create a directory on your hard drive into which you can download the program.
If you don't have Java installed you only need to download a Java Runtime Environment.
You can download an appropriate version from here: For Windows: https://www.azul.com/downloads/?version=java-17-lts&os=windows&package=jre#zulu
For Mac: https://www.azul.com/downloads/?version=java-17-lts&os=macos&package=jre#zulu
For Linux: https://www.azul.com/downloads/?version=java-17-lts&os=linux&package=jre#zulu
Unzip the downloaded file and copy the contents into a subdirectory called jre below the
directory you have created for your program.
In your web browser, navigate to:
https://github.com/CarpentriesMagic/WorkshopAdminUI/releases
Click on the little arrow to the left of the Assets heading of the latest Automated Build. You need to download the following:
- dwa-##.jar (replace ## with the build version)
- emptydatabase.sqlite
- logging.properties
- sqlite-jdbc-3.50.3.0.jar
- workshopadmin.properties.bu
- In the same directory as the .jar file, copy emptydatabase.sqlite to data.sqlite
- Copy workshopadmin.properties.bu to workshopadmin.properties
At the command prompt in the directory into which you downloaded all the files, type (replace ## with the appropriate version number that you downloaded):
java -cp dwa-##.jar Main- Add venues to your database using the
Roomstab. Do this first because you can't add a workshop without a venue. - Start by adding people to your database by using the
Peopletab. Do this second because you need people to be able to add instructors and helpers. If a person is a certified Carpentries instructor the value in theCertifiedcolumn should be one. If the person can act only as a helper (and is not certified) the value should be 0. If a person is not active as a helper or an instructor the should be -1. - Make sure the settings on the
Settingstab are correct to reflect the preferences of your organisation. - Next add your workshops. Each workshop is identified by a slug that comprises of
YYYY-MM-DD-ORGwhereYYYYis the year of the first day of the workshop,MMthe month andDDthe day.ORGis to be replaced by the name, or abbreviation of the name, of your organisation eg.2025-01-10-NCL. If the workshop is online-onlineis added to the end. - Before adding instructors and helpers, you need to have people and workshops added. To add instructors to a
workshop, select the
Instructorstab. Select the slug of the workshop and then, in the second column, select the person. Only people with aCertifiedvalue of1will be listed in the dropdown box. - To add helpers, you need to navigate to the
Helperstab. People with aCertifiedvalue of 0 and higher will be listed for selection as helper.
To create a workshop website you need to have a GitHub account. You also need to be able to connect to GitHub with a rsa ssh key pair and a token that gives you permission to delete a repository.
Save your GitHub token to ~/.ssh/gh_token
The last tab Website creation has three buttons and one dropdown box:
- The dropdown box is for selecting a workshop for which you want to create a website.
- The
Generatebutton will create a repository using the Carpentries workshop-template. The repository will be created in the GitHub organisation which is the settings table, using theorganisationkey value. - The
Deletebutton will delete the repository selected from the dropdown box in the organisation from theSettingstable - The
Clonebutton will clone the repository created in step2to your local drive in the directory that you currently are (and most likely are running this program from). It will then update all the template values and push the changes back to GitHub. GitHub pages will build the website and it should be availabile after a few minutes.
flowchart LR
CreateFromTemplate["Create From
Template on github"] -->
CloneToLocal["Clone to local drive"] -->
UpdateIndex["Update index.md"] -->
UpdateConfig["Update _config.yml"] -->
PushToGitHub["Push changes to GitHub"]
The html you provide in a custom schedule file will be inserted into index.md at the appropriate point to render instead of the standard schedule.
- Save the html for your workshop schedule to
WorkshopAdminUI/schedulesdirectory - File name for the custom schedule must match the schedule field for the workshop e.g.
git.htmlforgit
To create a document in hackmd, you need a hackmd.io account and an API key.
Save your HackMD API key to ~/.ssh/hmd_token
- Save your hackmd template to
WorkshopAdminUI/HackMD_Templatesdirectory - File name for the collab document template must match the schedule field for the workshop e.g.
git.mdforgit
classDiagram
Helpers *-- Helper
HelperTableModel *-- Helpers
HelperTable *-- HelperTableModel
HelperPanel *-- HelperTable
Instructors *-- Instructor
InstructorTableModel *-- Instructors
InstructorTable *-- InstructorTableModel
InstructorPanel *-- InstructorTable
People *-- Person
PersonTableModel *-- People
PersonTable *-- PersonTableModel
PersonPanel *-- PersonTable
classDiagram
Rooms *-- Room
RoomTableModel *-- Rooms
RoomTable *-- RoomTableModel
RoomPanel *-- RoomTable
Settings *-- Setting
SettingTableModel *-- Settings
SettingTable *-- SettingTableModel
SettingPanel *-- SettingTable
Workshops *-- Workshop
WorkshopTableModel *-- Workshops
WorkshopTable *-- WorkshopTableModel
WorkshopPanel *-- WorkshopTable
WorkshopEntryPanel *-- WorkshopEntry
SplitPane *-- WorkshopTablePanel
SplitPane *-- WorkshopEntryPanel
WorkshopPanel *-- SplitPane
classDiagram
DBHandler <|-- MySQLDBHandler
MainFrame *-- MainTabbedPane





