Exemple : accès aux derniers documents modifiés

Cette modification consiste à exécuter une commande Nuxeo personnalisée afin de récupérer les derniers documents modifiés.

Modification des vues

Vue utilisateur

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>
Ressources d'internationalisation

Exemple de modification du fichier Resource_fr.properties :

LAST_DOCUMENTS_LABEL=Derniers documents modifi\u00E9s
MESSAGE_NO_LAST_DOCUMENTS=Pas de documents modifi\u00E9s.

Modification du service

Le service doit proposer une nouvelle méthode, afin d'exécuter une commande Nuxeo retournant les derniers documents modifiés.

Création de la commande Nuxeo

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

}
Exécution de la commande Nuxeo

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

Modification du contrôleur

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);
}

Test de la modification

Relancer la procédure de compilation et de déploiement pour voir le résultat sur l'interface du portail.