# 1.2. Composant Access

## 1.2.1. Utilisation

### 1.2.1.1. Configuration

Le module d’access est configuré par un POM qui contient les informations nécessaires (nom du projet, numéro de version, identifiant du module parent, les sous modules (common, api, core, rest, client) de sous module d’access, etc..). Ces informations sont contenues dans le fichier pom.xml présent dans le répertoire de base du module Access.

    <parent>
        <groupId>fr.gouv.vitam</groupId>
        <artifactId>parent</artifactId>
        <version>${vitam.version}</version>
    </parent>

    <artifactId>access</artifactId>
    <packaging>pom</packaging>

    <modules>
         <module>access-internal</module>
         <module>access-external</module>
    </modules>

### 1.2.1.2. La factory

Afin de récupérer le client une factory a été mise en place.

    // Récupération du client
    final AccessClient client = AccessClientFactory.getInstance().getAccessOperationClient();

## 1.2.2. Le Mock

Par défaut, le client est en mode Mock. Il est possible de récupérer directement le mock.
  Si les paramètres de productions sont introuvables, le client passe en mode Mock par défaut. Il est possible de récupérer directement le mock :

         // Changer la configuration du Factory client
         AccessClientFactory.setConfiguration(AccessClientType.MOCK);

         // Récupération explicite du client mock
         final AccessClient client = AccessClientFactory.getInstance().getAccessOperationClient();

    - Pour instancier son client en mode Production :

    // Changer la configuration du Factory
     AccessClientFactory.setConfiguration(AccessClientType.PRODUCTION);
    // Récupération explicite du client
    AccessClient client = AccessClientFactory.getInstance().getAccessOperationClient();

### 1.2.2.1. L’application rest

La méthode run avec l’argument de port permet aux tests unitaires de démarrer sur un port spécifique. Le premier argument contient le nom du fichier de configuration access.conf (il est templatiser avec ansible)

### 1.2.2.2. Le client

> Le client propose actuellement plusieurs méthodes permettant de gérer la lecture et la modification des collections Units, LogbookOperation, ObjectGroup, Lifecycle (Unit et OG) et de gérer l’export DIP.

> Le client récupère une réponse au format Json ou au format InputStream.

Le client AdminExternalClient implémente aussi l’interface OperationStatusClient ayant la méthode suivante:

    RequestResponse<ItemStatus> getOperationProcessStatus(VitamContext vitamContext, String id) throws VitamClientException;

Cette interface est passée comme paramètre au client VitamPoolingClient.

## 1.2.3. Exemple d’usage générique

    // Récupération du client dans le module ihm-demo
     AccessClient client = AccessClientFactory.getInstance().getAccessOperationClient();

    // Récupération du dsl ( cf ihm-demo documentation)

    // Recherche des Archives Units
    JsonNode selectUnits(String dsl)

    // Recherche des Units par Identification
     JsonNode selectUnitbyId(String sqlQuery, String id)

     //Recherche d'object par ID + un DSL selectObjectQuery
     JsonNode jsonObject = client.selectObjectbyId(String selectObjectQuery, String id);

     //Récupération d'un objet au format input stream
     InputStream stream = client.getObjectAsInputStream(String selectObjectQuery, String objectGroupId, String usage, int version);

## 1.2.4. Exemple d’usage générique

     // Récupération du client
    private static final AccessClient ACCESS_CLIENT = AccessClientFactory.getInstance().getAccessOperationClient();

      ...

     // Autres Opérations

     public static JsonNode searchUnits(String parameters)
             throws AccessClientServerException, AccessClientNotFoundException, InvalidParseOperationException {
         return ACCESS_CLIENT.selectUnits(parameters);
     }