Implémentation


Ce tutoriel est basé sur Maven et nécessite l’utilisation de l’Artifactory Arondor dans lequel sont déployées les librairies FlowerDocs. Si vous êtes externe à Arondor, veuillez contacter le support FlowerDocs pour obtenir les librairies mentionnées.

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.8.3</version>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<version>2.5.14</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 telle 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éfinie 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