4 nov. 2021 15:47:20 Thomas Dumont avatar

Les plugins de Lutece

Introduction

Les plugins sont des composants que l'on peut ajouter à Lutèce pour étendre ses fonctionnalités. Ils ont pour vocation d'intégrer différents types de fonctionnalités en respectant le même mode d'installation. La démarche commune d'installation d'un plugin est la suivante :

  • Arrêter la Webapp
  • Dézipper la distribution binaire du plugin dans le répertoire de la webapp
  • facultatif Exécuter les scripts de création et/ou d'initialisation des tables associées au plugin (Cf. ci-dessous pour localiser ces scripts dans les différentes distributions)
  • facultatif Configurer le fichier properties du plugin
  • facultatif Configurer le fichier db.properties de Lutece pour ajouter un nouveau pool de connexions spécifique au plugin
  • Relancer la Webapp
  • Se connecter en Admin et se rendre dans la fonction Gestion des plugins
  • Le nouveau plugin doit apparaitre non installé dans la liste des plugins. Cliquer sur Installer.
  • facultatif Sélectionner le pool de connexions éventuellement utilisé par le plugin.

Les extensions apportés par les plugins

Plusieurs types d'extensions sont prévues :

Un plugin peut contenir un ou plusieurs de ces types d'extensions. Par exemple, il peut introduire un nouveau type de portlet et deux fonctions d'administration pour gérer ce type de portlet.

Les plugins et les bases de données

Un plugin peut accéder à deux bases de données. Il peut accéder à la base Lutece par le biais de la classe AppConnectionService, mais il est également possible de lui affecter un pool de connexions spécifique, préalablement déclaré dans le fichier db.properties, au moment de son installation.

Chargement des plugins

Les plugins sont chargés au démarrage de la webapp par le service PluginService qui recherche tous les fichiers XML se trouvant dans le répertoire /WEB-INF/plugins. Pour ne pas charger un plugin, il suffit de retirer le fichier XML de ce répertoire.

Les informations sur le statut local des plugins (état installé/non-installé, pool de connection spécifique, ...) sont enregistrées dans le fichier plugins.dat situé dans le même répertoire.

Si un plugin dispose d'un fichier properties, celui doit se trouver dans le répertoire /WEB-INF/conf/plugins . Les propriétés de ce plugins seront automatiquement chargées et ajoutées à l'ensemble des propriétés de l'application. Elles seront alors accessibles par le biais de la classe AppPropertiesService .
Toutes les propriétés d'un plugin doivent être préfixées par le nom du plugin pour éviter notamment tout conflit.

Les fichiers des plugins

Un plugin peut nécessiter un ensemble assez important et divers de fichiers. Voici les répertoires désignés pour contenir ces fichiers :

Type de fichierRépertoire
Les JSP des fonctions d'administration/jsp/admin/plugins/<plugin_name>/*.jsp
Les JSP accessibles du portail/jsp/site/plugins/<plugin_name>/*.jsp
Les images des fonctions d'administration/images/admin/skin/plugins/<plugin_name>
Les images de présentation de l'application/images/local/skin/<plugin_name>/*.*
Les images gérées comme des données du plugin/images/local/data/<plugin_name>/*.*
Le fichier properties du plugin/WEB-INF/conf/plugins/<plugin_name>.properties
Le fichier de définition du plugin/WEB-INF/plugins/<plugin_name>.xml
Les templates des fonctions d'administration/WEB-INF/templates/admin/plugins/<plugin_name>.properties
Les templates de l'application accessibles du portail/WEB-INF/templates/skin/plugins/<plugin_name>.properties
Le fichier jar contenant les classes du plugin/WEB-INF/lib/plugin_<plugin_name>_<version>.jar
Les scripts SQL d'installation et d'initialisation des tables du plugin (distribution binaires)/WEB-INF/sql/plugins/<plugin_name>/*.sql

L'organisation des fichiers sources est par ailleurs la suivante :

Type de fichierRépertoire
Les fichiers sources java de la couche métier/src/java/fr/lutece/plugins/<plugin_name>/business/*.java
Les fichiers sources java de la couche service/src/java/fr/lutece/plugins/<plugin_name>/service/*.java
Les fichiers sources java de la couche présentation/src/java/fr/lutece/plugins/<plugin_name>/web/*.java
Les ressources de type messages dans les différentes langues/src/java/fr/lutece/plugins/<plugin_name>/resources/*.properties
Les scripts SQL d'installation et d'initialisation des tables du plugin (distribution sources)/src/sql/plugins/<plugin_name>/*.sql
Les documentations au format XML pour Maven/src/site/xdoc/[fr/]/xdoc/plugins/<plugin_name>/*.xml

Le fichier de configuration du plugin

Le fichier de configuration d'un plugin est un fichier XML se présentant sous la forme suivante :

<?xml version=1.0 encoding=ISO-8859-1?>
<plug-in>
    <name>myplugin</name>
    <class>fr.paris.lutece.portal.service.PluginDefaultImplementation</class>
    <version>1.0</version>
    <description>Description of the plugin</description>
    <provider>Mairie de Paris</provider>
    <provider-url>http://lutece.paris.fr</provider-url>
    <icon-url>../../images/admin/skin/plugins/myplugin/myplugin.gif</icon-url>
    <copyright>Copyright (c) 2001-2008 Mairie de Paris</copyright>

    <db-pool-required>1</db-pool-required>

    <!-- CSS Stylesheets -->
    <css-stylesheets>
        <css-stylesheet>myplugin/myplugin.css</css-stylesheet>
        ...
    </css-stylesheets>

    <!-- JavaScript Files -->
    <javascript-files>
        <javascript-file>myplugin/myplugin.css</javascript-file>
        ...
    </javascript-files>

    <!-- Administration Features-->
    <admin-features>
        <admin-feature>
            <feature-id>MYFEATURE_MANAGEMENT</feature-id>
            <feature-title>My Feature</feature-title>
            <feature-description>Description of my feature</feature-description>
            <feature-level>3</feature-level>
            <feature-url>plugins/myplugin/ManageMyFeature.jsp</feature-url>
        </admin-feature>
        ...
    </admin-features>

    <!-- Portlets-->
    <portlets>
        <portlet>
            <portlet-class>fr.paris.lutece.plugins.myportlet.business.portlet.MyPortletHome</portlet-class>
            <portlet-type-name>MyNew Portlet</portlet-type-name>
            <portlet-creation-url>plugins/article/CreatePortletMyPortlet.jsp</portlet-creation-url>
            <portlet-update-url>plugins/article/ModifyPortletMyPortlet.jsp</portlet-update-url>
        </portlet>
        ...
    </portlets>

    <!-- Applications -->
    <applications>
        <application>
            <application-id>app_page_name</application-id>
            <application-class>fr.paris.lutece.plugins.myplugin.web.MyPluginApp</application-class>
            <application-roles>role1,role2</application-roles>
        </application>
        ...
    </applications>

    <!-- Content Services -->
    <content-services>
        <content-service-class>fr.paris.lutece.plugins.myplugin.service.MyContentService</content-service-class>
        ...
    </content-service>

    <!-- Insert Services -->
    <insert-services>
        <insert-service>
            <insert-service-id>my_insert_service</insert-service-id>
            <insert-service-name>myplugin.insertService.name</insert-service-name>
            <insert-service-label>myplugin.insertService.label</insert-service-label>
            <insert-service-bean-class>fr.paris.lutece.plugins.myplugin.web.MyInsertServiceJspBean</insert-service-bean-class>
        </insert-service>
        ...
    </insert-services>

    <!-- Servlets-->
    <servlets>
        <servlet>
            <servlet-name>myServlet</servlet-name>
            <url-pattern>/servlet/plugins/myplugin/myServlet</url-pattern>
            <servlet-class>fr.paris.lutece.plugins.myplugin.web.MyServlet</servlet-class>
        </servlet>
        ...
    </servlets>

    <!-- Filters -->
    <filters>
        <filter>
            <filter-name>myFilter</filter-name>
            <url-pattern>/*</url-pattern>
            <filter-class>fr.paris.lutece.plugins.myplugin.web.MyFilter</filter-class>
            <init-param>
                <param-name>param1</param-name>
                <param-value>value of param1</param-value>
            </init-param>
        </filter>
        ...
    </filters>

</plug-in>

Une DTD des plugins est disponible dans le répertoire /WEB-INF/plugins de la Webapp de Lutece.

Modules

Certains plugins peuvent avoir leurs propres plugins. Ceux-ci sont appelés modules. Les plugins tels que mylutece, formengine, codewizard disposent de modules.

Les règles concernant les modules sont les suivantes :

Type de fichierRépertoire
Packages des fichiers sources java/src/java/fr/lutece/plugins/<plugin_name>/modules/<module_name>/**/*.java
Localisation des fichiers templates HTML/plugins/<plugin_name>/modules/<module_name>/**/*.html
Nom et emplacement du fichier XML du plugin/WEB-INF/plugins/<plugin_name>-<module_name>.xml
Nom et emplacement du fichier de configuration/WEB-INF/conf/plugins/<plugin_name>-<module_name>.properties