Übungsblatt 5: Eine erste Erweiterung
- Dieses Übungsblatt muss bis spätestens 25. Oktober, 23.59 bearbeitet und via Pull Request abgegeben werden.
- Wir empfehlen, diese Übungsblatt in Zweiergruppen zu bearbeiten (siehe Abgabeinstruktionen am Ende dieses Dokuments)
Einführung
In dieser Übung werden Sie eine komplette (jedoch sinnfreie) Erweiterung an Jabref vornehmen. Ihre Erweiterung soll erkennen, dass ein Paper vom Autor “Fred Brooks” zur Datenbank hinzugefügt wurde. Wenn das Paper hinzugefügt wird, soll eine Dialogbox angezeigt werden. Diese Funktion soll sich via den Preferences an und ausschalten lassen.
In den folgenden Aufgaben entwickeln Sie diese Erweiterung Schritt für Schritt.
Aufgabe 0: Vorbereitung
Erstellen eines Feature branch
Da wir die Änderungen der letzten Übung hier nicht benötigen, starten wir wieder vom Main branch.
git checkout main
Synchronisieren Sie ihr Repository mit den Änderungen vom upstream Repository, wie in Übung 2 beschrieben und pushen Sie den aktualisierten main Branch auf ihr Github repository
git push origin main
Wie immer erstellen wir zuerst für unsere Änderungen einen lokalen Featurebranch und wechseln in diesen:
git branch uebung5
git checkout uebung5
Lesen der Jabref Dokumentation
Wir werden in dieser Übung einige zentrale Mechanismen von JabRef kennenlernen. Diese Sind auf dem JabRef Wiki dokumentiert. Verschaffen Sie sich bitte einen Überblick über die wichtigsten Konzepte, die in den Code-HowTos von JabRef besprochen werden. Kommen Sie später in den Übungen darauf zurück, wenn Sie an einem bestimmten Konzept arbeiten. Lesen Sie auch die High-Level Dokumentation.
Aufgabe 1: Arbeiten mit dem Eventbus
In dieser Aufgabe nutzen Sie den EventBus. Erstellen Sie eine neue Klasse BrooksHandler
in einem neuen Package org.jabref.gui.sillyextensions
.
Diese Klasse soll auf Events vom Typ EntriesAddedEvent
und EntryChangedEvent
reagieren. Wenn immer ein solches Event von Jabref generiert wird, soll
die Meldung “Entries Added” beziehungsweise “Entries Changed” sowie der Titel des entsprechenden Eintrags auf der Konsole (mit System.out.println
) ausgegeben werden.
Tipp: Als Vorlage schauen Sie sich an, wie dies für die Klasse CitationStyleCache
implementiert ist.
Nutzen Sie auch die Funktion Find Usages, die Sie durch das Context Menu in Intellij erreichen können um herauszufinden, wo eine bestimmte Funktionalität benutzt wird.
Committen Sie Ihre Änderungen.
Aufgabe 2: Arbeiten mit dem Logger
In einem realen Projekt wollen Sie nicht Meldungen mit System.out.println
auf die Konsole ausgeben. Stattdessen verwendet man ein logging System, um Meldungen auszugeben.
Ändern Sie die Ausgabe so ab, dass der Logger verwendet wird. Die Loggingnachrichten sollen mit dem Level info
gelogged werden.
Schauen Sie sich danach die Datei tinylog.properties
an, die Sie im Verzeichnis src\main\resources\
finden. In dieser Datei können Sie den Logging Level verändern.
Setzen Sie den Logging Level Info
auf Debug
. Schauen Sie sich die Meldungen an, die auf die Konsole ausgegeben werden, wenn Sie JabRef starten. Was beobachten Sie?
Hinweis: In der Dokumentation steht, dass der Logger mittels LogFactory.getLog(<ClassName>.class);
instantiiert werden kann. Es sollte jedoch LoggerFactory.getLogger(<ClassName>.class)
sein.
Committen Sie Ihre Änderungen.
Aufgabe 3: Anzeigen eines Infodialogs
Als nächsten passen Sie die Klasse BrooksHandler
so an, dass wenn der Autor eines Eintrags von Frederick Brooks ist, ein Infodialog mit der Meldung
“Neues Paper von Frederick Brooks hinzugefügt” angezeigt wird.
Nutzen Sie dazu die Methode showInformationDialogAndWait
der Schnittstelle DialogService
.
Tipp: Nutzen sie auch hier wieder die Suchfunktionen und die Funktion Find Usages von IntelliJ um relevante Codebeispiele zu finden.
Committen Sie Ihre Änderungen.
Aufgabe 4: Lokalisierung
Machen Sie den Dialog aus voriger Aufgabe mittels Localization mehrsprachig. Die Meldung sollten mindestens für die Sprachen Deutsch und Englisch implementiert werden. Tipp: Um die Mehrsprachigkeit zu testen, können Sie die Sprache im Preferences Dialog umstellen.
Committen Sie Ihre Änderungen.
Aufgabe 5: Einfügen einer neuen Option in den Preferences Dialog
Fügen Sie eine neue Checkbox Scan for Brooks im Preferences Dialog hinzu.
Tipp: Orientieren Sie sich an der Einstellung showAdvancedHints
. Suchen Sie die Stellen im Code wo etwas für diese Einstellung gemacht wird und imitieren Sie den
Code.
Committen Sie Ihre Änderungen.
Aufgabe 6: Abfragen der Preferences.
Als Letztes passen Sie die Klasse BrooksHandler
so an, dass die Dialogbox nur angezeigt wird, wenn die entsprechende Checkbox in den Preferences gesetzt ist.
Committen Sie Ihre Änderungen.
Abgabe
Die Abgabe der Übung erfolgt durch push vom entsprechenden Branch:
git push origin uebung5
und entsprechenden Pull Request. Geben Sie hier den Ihnen zugeordneten Reviewer (siehe diese Liste) an. Wenn Sie zu zweit gearbeitet haben, fügen Sie bitte ihre(n) Partner(in) als Assignee hinzu (eventuell müssen Sie in den Einstellungen noch Zugriff erteilen).