# 3.10. Common format identification

## 3.10.1. But de cette documentation

Cette documentation indique comment utiliser le code commun du format identifier pour éventuellement ajouter un client pour un nouvel outil.

## 3.10.2. Outil Format Identifier

L’interface du format identifier est fr.gouv.vitam.common.format.identification.FormatIdentifier. Elle met à disposition 2 méthodes :

> - status() qui renvoie le statut du format identifer
> - analysePath(Path) qui renvoie une liste de formats potentiellement identifiés par l’outil.

> Une implémentation Mock est présente : fr.gouv.vitam.common.format.identification.FormatIdentifierMock

> Chaque nouvel outil doit implémenter l’interface :

    public class FormatIdentifierSiegfried implements FormatIdentifier {
      @Override
      public FormatIdentifierInfo status() { //CALL THE TOOL AND GET THE STATUS }

      @Override
      public List<FormatIdentifierResponse> analysePath(Path path) { //CALL THE TOOL AND ANALYSE}
    }

De plus, pour pouvoir être utilisé, l’outil doit être ajouté dans l’enum FormatIdentifierType :

    public enum FormatIdentifierType {
       MOCK,
       SIEGFRIED
    }

Une factory a été mise en place pour récupérer l’instance du client adaptée. En cas de nouvel outil, il faut la mettre à jour :

    public class FormatIdentifierFactory {
      ......
      private FormatIdentifier instanciate(String formatIdentifierId){
        ...
        switch (infos.getType()) {
          case MOCK:
            return new FormatIdentifierMock();
          case SIEGFRIED:
            return new FormatIdentifierSiegfried(infos.getConfigurationProperties());
          .....
        }
      }
    }

## 3.10.3. Configuration

Dans /vitam/conf du serveur applicatif où sont déployés les services d’identification de formats, il faut un fichier format-identifiers.conf. C’est un fichier YAML de configuration des services d’identification de format. Il possède les configurations des services que l’on souhaite déployer sur le serveur.

Le code suivant contient un exemple de toutes les configurations possibles :

    siegfried-local:
      type: SIEGFRIED
      client: http
      host: localhost
      port: 55800
      rootPath: /root/path
      versionPath: /root/path/version/folder
      createVersionPath: false
    mock:
      type: MOCK

Pour plus d’informations sur le sujet, voir la documentation sur l’exploitation.