Le développement d'un portlet s'effectue sous la forme d'un projet Java de type « application web », contenant un ou plusieurs portlets.
Afin de faciliter l'initialisation du projet, un archétype Maven a été déployé.
La récupération de cet archétype peut être effectuée à partir de la commande :
mvn archetype:generate \
-DarchetypeGroupId=org.osivia.portal \
-DarchetypeArtifactId=archetype-portlet \
-DarchetypeVersion=1.2
Vous pouvez alors modifier ou conserver les valeurs par défaut des propriétés suivantes :
Les sources du nouveau projet sont alors créées dans le répertoire portant le nom du groupId
choisi.
La compilation du projet s'effectue en se plaçant à sa racine, à l'aide de la commande suivante :
mvn clean package
Le résultat se présente sous la forme d'une archive WAR, déposée dans le répertoire target
du projet.
Le déploiement d'une archive WAR au sein du portail s'effectue par copie de cette archive dans le répertoire /opt/portal/custom/deploy
. Les opérations de déploiement, redéploiement et suppression des archives WAR sont effectives immédiatement, sans avoir à redémarrer le portail.
/var/log/portal/server.log
(par défaut), afin de vérifier que le déploiement se soit bien déroulé.Extrait du server.log
2016-06-03 12:16:00,430 INFO [org.jboss.web.tomcat.service.TomcatDeployer] deploy, ctxPath=/hello-portlet, warUrl=.../tmp/deploy/tmp2387222316071345332hello-portlet-1.0-SNAPSHOT-exp.war/
2016-06-03 12:16:00,463 INFO [org.osivia.portal.core.deploiement.PortletApplicationDeployment] Parsing /hello-portlet/jboss-portlet.xml
Une fois déployé, un portlet peut être ajouté à des pages ou templates du portail.
Pour effectuer cette opération, il suffit de suivre la procédure suivante :
1/ se connecter au portail avec un profil administrateur (root / osivia)
2/ se placer sur la page d'accueil (par exemple)
3/ activer les fonctions d'édition à l'aide de l'option « Afficher les commandes d'édition » du menu d'édition
4/ ajouter un portlet à la région désirée à l'aide de son bouton d'ajout associé (par exemple dans la région col1
5/ choisir le portlet dans la liste.
Le portlet est ajouté à la suite des portlets déjà existants de la région. Il est alors possible de le configurer à l'aide des options génériques de sa fenêtre, ainsi qu'à partir de sa vue d'administration (items soulignés en rouge)
La modification présentée ici consiste à ajouter un lien vers un document, dont le chemin aura été défini par l'administrateur.
Modifier le fichier src/main/webapp/WEB-INF/jsp/admin.jsp
pour lui ajouter le champ du chemin vers le document :
<!-- Document path -->
<div class="form-group">
<label for="${namespace}-documentPath" class="control-label col-sm-3"><op:translate key="DOCUMENT_PATH" /></label>
<div class="col-sm-9">
<input id="${namespace}-documentPath" name="documentPath" value="${configuration.documentPath}" class="form-control">
</div>
</div>
Modifier le fichier src/main/webapp/WEB-INF/jsp/view.jsp
pour ajouter l'affichage d'un lien vers le document, à l'aide du tag <ttc:title />
:
<c:choose>
<c:when test="${empty document}">
<div class="alert alert-warning">
<span><op:translate key="MESSAGE_DOCUMENT_NOT_FOUND" /></span>
</div>
</c:when>
<c:otherwise>
<p>
<span><op:translate key="DOCUMENT_LABEL" /></span>
<span><ttc:title document="${document}" icon="true" linkable="true" /></span>
</p>
</c:otherwise>
</c:choose>
La modification des vues précédentes a introduit de nouvelles clés d'internationalisation. Ces clés doivent être ajoutées aux fichiers src/main/resources/Resource_en.properties
et src/main/resources/Resource_fr.properties
pour gérer l'internationalisation en anglais et en français.
Exemple de modification du fichier Resource_fr.properties
:
DOCUMENT_PATH=Chemin vers le document
MESSAGE_DOCUMENT_NOT_FOUND=Le document n''a pas \u00E9t\u00E9 trouv\u00E9.
DOCUMENT_LABEL=Document\u00A0:
La classe Java HelloConfiguration
doit évoluer pour correspondre au nouveau champ contenant le chemin du document.
Ajouter le nouveau champ :
/** Document path. */
private String documentPath;
ainsi que ses accesseurs :
/**
* Getter for documentPath.
*
* @return the documentPath
*/
public String getDocumentPath() {
return documentPath;
}
/**
* Setter for documentPath.
*
* @param documentPath the documentPath to set
*/
public void setDocumentPath(String documentPath) {
this.documentPath = documentPath;
}
La classe Java HelloServiceImpl
, correspondant à l'implémentation du service, doit être mise à jour afin de prendre en compte le nouveau champ contenant le chemin du document.
Ajouter une nouvelle constante pour définir la propriété de fenêtre qui stockera le chemin du document :
/** Document path window property. */
private static final String DOCUMENT_PATH_WINDOW_PROPERTY = "hello.documentPath";
Modifier la méthode HelloConfiguration getConfiguration(PortalControllerContext)
:
// Document path
String documentPath = window.getProperty(DOCUMENT_PATH_WINDOW_PROPERTY);
configuration.setDocumentPath(documentPath);
Modifier la méthode void saveConfiguration(PortalControllerContext, HelloConfiguration)
:
// Document path
String documentPath = StringUtils.trimToNull(configuration.getDocumentPath());
window.setProperty(DOCUMENT_PATH_WINDOW_PROPERTY, documentPath);
Pour accéder au document à partir de son chemin, il faut créer une nouvelle méthode dans le service.
Ajouter la méthode suivante dans l'interface Java IHelloService
:
/**
* Get document.
*
* @param portalControllerContext portal controller context
* @param path document path
* @return document
* @throws PortletException
*/
DocumentDTO getDocument(PortalControllerContext portalControllerContext, String path) throws PortletException;
Ajouter l'implémentation de cette méthode dans la classe Java HelloServiceImpl
:
/**
* {@inheritDoc}
*/
@Override
public DocumentDTO getDocument(PortalControllerContext portalControllerContext, String path) throws PortletException {
DocumentDTO document;
// Nuxeo controller
NuxeoController nuxeoController = new NuxeoController(portalControllerContext);
if (StringUtils.isNotEmpty(path)) {
try {
// Nuxeo document context
NuxeoDocumentContext documentContext = nuxeoController.getDocumentContext(path);
// Nuxeo document
Document nuxeoDocument = documentContext.getDoc();
document = DocumentDAO.getInstance().toDTO(nuxeoDocument);
} catch (NuxeoException e) {
if (NuxeoException.ERROR_NOTFOUND == e.getErrorCode()) {
document = null;
} else {
throw e;
}
}
} else {
document = null;
}
return document;
}
Le contrôleur doit être mis à jour afin de transmettre les nouveaux champs au service et de fournir le document à la vue.
Modifier la méthode de rendu void doView(RenderRequest, RenderResponse)
afin d'ajouter le document à la requête :
// Document
try {
DocumentDTO document = this.helloService.getDocument(portalControllerContext, configuration.getDocumentPath());
request.setAttribute("document", document);
} catch (NuxeoException e) {
PortletErrorHandler.handleGenericErrors(response, e);
}
Modifier la méthode de traitement des actions void processAction(ActionRequest, ActionResponse)
afin d'enregistrer le nouveau champ d'administration :
// Document path
String documentPath = request.getParameter("documentPath");
configuration.setDocumentPath(documentPath);
Relancer la procédure de compilation et de déploiement .
En retournant, dans les paramètres vous pourez saisir le chemin d'un document, par exemple /default-domain/workspaces/espace-collaboratif/actualites/6-conseils-pour-reussir-.
Vous devriez alors visualiser un lien vers le document en question