Das Plugin-System von JabRef

Ab Version 2.4 beta1 kann man JabRef mit Hilfe eines Plugin-Systems erweitern, dass mit dem Java Plugin Framework (JPF) erstellt wurde.

Um Plugins zu nutzen, müssen Sie nur die jar-Datei des Plugins in einen Ordner mit dem Namen plugins speichern, wobei der plugins-Ordner in demselben Verzeichnis liegen muss, in dem sich auch die Datei JabRef.jar befindet. Beim Start von JabRef wird eine Liste mit allen geladenen Plugins angezeigt.

Schreiben eines Plugins

JabRef bietet die folgenden Erweiterungs-Möglichkeiten für Entwickler:

Diese Erweiterungs-Möglichkeiten sind in plugin.xml des JabRef-core-plugin definiert, das in JabRef/src/plugins/net.sf.jabref.core/ zu finden ist.

Gehen Sie folgendermaßen vor, um ein Plugin zu erstellen:

  1. Machen Sie einen checkout des JabRef 'trunk' mit subversion (https://jabref.svn.sourceforge.net/svnroot/jabref/trunk) – den Ordner 'htdocs' brauchen Sie nicht. Im 'trunk' sind sowohl JabRef selbst als auch die Plugins enthalten, die bislang zu JabRef beigesteuert wurden und die einen guten Startpunkt für Ihre eigenen Plugins bieten.
  2. Kompilieren Sie JabRef mit ant jars.
  3. Erstellen Sie Ihr eigenes Projekt und definieren Sie Ihr Plugin in Ihrer eigenen plugin.xml, wobei Sie die oben beschriebenen Erweiterungs-Möglichkeiten beachten müssen. Achten Sie besonders darauf, dass
  4. Erstellen Sie eine jar-Datei Ihres Projektes und speichern es in den plugins-Ordner von JabRef.
  5. Ihr Plugin sollte nun beim Start von JabRef.jar geladen werden.

Falls Sie noch Fragen zum Plugin-System haben, zögern Sie nicht, sie auf der Mailing-Liste zu stellen.

Erstellen einer Erweiterungs-Möglichkeit

Dieser Abschnitt ist für JabRef-Entwickler gedacht, die zusätzliche Erweiterungs-Möglichkeiten bereitstellen wollen.

Um eine neue Erweiterungs-Möglichkeit hinzuzufügen, müssen Sie diese in der plugin.xml des core-plugins deklarieren. Hier ist ein Beispiel:

<extension-point id="PushToApplication">
	<parameter-def type="string" id="pushToApp"
		custom-data="<classname of the interface that plugin providers need to implement>" />
	<!-- optionally other parameters (we currently do not use any of these for anything)
		<parameter-def type="string" id="name" />
		<parameter-def type="string" id="description"
			multiplicity="none-or-one" />
			-->
</extension-point>

Anschließend müssen Sie den Plugin-Code-Generator "ant generate" aufrufen, der die Klasse "net.sf.jabref.plugin.core.generated" neu erstellt, so dass sie die Methode getPushToApplicationExtensions() enthält; sie gibt eine Liste aller PushToTalk-Erweiterungen aus, die im System registriert sind.

Diese Liste kann dann folgendermaßen genutzt werden (als Beispiel dient die EntryFetcher-Erweiterung):

/*
 * Load fetchers that are plug-in extensions
 */
JabRefPlugin jabrefPlugin = JabRefPlugin.getInstance(PluginCore.getManager());
if (jabrefPlugin != null){
	for (EntryFetcherExtension ext : jabrefPlugin.getEntryFetcherExtensions()){
		EntryFetcher fetcher = ext.getEntryFetcher();
		if (fetcher != null){
			fetchers.add(fetcher);
		}
	}
}

// and later...

for (EntryFetcher fetcher : fetchers){
  GeneralFetcher generalFetcher = new GeneralFetcher(sidePaneManager, this, fetcher);
  web.add(generalFetcher.getAction());
  fetcherActions.add(generalFetcher.getAction());
}