Table of Contents

Transfert de données vers ePims

Les specifs complète (lors de l'initialisation de la fonctionnalité !) sont visibles sur le Bloc Note de RedMine

Introduction

Permettre d'uploader des fichiers (autres que les raws) et de sauvegarder un minimum d'information dans la BD. Les fichiers uploadés devront être attachés à une entité (Etude, Echantillon, Programme, …)

Modèle de la BD/ Mappings

Modification de la table attached_file défini dans la BD. Lorsque l'on veut associer cette table à un objet de la BD, il fallait créer une autre table (study_attached_file / sample_attached_file) qui gérait le lien.

L'idée est de conserver cette table attached_file mais de n'avoir qu'une autre table qui gère le lien entre attached_file et l'objet d'appartenance du fichier. Cette seconde table (file_link) a donc un champ(clé étrangère) non nulle vers attached_file et d'autre champs permettant de retrouver l'objet lié: - le champs attached_file n'est pas UNIQUE. Par conséquent, un fichier peut être rattaché à plusieurs entités et donc, par exemple, un scan de gel peut être rattaché à plusieurs échantillons. De plus, cette règle permet d'intégrer les acquisition_result dans ce schéma. En effet, la table acquisition_result est supprimé et les raw files sont référencés via les tables attached_file et file_link qui référence l'acquisition associée. - le champs associated_entity : nom de la table de l'objet associé au fichier - le champs id_FK utilisé pour référencer l'élément de la table associated_entity si sa clé primaire est de type int (cas de study, project, …) - le champs name_FK utilisé pour référencer l'élément de la table associated_entity si sa clé primaire est de type varchar (cas de sample,…)

Les fichiers associés peuvent être de tout type (rapport client, résultat d'identification, mail…), afin d'identifier le contenu des fichiers, un ou plusieurs tags peuvent être référencés. Un attribut index est également ajouté à la table file_link (non représenté ici) afin d'ordonner les tags !

Si les informations conservées au niveau des tables attached_file et, surtout, de file_link ne sont pas très lisible, le mapping hibernate utilisé en fonction de ces règles permet d'obtenir la hiérarchie de classes suivante:

Objets Java issu du mapping du nouveau modèle de la BD

Enregistrement des informations

Objectif

Le transfert des fichiers dans ePims doit au final avoir pour effet :

Mode de fonctionnement

Sur le PIMS_ROOT une drop_zone est définie et est accessible en lecture / écriture via FTP. La première phase de l'enregistrement consiste donc à transférer les fichiers (via FTP donc) dans cette zone. Pour éviter tout conflit de transfert, les fichiers ne sont pas transférés directement dans la drop_zone mais dans un sous répertoire qui est généré à la demande (par exemple en utilisant le date courante).

Dans un second temps, en fonction des informations recueillies par le système, les fichiers sont déplacés de la drop_zone vers l'emplacement définitif et la BD est renseignée.

Les informations recueillies par le système sont les mêmes que celles qui seront sauvegardées dans la BD, à savoir l'entité à laquelle le fichier est rattachée et un ensemble de tag. Les deux options suivantes seront conjointement utilisées afin de permettre une flexibilité à l'utilisation de ce service et de permettre une reprise sur erreur :

Coté serveur

Lors de la réception du message par le serveur, celui-ci renomme le répertoire temporaire de la drop_zone (appelons-le xxxyyy) en xxxyyy_lock. De cette manière, il n'y a plus de transfert possible dans ce répertoire tant qu'il est locké par le serveur. En fin de traitement, si tous les fichiers ont été ventilés, le répertoire temporaire est supprimé. Sinon, on restore le nom d'origine du répertoire et on laisse dedans les fichiers qui n'ont pas été ventilés (- :!: Non Implémenté encore : ainsi que le fichier de description modifié . Des informations supplémentaires, tel que quels sont les fichiers non traités et pourquoi, sont rajoutées au fichier de description. -)

Structure du PIMS_ROOT

Voir la documentation d'admin

Implémentation

La définition des objets transitant via les messages (ici TransferMessage) sont dans eP-CoL !

Dans eP-Core on définit la classe cea.edyp.epims.messages.JMSTransferListener qui implémente MessageListener et qui écoute sur le Topic JMS TransferTopic.

Diagramme de séquence lors de la réception d'un message

Règles de dispatch - :!: Non Implémenté encore - Des tags sont prédéfinis au niveau d'eP-Admin

Seuls les tags existants sont autorisés. Les règles de dispatch sont basés sur le tag, l'entité associée et éventuellement les caractéristiques du fichier.

Le dispatch se fait en plusieurs étapes :