1 <html xmlns="http://www.w3.org/1999/xhtml">
4 <basefont size="4" color="#2F4958" face="arial" />
6 <h1>Das Plugin-System von JabRef</h1>
8 <p>Ab Version 2.4 beta1 kann man JabRef mit Hilfe eines Plugin-Systems erweitern, dass
9 mit dem Java Plugin Framework (JPF) erstellt wurde.</p>
11 <p>Um Plugins zu nutzen, müssen Sie nur die jar-Datei des Plugins in einen Ordner mit dem Namen
12 <code>plugins</code> speichern, wobei der <code>plugins</code>-Ordner in demselben Verzeichnis
13 liegen muss, in dem sich auch die Datei JabRef.jar befindet. Beim Start von JabRef wird eine
14 Liste mit allen geladenen Plugins angezeigt.</p>
16 <h2>Schreiben eines Plugins</h2>
18 <p>JabRef bietet die folgenden Erweiterungs-Möglichkeiten für Entwickler:</p>
20 <li><code>ImportFormat</code> - Importformate hinzufügen, die über den Menüpunkt <i>Datei -> Importieren in ... Datenbank</i> aufgerufen werden können.</li>
21 <li><code>EntryFetcher</code> - Zugang zu Datenbanken wie Citeseer oder Medline zum <i>Internet</i>-Menü hinzufügen.</li>
22 <li><code>ExportFormatTemplate</code> - Einen vorlagenbasierten Export wie diejenigen, die unter <i>Optionen -> Verwalte externe Exportfilter</i> verfügbar sind, hinzufügen.</li>
23 <li><code>ExportFormat</code> - Einen Exportfilter zum Exportdialog von JabRef hinzufügen – das ist komplizierter als einen vorlagenbasierten Export zu erstellen.</li>
24 <li><code>ExportFormatProvider</code> - Ein leistungsfähigerer Weg, um Exportformate hinzuzufügen.</li>
25 <li><code>LayoutFormatter</code> - Formatierer hinzufügen, die im Layout-basierten Export benutzt
26 werden können.</li>
29 <p>Diese Erweiterungs-Möglichkeiten sind in <code>plugin.xml</code> des JabRef-core-plugin definiert,
30 das in <code>JabRef/src/resources/plugins/net.sf.jabref.core/</code> zu finden ist.</p>
32 <p>Gehen Sie folgendermaßen vor, um ein Plugin zu erstellen:</p>
34 <li>Machen Sie einen checkout des JabRef 'trunk' mit subversion (<code>https://jabref.svn.sourceforge.net/svnroot/jabref/trunk</code>) – den Ordner 'htdocs' brauchen Sie nicht.
35 Im 'trunk' sind sowohl JabRef selbst als auch die Plugins enthalten, die bislang zu JabRef
36 beigesteuert wurden und die einen guten Startpunkt für Ihre eigenen Plugins bieten.</li>
37 <li>Kompilieren Sie JabRef mit <code>ant jars</code>.</li>
38 <li>Erstellen Sie Ihr eigenes Projekt und definieren Sie Ihr Plugin in Ihrer eigenen plugin.xml,
39 wobei Sie die oben beschriebenen Erweiterungs-Möglichkeiten beachten müssen.
40 Achten Sie besonders darauf, dass
42 <li>...Ihre plugin.xml einen <code>requires</code>-Bereich enthält, der das <i>core plugin</i> (<code>net.sf.jabref.core</code>) importiert.</li>
43 <li>...Ihre plugin.xml einen <code>runtime</code>-Bereich enthält, in dem Sie JPF mitteilen,
44 wo in Ihrem Projekt die class-Dateien und Ressourcen gespeichert werden.</li>
47 <li>Erstellen Sie eine jar-Datei Ihres Projektes und speichern es in den <code>plugins</code>-Ordner
49 <li>Ihr Plugin sollte nun beim Start von JabRef.jar geladen werden.</li>
52 <p>Falls Sie noch Fragen zum Plugin-System haben, zögern Sie nicht, sie auf der Mailing-Liste zu stellen.</p>
54 <h2>Erstellen einer Erweiterungs-Möglichkeit</h2>
56 <p>Dieser Abschnitt ist für JabRef-Entwickler gedacht, die zusätzliche Erweiterungs-Möglichkeiten
57 bereitstellen wollen.</p>
59 <p>Um eine neue Erweiterungs-Möglichkeit hinzuzufügen, müssen Sie diese in der plugin.xml des core-plugins
60 deklarieren. Hier ist ein Beispiel:</p>
63 <extension-point id="PushToApplication">
64 <parameter-def type="string" id="pushToApp"
65 custom-data="<classname of the interface that plugin providers need to implement>" />
66 <!-- optionally other parameters (we currently do not use any of these for anything)
67 <parameter-def type="string" id="name" />
68 <parameter-def type="string" id="description"
69 multiplicity="none-or-one" />
71 </extension-point>
74 <p>Anschließend müssen Sie den Plugin-Code-Generator "<code>ant generate</code>" aufrufen,
75 der die Klasse "<code>net.sf.jabref.plugin.core.generated</code>" neu erstellt, so dass sie
76 die Methode <code>getPushToApplicationExtensions()</code> enthält; sie gibt eine Liste aller
77 PushToTalk-Erweiterungen aus, die im System registriert sind.</p>
79 <p>Diese Liste kann dann folgendermaßen genutzt werden (als Beispiel dient die EntryFetcher-Erweiterung):</p>
83 * Load fetchers that are plug-in extensions
85 JabRefPlugin jabrefPlugin = JabRefPlugin.getInstance(PluginCore.getManager());
86 if (jabrefPlugin != null){
87 for (EntryFetcherExtension ext : jabrefPlugin.getEntryFetcherExtensions()){
88 EntryFetcher fetcher = ext.getEntryFetcher();
90 fetchers.add(fetcher);
97 for (EntryFetcher fetcher : fetchers){
98 GeneralFetcher generalFetcher = new GeneralFetcher(sidePaneManager, this, fetcher);
99 web.add(generalFetcher.getAction());
100 fetcherActions.add(generalFetcher.getAction());