Le Système de greffons de JabRef

Depuis la version 2.4b1, JabRef peut être étendu en utilisant un système de greffons construit en utilisant le "Java Plugin Framework" (JPF).

Pour utiliser des greffons, mettez simplement le fichier jar du greffon dans le répertoire nommé plugins dans le répertoire où se trouve JabRef.jar. Au démarrage, JabRef affichera la liste de tous les greffons chargés.

Comment écrire un greffon

JabRef offre aux développeurs les points d'extension suivants :

Ces points d'extension sont définis dans plugin.xml du JabRef-core-plugin, qui peut être trouvé dans JabRef/src/plugins/net.sf.jabref.core/.

Pour commencer un développement, suivez ces principales étapes :

  1. Extrayer le tronc de JabRef en utilisant SubVersion (https://jabref.svn.sourceforge.net/svnroot/jabref/trunk). Il contient JabRef lui-même ainsi que les greffons ajoutés jusqu'à présent à JabRef (vous n'avez pas besoin du répertoire htdocs) et qui peuvent vous servir de point de départ pour vos propres greffons.
  2. Compiler JabRef en utilisant ant jars.
  3. Créer votre propre projet et définissez votre entension dans votre propre plugin.xml qui doit satisfaire les points d'extension du "core" plugin.xml. En particulier, assurez-vous que :
  4. Créer un jar de votre projet et mettez-le dans le répertoire plugins de JabRef.
  5. Votre greffon devrait être chargé quand vous démarrez JabRef à partir du jar.

Ne vous génez pas pour nous poser des questions liées au système de greffons sur la liste de diffusion !

Comment ajouter un point d'extension à JabRef

Ce document est destiné aux développeurs de JabRef qui veulent ajouter des points d'extension supplémentaires.

Pour ajouter un nouveau point d'extension, vous devez déclarer ce point d'extension dans le plugin.xml du "core plugin" de façon similaire à ceci :

<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>

Ensuite, vous devez relancer le générateur de code de greffon "ant generate", qui recréera la classe "helper" dans "net.sf.jabref.plugin.core.generated" afin qu'il inclut une méthode getPushToApplicationExtensions() qui renvoie une liste de toutes les extensions PushToTalk référencées dans votre système.

Cette liste peut ensuite être utilisée comme ceci (un exemple de ce que nous faisons avec les extensiosn "entry fetcher") :

/*
 * 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());
}