# 10.3. Métadata

## 10.3.1. Utilisation

### 10.3.1.1. Paramètres

### 10.3.1.2. Le client

Le client propose actuellement différentes méthodes : insert et selection des units, select des objectGroups.

Il faut ajouter la dependance au niveau de pom.xml

    <dependency>
        <groupId>fr.gouv.vitam</groupId>
        <artifactId>metadata-client</artifactId>
        <version>${project.version}</version>
    </dependency>

#### 10.3.1.2.1. Créer le client metadata

En deux étapes :

- chargement de la configuration en utilisant une des méthodes suivantes :
    - MetaDataClientFactory.changeMode(new ClientConfigurationImpl(server, port));
    - MetaDataClientFactory.changeMode(ConfigurationFilePath);)``
- création du client
    final MetaDataClient metadataClient = MetaDataClientFactory.getInstance().getClient();

#### 10.3.1.2.2. Accéder aux fonctionnalités

> le client métadata fournit les foncitonnalités suivantes : insérer un ArchiveUnit, insérer un ObjectGroup et sélectionner un métadata (archiveUnit). Le détail de l’utilisation de chaque fonctionnalité est ci-dessous.

##### 10.3.1.2.2.1. Insérer des ArchiveUnits

    try {
            JsonNode result= metadataClient.insertUnit(JsonNode insertQuery)
    } catch (InvalidParseOperationException e) {
                    LOG.error("parsing error", e);
                    throw e;
            } catch (MetaDataExecutionException e) {
                    LOG.error("execution error", e);
                    throw e;
            } catch (MetaDataDocumentSizeException e) {
                    LOG.error("document size input error", e);
                    throw e;
            } catch (MetaDataAlreadyExistException e) {
                    LOG.error("data already exists error", e);
                    throw e;
            } catch (MetaDataNotFoundException e) {
                    LOG.error("not found parent/path error", e);
                    throw e;
            }
    }

Paramètre d’entrée est une requête DSL de type JsonNode, indiquant la requête sur la collection Unit.

Un exemple de la requête paramètrée est le suivant :

    {
            "$root" : [],
            "$queries": [{ "$path": "aaaaa" }],
            "$filter": { },
            "$data": { "_id": "value" }
    }

Cette fonction retourne une réponse de type JsonNode contenant les informations : code de retour en cas d’erreur, la requête effectuée sur la collection …

##### 10.3.1.2.2.2. Insérer des ObjectGroups

>     try {
>                     JsonNode result= metadataClient.insertObjectGroup(JsonNode insertQuery)
>             } catch (InvalidParseOperationException e) {
>                             LOG.error("parsing error", e);
>                             throw e;
>                     } catch (MetaDataExecutionException e) {
>                             LOG.error("execution error", e);
>                             throw e;
>                     } catch (MetaDataDocumentSizeException e) {
>                             LOG.error("document size input error", e);
>                             throw e;
>                     } catch (MetaDataAlreadyExistException e) {
>                             LOG.error("data already exists error", e);
>                             throw e;
>                     } catch (MetaDataNotFoundException e) {
>                             LOG.error("not found parent/path error", e);
>                             throw e;
>                     }

Paramètre d’entrée est une requête DSL de type JsonNode, indiquant la requête sur la collection ObjectGroup.

Un exemple de la requête paramètrée est le suivant :

    {
        "$root" : [],
        "$queries": [{ "$exists": "value" }],
        "$filter": { },
        "$data": { "_id": "objectgroupValue" }
    }

Cette fonction retourne une réponse de type JsonNode contenant les informations : code de retour en cas d’erreur, la requête effectuée sur la collection …

### 10.3.1.3. Sélection des ArchiveUnits

    try {
        // return JsonNode
        jsonNode = metaDataClient.selectUnits(
            accessModuleBean != null ? accessModuleBean.getRequestDsl() : "");
        } catch (InvalidParseOperationException e) {
        LOG.error("parsing error", e);
        throw e;
        } catch (MetadataInvalidSelectException e) {
        LOG.error("invalid select", e);
        throw e;
        } catch (MetaDataDocumentSizeException e) {
        LOG.error("document size problem", e);
        throw e;
        } catch (MetaDataExecutionException e) {
        LOG.error("metadata execution problem", e);
        throw e;
        } catch (IllegalArgumentException e) {
        LOG.error("illegal argument", e);
        throw new AccessExecutionException();
        } catch (Exception e) {
        LOG.error("exeption thrown", e);
        throw e;
    }

### 10.3.1.4. Sélection d’un ObjectGroup

    try {
        JsonNode selectQuery;
        String objectGroupId;
        // return JsonNode
        jsonNode = metaDataClient.selectObjectGrouptbyId(selectQuery, objectGroupId);
    } catch (InvalidParseOperationException e) {
        LOG.error("parsing error", e);
        throw e;
    } catch (MetadataInvalidSelectException e) {
        LOG.error("invalid select", e);
        throw e;
    } catch (MetaDataDocumentSizeException e) {
        LOG.error("document size problem", e);
        throw e;
    } catch (MetaDataExecutionException e) {
        LOG.error("metadata execution problem", e);
        throw e;
    } catch (IllegalArgumentException e) {
        LOG.error("illegal argument", e);
        throw new AccessExecutionException();
    } catch (MetadataInvalidSelectException e) {
        LOG.error("invalid selection", e);
        throw new AccessExecutionException();
    } catch (Exception e) {
        LOG.error("exeption thrown", e);
        throw e;
    }