- have Java JDK version 8 or higher
- get and unzip gradle
- add gradle/bin to PATH
- clone this repo:
git clone https://github.com/steffanossa/tm.git
- execute
gradlew run
in cloned dir
- have Java JDK version 8 or higher
- get and unzip gradle
- Unzip the distribution zip file in the directory of your choosing, e.g.:
mkdir /opt/gradle
unzip -d /opt/gradle gradle-8.5-bin.zip
- add to path:
export PATH=$PATH:/opt/gradle/gradle-8.5/bin
- clone this repo:
git clone https://github.com/steffanossa/tm.git
- execute
gradle run
in cloned dir
(click to show/hide image)
- Anbindung zu Datenbank mit JDBC
- Graphische Benutzeroberfläche mit JavaFX
- Darstellung von Studentendaten
- Auswählen von Studenten zum Kopieren der Daten in die Zwischenablage mit wählbarem Trennzeichen
- Auswählen von relevanten Spalten
- Freie Anordnung der Spalten
- Hinzufügen & Löschen einzelner bzw. mehrerer Studenten
- gemeinfreie (public domain) Programmbibliothek
- keine Client-Server-Architektur
- keine Verwaltung von Nutzer- und Zugriffsrechten
- weit verbreitet12
- leichtgewichtig3
Einzelne Schnittstelle für verschiedene Datenbanktypen ermöglicht unkomplizierte Wechsel ebendieser.
Gradle ist ein open source Build-Management-Tool. Es vereinfacht die Entwicklung, das Testen und die Bereitstelung von Anwendungen verschiedener Programmiersprachen. Alternativ hätte Maven genutzt werden können. Maven arbeitet allerdings mit XML.
Zur Trennung der persistenten Daten- von der Anwendungsschicht, wurde das Konzept des Data Access Object (DAO) genutzt. Dadurch ist es für die Anwendungsschicht irrelevant, welche Art von Datenbank zum Einsatz kommt. Jegliche Kommunikation findet über die DAO-Schnittstelle statt. Sollte zukünftig von SQLite auf MongoDB o.ä. gewechselt werden, bliebe die Anwendungsschicht davon unberührt. Lediglich Anpassungen am DAO würden nötig.
Die in der Anwendung gezeigten Daten sind keine Live-Daten, sondern Transferobjekte (Data Tranfer Objects). Diese Daten wurden einmalig aus der Datenbank herausgelesen und in DTOs umgewandelt. Operationen können an ihnen durchgeführt werden, ohne dass eine Datenbankverbindung permanent erforderlich ist.
Business Logic im Model (M), GUI-Elemente im View (V), der Presenter (P) agiert als Vermittler. Alle Interaktionen mit der Nutzeroberfläche werden vom Presenter verarbeitet. Die zugehörigen Methoden des Models werden von ihm aufgerufen, die Rückgaben im Anschluss verarbeitet und die Nutzeroberfläche aktualisiert. Durch diese strikte Trennung von Nutzeroberfläche und Geschäftslogik wird eine Modularität erreicht, durch die Änderungen an einzelnen Komponenten möglich sind, ohne dadurch Änderungen an anderen Stellen nötig werden zu lassen (lose Kopplung).4
(click to show/hide image)
Dem Start des Programms folgt die Anzeige eines Dialogfensters, über das die zu öffnende Datenbank selektiert werden kann.
(click to show/hide image)
Die Auswahl einer inkompatiblen Datei löst ein weiteres Dialogfenster aus, das über die fehlerhafte Auwahl informiert. Anschließend wird das vorige Fenster erneut angezeigt.
(click to show/hide image)
Ist eine gültige Auswahl getroffen worden, wird das Hauptfenster geöffnet.
(click to show/hide image)
Die Daten der Studententabelle werden in einem TableView-Objekt angezeigt. Die Spaltenreihenfolge lässt sich per Drag-And-Drop der jeweiligen Spaltenüberschriftfelder anpassen. Über das mit einem Rechtsklick in den TableView erreichbare Kontextmenü lassen sich die Spalten einzeln de- oder aktivieren, d.h. un- bzw. sichtbar machen. Einzelne Zeilen lassen sich mithilfe der Checkboxen aus- und abwählen. Für das Hinzufügen, Editieren und Entfernen von Einträgen gibt es jeweils einen Button oberhalb der Tabelle. Ein Klick auf den Add-Button öffnet ein Dialogfenster, in dem die Daten des hinzuzufügenden Studenten eingegeben werden können.
(click to show/hide image)
Das Kreuz und der Cancel-Button beenden den Vorgang. Das Klicken des OK-Buttons fügt die Daten nach Überprüfung auf formelle Richtigkeit der Tabelle und der Datenbank hinzu, es sei denn in der Datenbank befindet sich bereits eine Beobachtung mit der eingegebenen Matrikulationsnummer und/oder FH-Kennung. Der Nutzer wird über jegliche fehlerhafte Eingabe nach Betätigung des OK-Buttons mittels Dialog-Fenster informiert und kann die Eingaben daraufhin erneut prüfen.
(click to show/hide image)
Der Edit-Button ist nur klickbar, wenn genau eine Zeile ausgewählt ist. Er löst ebenfalls ein Dialogfenster aus, nur dass die Textfelder jetzt die Daten des Studenten enthalten, der zuvor ausgewählt wurde. Der weitere Ablauf ist analog zum Hinzufügen.
(click to show/hide image)
Der Remove-Button nur, wenn mindestens eine Zeile ausgewählt ist. Über ihn lassen sich die ausgewählten Zeilen aus Tabelle und Datenbank entfernen, bevor dies geschieht wird jedoch mit einem Dialogfenster eine Bestätigung abgefragt.
(click to show/hide image)
Unterhalb der Tabelle befindet sich der Previewstring. Durch ihn wird beispielhaft dargestellt, wie die Daten später ausgegeben würden. Die Reihenfolge der Spalten sowie die Information, welche Spalten aktiviert sind, finden sich hier wieder. Dazu wird das Trennzeichen, das über ein Auswahlfeld selektiert werden kann mit dargestellt. Über dieses Auswahlfeld lässt sich eines von vier festgelegten Trennzeichen auswählen.
(click to show/hide image)
Die Daten der ausgewählten Spalten können mit dem Clipboard-Button in die Zwischenablage kopiert werden. Die Formatierung folgt der Spaltenreihenfolge und dem gewählten Trennzeichen. Der Button ist nur aktiv, sollte mindestens eine Zeile ausgewählt sein. Die Daten der ausgewählten Spalten können ebenso als Reintext in einer Datei gespeichert werden. Hierzu dient der Save-Button. Ein Klick öffnet ein Dialogfenster, über das Ort und Name der zu speichernden Datei festgelegt werden kann.
(click to show/hide image)
Hilfe
(click to show/hide image)
Über
(click to show/hide image)
Der Scenebuilder wurde nicht verwendet, da er mit (F)XML arbeitet. XML ist Mist.
- mock db in test dir
- unit tests
- studentDAO
- sqlitebuddy
- mainmodel
- inputdialogmodel
- custom exceptions MEH
- edit window umbennenen
- bad input sprache
- uniquenessmessage sprache
- DAO Interface
- Edit-Button
- bilder updaten
- menubar mit reload data, help und about
- about view
- help view
- howTo schreiben
- testen unter linux / mac (debian 12 workde)
- uml gedöns
- mvp
- dao
- add process
- class diagram
- datenbank interaktionen minimieren
- remove
- edit
- add
- generic alert for any errors
- checkbox column
- adds to selected
- not in preview
- not in reordering -> setReorderable=false still allows "passive reordering" :(
- not hideable
- not in clipboard & saveTo
- update what happens after exception alert
- fix toggleAll (disabled)
- fix cancelling add-process unselects everything
- add screenshot of exception alert
- redo alerts, enum for image selection => reduced to single malleable alert
Footnotes
-
Reference: https://www.statista.com/statistics/809750/worldwide-popularity-ranking-database-management-systems/ ↩
-
Reference: https://sqlite.org/mostdeployed.html ↩
-
Reference: https://sqlite.org/about.html ↩
-
Reference: https://support.touchgfx.com/docs/development/ui-development/software-architecture/model-view-presenter-design-pattern ↩