Un portlet CMS permet d'effectuer en plus des fonctionnalités classiques d'un portlet des opérations CMS, telles la consultation, la recherche ou la modification de documents Nuxeo.
Le développement d'un portlet CMS requiert :
Comme tout portlet, le projet du portlet CMS doit dépendre de l'API du portail OSIVIA, ainsi que des librairies portlet et servlet. Un projet de dépendance a été créé pour permettre de dépendre directement de toutes ces API :
<dependency>
<groupId>org.osivia.portal</groupId>
<artifactId>osivia-portal-dependencies</artifactId>
<version>${osivia-portal.version}</version>
<scope>provided</scope>
</dependency>
A noter que ce projet fourni également les dépendances vers diverses librairies utilitaires déjà présentes sur le portail, telles les librairies "commons" d'Apache.
Le projet doit dépendre de l'API CMS de Toutatice :
<dependency>
<groupId>toutatice-portail.cms</groupId>
<artifactId>toutatice-portail-cms-nuxeo-api</artifactId>
<version>${toutatice-cms.version}</version>
<scope>provided</scope>
</dependency>
Enfin, pour pouvoir communiquer avec le client "automation" de Nuxeo, le projet doit également dépendre de sa librairie :
<dependency>
<groupId>org.nuxeo.ecm.automation</groupId>
<artifactId>nuxeo-automation-client</artifactId>
<version>${nuxeo-automation-client.version}</version>
<scope>provided</scope>
</dependency>
Cette liste de dépendances peut être complétée par l'ajout de projets transverses, en fonction des besoins du développeur.
Contrairement à un portlet classique, la classe d'implémentation d'un portlet CMS doit étendre la classe fr.toutatice.portail.cms.nuxeo.api.CMSPortlet.
Ce contrôleur est le point d'entrée à de nombreuses opérations concernant Nuxeo, comme par exemple le chargement d'un documenent ou l'exécution de commandes.
Au final, un portlet CMS minimaliste a le squelette suivant :
public class MyCMSPortlet extends CMSPortlet {
protected void doView(RenderRequest request, RenderResponse response) throws PortletException {
try {
NuxeoController ctx = new NuxeoController(request, response, getPortletContext());
...
} catch (NuxeoException e) {
PortletErrorHandler.handleGenericErrors(response, e);
}
}