14/04/2017
Introduction
Cet articule décrit le développement d’un OperationHook
. Il s’agit d’un OperationHandler
, une classe Java permettant de réagir à l’exécution d’une opération au sein de FlowerDocs, pouvant être exécuté à travers une API REST :
/{scope}/documents
/{scope}/tasks
/{scope}/folders
/{scope}/virtual_folders
Un OperationContext
est fourni au hook pour fournir le contexte d’exécution de l’opération.
Prérequis :
- Maven
- Utilisation d’un Artifactory Arondor (public ou interne)
- Basé sur l’article Développer un micro service qui interagit avec FlowerDocs
A l’action !
Dans cette partie, nous allons mettre en place un com.flower.docs.operation.api.OperationHook
permettant de logger des composants qui ont été créés ou mis à jour.
A chaque fois que notre OperationHook
sera notifié, un contexte, correspondant à l’opération exécutée auprès de FlowerDocs, sera fourni en entrée de la méthode process(OperationContext context)
Créez la classe suivante :
package com.flower.samples; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RestController; import com.flower.docs.domain.exception.FunctionalException; import com.flower.docs.domain.exception.TechnicalException; import com.flower.docs.operation.api.DefaultComponentOperationContext; import com.flower.docs.operation.api.OperationContext; import com.flower.docs.operation.api.OperationHook; @RestController public class SampleOperationHook extends OperationHook { private static final Logger LOGGER = LoggerFactory.getLogger(SampleOperationHook.class); @Override public void process(OperationContext context) throws TechnicalException, FunctionalException { LOGGER.info("Processing context={}", context); if (context instanceof DefaultComponentOperationContext) { DefaultComponentOperationContext componentContext = (DefaultComponentOperationContext) context; LOGGER.info("Processing components={}", componentContext.getComponents()); } } }
Suivez la procédure de
Compilation & Lancement
de cet article
Note :
- Notre hook
SampleOperationHook
est annoté avec l’annotation@RestController
afin d’indiquer à Sring qu’il s’agit d’un service REST. - Pour chaque notification d’une opération, un object portant le contexte d’exécution est fourni par FlowerDocs :
OperationContext
. En fonction de l’opération, différentes sous classes peuvent être fournies:com.flower.docs.operation.api.OperationContext
com.flower.docs.operation.api.DefaultComponentOperationContext
com.flower.docs.operation.api.TaskOperationContext
com.flower.docs.operation.api.SearchOperationContext
Test du hook
Simulation
Pour tester notre hook, nous allons simuler la notification d’une opération : la création d’un document.
Commençons par envoyer en
POST
le contenu JSON suivant :{ "type":"com.flower.docs.operation.api.DefaultComponentOperationContext", "id":{ "value":"158ec44f-026d-42ba-b943-52bfe618caec" }, "operation":{ "action":"CREATE", "objectType":"DOCUMENT" }, "executionPhase":"AFTER", "user":{ "value":"fadmin" }, "time":1493035556793, "components":[ "java.util.ArrayList", [ [ "com.flower.docs.domain.document.Document", { "id":{ "value":"95b7059c-08a6-49b8-9fcb-d8db29f1b7f3" }, "data":{ "owner":"fadmin", "creationDate":1493035556505, "lastUpdateDate":1493035556505, "acl":{ "value":"4a3682a6-48f7-40e7-8990-54634e0aa42e" }, "classId":{ "value":"Claim" }, "status":"NEW" }, "tags":{ "tags":[ "java.util.ArrayList", [ { "value":[ "java.util.ArrayList", [ "dfsdf" ] ], "name":"Comments", "readOnly":false } ] ] }, "category":"DOCUMENT", "name":"-.txt", "files":[ "java.util.ArrayList", [ { "id":{ "value":"6445f4b5-ac42-456f-8ef5-ad2e8ccbc3cc" }, "name":"-.txt", "formatCode":"text/plain", "creationDate":1493035556641, "size":16967 } ] ] } ] ] ] }
Pour valider la bonne réception de la notification de l’opération de création, consultez les logs ou la console et vérifiez que la ligne suivante s’y trouve :
com.flower.samples.SampleOperationHook - Processing components=[Document{id=Id{value=95b7059c-08a6-49b8-9fcb-d8db29f1b7f3}, data=ComponentData{owner=fadmin, creationDate=Mon Apr 24 14:05:56 CEST 2017, lastUpdateDate=Mon Apr 24 14:05:56 CEST 2017, retentionStartDate=null, retentionEndDate=null, validityCode=null, acl=Id{value=4a3682a6-48f7-40e7-8990-54634e0aa42e}, classId=Id{value=Claim}, status=NEW}, tags=Tags{tags=[Tag{value=[dfsdf], name=Comments, readOnly=false}]}, category=DOCUMENT, name=-.txt, version=null, mimeType=null, parentId=null, files=[com.flower.docs.domain.file.DocumentFile@7cc06d4b]}]
Abonnement
Pour vous abonner à une opération, consulter l’article sur les abonnements à des opérations