Operation Hook

Prendre en main la notion d’Operation et d’OperationHook avec le Starter Spring Boot.


    Ce tutoriel est basé sur Maven et nécessite l’utilisation de l’Artifactory Arondor dans lequel sont déployées les librairies FlowerDocs.

    Quand vous aurez terminé ce module de formation, vous serez capable de développer un OperationHook sécurisé permettant de réagir à la création de documents et de les renommer automatiquement.

    Création du projet

    A l’aide de votre IDE préféré, commencez par créer un nouveau projet Maven avec le POM suivant :

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    
        <groupId>com.flower.docs.samples</groupId>
        <artifactId>modify-operation-hook</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    
    	<dependencies>
    		<dependency>
    			<groupId>com.flower.docs</groupId>
    			<artifactId>flower-docs-starter-client</artifactId>
    			<version>2.5.0</version>
    		</dependency>
    	</dependencies>
    
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    				<version>2.3.0.RELEASE</version>
    				<executions>
    					<execution>
    						<goals>
    							<goal>repackage</goal>
    							<goal>build-info</goal>
    						</goals>
    					</execution>
    				</executions>
    				<configuration>
    					<executable>true</executable>
    				</configuration>
    			</plugin>
    		</plugins>
    	</build>
    </project>

    Application Spring Boot

    Cette application Spring Boot s’appuie sur le starter Spring Boot fourni par FlowerDocs.

    • Pour commencer, nous avons besoin d’une main class Spring Boot annotée avec l’annotation @SpringBootApplication :
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    
    package com.flower.samples;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    import com.flower.docs.FlowerDocsClient;
    import com.flower.docs.SecurityMode;
    
    @SpringBootApplication
    @FlowerDocsClient(security = SecurityMode.USER)
    public class ModifyHookApplication
    {
        public static void main(String[] args)
        {
            SpringApplication.run(ModifyHookApplication.class, args);
        }
    }
    • Ajoutez ensuite le fichier application.properties dans le répertoire src/main/resources de votre projet pour configurer l’application :

      1
      2
      3
      4
      5
      6
      7
      8
      
      spring.application.name=modify-hook
      server.port=7777
      server.servlet.context-path=/modify
      
      ws.url=http://localhost:8081/core/services
      
      internal.realm.users[0].id=<user>
      internal.realm.users[0].password=<password>

      1 Nom de l’application Spring Boot

      2 Port utilisé pour exposer l’application WEB

      3 Chemin de l’application. L’application est ainsi accessible via l’URL de base http://localhost:7777/modify

      5 URL d’accès aux web services exposés par FlowerDocs Core.

      7 Identifiant de l’utilisateur permettant d’accéder à l’OperationHook

      8 Mot de passe de l’utilisateur permettant d’accéder à l’OperationHook

    Développement du hook

    Passons maintenant à l’OperationHook ! Pour implémenter votre premier hook, créez la classe ModifyOperationHook tel que :

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    package com.flower.samples;
    
    import org.springframework.web.bind.annotation.RestController;
    import org.terracotta.statistics.Time;
    
    import com.flower.docs.domain.component.Component;
    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 ModifyOperationHook extends OperationHook
    {
        @Override
        public void process(OperationContext context) throws TechnicalException, FunctionalException
        {
            if (context instanceof DefaultComponentOperationContext)
            {
                DefaultComponentOperationContext componentContext = (DefaultComponentOperationContext) context;
                for (Component component : componentContext.getComponents())
                {
                    component.setName(component.getName() + "_" + Time.absoluteTime());
                }
            }
        }
    }

    13 L’annotation @RestController défini le hook comme étant un web service REST exposé sur /

    14 La classe ModifyOperationHook étend la classe OperationHook qui permet de faciliter l’implémentation d’un hook à l’aide du framework Spring Boot

    17 La méthode process doit être implémentée afin de définir le comportement suite à l’exécution d’une opération au sein de FlowerDocs Core

    17 L’OperationHook réagit seulement aux contextes de classe DefaultComponentOperationContext

    24 Chaque composant du contexte d’opération est renommé à l’aide de la date courrante

    Abonnement

    Afin que l’OperationHook implémenté soit notifié à chaque création de document, il est nécessaire de définir un abonnement :

    • Allez dans la section Administration > Configuration > Operation registrations
    • Cliquez sur le bouton + pour créer un nouvel abonnement


    Dans le formulaire de création de l’abonnement, remplissez les champs suivants :

    • OperationHandler : renseignez l’URL HTTP du hook (par exemple : http://localhost:7777/modify).
    • Phase d'execution : sélectionnez la phase Avant pour que la modification du nom soit appliquée avant que le document soit persisté
    • Action : pour réagir à une création, sélectionnez l’action Créer
    • Type d'objet : choisissez le type Document
    • Activé : cochez la checkbox pour activer votre abonnement
    • Autorisation : renseignez la chaîne d’autorisation BASIC à l’aide de Blitter à partir de l’utilisateur défini dans le fichier application.properties (exemple : Basic dG90bzoxMjM0)
    • Fichier(s) sélectionné(s) : sélectionnez à partir de votre poste un fichier quelconque (dans le cas d’un OperationHook, il n’est pas utilisé)


    Pour finir, validez la création de l’abonnement.

    Validation

    Afin de tester que l’OperationHook implémenté est bien opérationnel :

    • créez un document par le moyen de votre choix (par exemple via la console d’administration)
    • ouvrez le document créé

    Si l’OperationHook a bien été configuré, le timestamp de la création a été ajouté au nom du doucment créé.


    Si le nom n’a pas été modifié, vérifiez que l’OperationHook est bien démarré et accessible depuis FlowerDocs Core. Si c’est bien le cas, consultez les logs pour plus de détails.