Cette modification consiste à exécuter une commande Nuxeo personnalisée afin de récupérer les derniers documents modifiés.
Modifier le fichier src/main/webapp/WEB-INF/jsp/view.jsp
pour ajouter l'affichage des derniers documents modifiés, en exploitant les composants Panel
et List group
du framework Bootstrap :
<div class="panel panel-default">
<div class="panel-heading"><op:translate key="LAST_DOCUMENTS_LABEL" /></div>
<c:choose>
<c:when test="${empty lastDocuments}">
<div class="panel-body">
<span class="text-muted"><op:translate key="MESSAGE_NO_LAST_DOCUMENTS" /></span>
</div>
</c:when>
<c:otherwise>
<ul class="list-group">
<c:forEach var="lastDocument" items="${lastDocuments}">
<li class="list-group-item"><ttc:title document="${lastDocument}" icon="true" linkable="true" /></li>
</c:forEach>
</ul>
</c:otherwise>
</c:choose>
</div>
Exemple de modification du fichier Resource_fr.properties
:
LAST_DOCUMENTS_LABEL=Derniers documents modifi\u00E9s
MESSAGE_NO_LAST_DOCUMENTS=Pas de documents modifi\u00E9s.
Le service doit proposer une nouvelle méthode, afin d'exécuter une commande Nuxeo retournant les derniers documents modifiés.
La commande Nuxeo est une classe Java implémentant l'interface INuxeoCommand
, qui expose une méthode Object execute(Session)
correspondant à l'exécution de la commande, ainsi qu'une méthode String getId()
correspondant au renvoi d'un identifiant de cache (cet identifiant doit être unique pour chaque commande).
/**
* Last documents Nuxeo command.
*
* @see INuxeoCommand
*/
public class LastDocumentsCommand implements INuxeoCommand {
/** Documents CMS base path. */
private final String basePath;
/** Maximum number of documents returned by the command. */
private final int max;
/**
* Constructor.
*
* @param basePath documents CMS base path
* @param max maximum number of documents returned by the command
*/
public LastDocumentsCommand(String basePath, int max) {
super();
this.basePath = basePath;
this.max = max;
}
/**
* {@inheritDoc}
*/
@Override
public Object execute(Session nuxeoSession) throws Exception {
// Operation request
OperationRequest operationRequest = nuxeoSession.newRequest("Document.Query");
// Query
String query = "SELECT * FROM Document WHERE ecm:path STARTSWITH '" + this.basePath + "' ORDER BY dc:modified DESC";
query = NuxeoQueryFilter.addPublicationFilter(NuxeoQueryFilterContext.CONTEXT_LIVE_N_PUBLISHED, query);
operationRequest.set("query", query);
// Maximum number of documents
operationRequest.set("pageSize", this.max);
return operationRequest.execute();
}
/**
* {@inheritDoc}
*/
@Override
public String getId() {
StringBuilder builder = new StringBuilder();
builder.append(this.getClass().getSimpleName());
builder.append("/");
builder.append(this.basePath);
builder.append("/");
builder.append(this.max);
return builder.toString();
}
}
Modifier l'interface IHelloService
:
/**
* Get last documents.
*
* @param portalControllerContext portal controller context
* @return last documents
* @throws PortletException
*/
List<DocumentDTO> getLastDocuments(PortalControllerContext portalControllerContext) throws PortletException;
Modifier l'implémentation HelloServiceImpl
:
/**
* {@inheritDoc}
*/
@Override
public List<DocumentDTO> getLastDocuments(PortalControllerContext portalControllerContext) throws PortletException {
// Nuxeo controller
NuxeoController nuxeoController = new NuxeoController(portalControllerContext);
// Nuxeo command
INuxeoCommand nuxeoCommand = new LastDocumentsCommand("/", 3);
Documents nuxeoDocuments = (Documents) nuxeoController.executeNuxeoCommand(nuxeoCommand);
List<DocumentDTO> documents = new ArrayList<DocumentDTO>(nuxeoDocuments.size());
for (Document nuxeoDocument : nuxeoDocuments) {
DocumentDTO document = DocumentDAO.getInstance().toDTO(nuxeoDocument);
documents.add(document);
}
return documents;
}
Modifier la méthode de rendu void doView(RenderRequest, RenderResponse)
afin d'ajouter la liste des derniers documents modifiés à la requête :
// Last documents
try {
List<DocumentDTO> lastDocuments = this.helloService.getLastDocuments(portalControllerContext);
request.setAttribute("lastDocuments", lastDocuments);
} catch (NuxeoException e) {
PortletErrorHandler.handleGenericErrors(response, e);
}
Relancer la procédure de compilation et de déploiement pour voir le résultat sur l'interface du portail.