Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

 

Ce document reprend(ra) les différentes étapes de l'ajout d'une ressource dans Cytomine.
Il ne s'agit pas:

  • d'un manuel complet sur le fonctionnement interne de Cytomine,
  • d'un tutoriel sur Grails (Domain, Controller, ...). 

Il s'agit simplement d'une série d'étape a suivre afin d'ajouter de nouveaux types de données.

Pour un manuel de Cytomine: Documentation technique (pas à jour),
Pour un manuel de Grails:  Livre "The definitive Guide to Grails" (G. Rocher et J. Brown) disponible au Giga ou via l'intranet de l'ULg gratuitement sur http://dx.doi.org/10.1007/978-1-4302-0871-6  (chapitre 1, 2, 3, 4, 6 et 11 conseillés)

L'architecture de Cytomine évoluant de temps en temps, ce document pourrait ne pas être totalement à jour.

Définition de la resource

Nous utiliserons comme exemple l'ajout de la resource Ontology.
Une ontologie est un ensemble structuré de termes (Term) que nous pourrons lier à un projet.
Nous souhaitons stocker, en plus de son identifiant, le nom de l'ontologie ainsi que que son créateur.
Exemple: Projet "project" utilise l'ontologie "ontology" qui dispose des termes "term1", "term2",...

Nous aurons donc le schéma ci-dessous:

Image Added

Il sera nécessaire:
-d'implémenter la ressource Ontology avec tous ses champs,
-d'ajouter un lien depuis Ontology vers User,
-d'ajouter un lien depuis Project vers Ontology,
-d'ajouter un lien depuis Term vers Ontology.

Action disponible pour la resource

  • Lister toutes les ontologies accessibles.
  • Lister toutes les ontologies définies par un utilisateur.
  • Récupérer une ontologie précise (sur base de son identifiant).
  • Ajouter/Modifier/Supprimer une ontologie.

Sur base de ces actions, nous pouvons définir les URL selon le principe REST.
La plupart du temps, nous suivrons le shéma suivant:

URLAction
api/resource.json
Action GET: lister toutes les éléments de type 'resource'
Action POST: ajouter un élément de type 'resource'
api/resource/$id.json
Action GET: récupérer l'élément de type 'resource' dont l'id est $id
Action PUT: modifier l'élément de type 'resource' dont l'id est $id 
Action DELETE: supprimer l'élément de type 'resource' dont l'id est $id
api/domain/$id/resource.json 
ou
api/resource.json?domain=$id
Action GET: lister les éléments de type 'resource' filtrer par le domain de type 'domain' dont l'id est $id 

Pour notre exemple, nous aurons:

URLAction
api/ontology.json
Action GET: lister toutes les ontologies (accessibles par l'utilisateur)
Action POST: ajouter une ontologie
api/ontology/$id.json
Action GET: récupérer l'ontologie dont l'id est $id
Action PUT: modifier l'ontologie dont l'id est $id 
Action DELETE: supprimer l'ontologie dont l'id est $id
api/user/$id/ontology.json 
ou
api/ontology.json?user=$id
Action GET: lister les ontologies définie par l'utilisateur dont l'id est $id 

Création du domaine

Les domaines Grails sont situés dans le répertoire de développement /grails-app/domain/package1/.../packageN/MyDomain.groovy.
Nous créons donc la classe Ontology (be.cytomine.ontology.Ontology) dans le fichier /grails-app/domain/be/cytomine/ontology/Ontology.groovy.
 

Création des champs

Les différents champs du domaine seront automatiquement converti en colonne dans la table du domaine.
Hibernate fera la correspondance entre les types Java (String, Long,...) et les types SQL (Varchar, BigInt,...).