Développer un OperationHandler

04/04/2017

Enrichissement d’une requête de recherche avant son exécution

Dans cette partie, nous allons mettre en place un OperationHandler permettant d’afficher le nom du processus lors d’une recherche de tâche.

Pour commencer, il faut créer la classe correspondant à l’OperationHandler implémentant l’interface OperationHandler de l’API FlowerDocs. La méthode process(OperationContext context) correspond au code exécuté avant ou après l’opération.

package com.flower.docs.core.tsp;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import com.flower.docs.domain.FlowerFields;
import com.flower.docs.domain.search.SearchRequest;
import com.flower.docs.domain.search.SelectClause;
import com.flower.docs.operation.api.OperationContext;
import com.flower.docs.operation.api.OperationHandler;
import com.flower.docs.operation.api.SearchOperationContext;

@Component
public class OperationHandlerSample implements OperationHandler
{
    private static final Logger LOGGER = LoggerFactory.getLogger(OperationHandlerSample.class);

    public void process(OperationContext context)
    {
        LOGGER.info("Processing context: {}", context);
        if (context instanceof SearchOperationContext)
        {
            SearchOperationContext searchContext = (SearchOperationContext) context;
            SearchRequest searchRequest = searchContext.getRequest();
            if (searchRequest.getSelectClause() == null)
            {
                searchRequest.setSelectClause(new SelectClause());
            }
            searchRequest.getSelectClause().getFields().add(FlowerFields.WORKFLOW_ID.value());
        }
    }
}

Le code ci-dessus permet d’ajouter à la requête de recherche le champ workflow dans la liste des champs à remonter. Une fois cette classe compilée, elle doit être ajoutée dans le classpath Spring afin que celui-ci puisse découvrir l’OperationHandler au lancement de FlowerDocs.