Sérialisation de données
Dans ce TP vous allez coder un algorithme de sérialisation.
Comme pour les précédents TPs, vous avez le choix entre Java et Python.
De manière générale nous allons sérialiser les modèles en JSON selon un schéma de votre choix.
Regardez comment produire et lire du JSON en Java.
En Python, tout est intégré dans la bibliothèque standard, mais en Java, il faudra que vous utilisiez une bibliothèque externe.
En Java, il existe plusieurs bibliothèques, mais on vous conseille d’utiliser org.json
qui est simple à prendre en main.
Vous pouvez trouvez au dessous comment paramétrer votre projet Java et Python correctement avec quelques exemples de code de comment utiliser les bibliothèques en Java et Python voici quelques liens :
Créer/paramétrer son projet Java
Le paramétrage du projet en Java n’est pas compliqué en soit, mais il peut-être long si vous ne savez pas vraiment où aller. Ici, vous trouverez un mini-tuto pour paramétrer correctement votre projet. Si vous rencontrez trop de difficultés avec le paramétrage de votre projet, n’hésitez pas à demander ou à passer en Python. Pour init votre projet, il va falloire faire deux choses imporantes :
-
installer les composants
maven
pour Eclipse (pas nécessaire si vous les avez déjà), -
bien créer votre
pom.xml
.
Installation des composants maven
pour Eclipse
Allez dans Help→Install new software…
, dans la partie combo-box Work with
, sélectionnez 2021-06…
(ou tout autre date que vous avez, mais sélectionnez la plus récente des entrées avec une date).
Ensuite, dans le champ type filter text
, cherchez maven
, puis sélectionnez à installer :
-
m2e - Maven Integration for Eclipse
-
m2e connector for mavenarchiver pom properties
Cliquez ensuite sur Finish
et poursuivez l’installation.
Une fois l’installation terminée, redémarrez votre Eclipse.
Création du projet pour le TP
Il faut maintenant créer un projet Eclipse-Maven et bien le paramétrer.
Créez un projet avec File→new→Other→Maven project
.
Sur la page de création du projet Maven, sélectionnez create a simple project (skip archetype selection)
.
Sur la page suivante, entrez les informations suivantes pour la création du projet Maven :
-
Group ID
:org.univ.metamodeling
-
Artifact ID
:serializer
Une fois le projet créé, ouvrez le fichier pom.xml
et utilisez les dépendances suivantes :
<dependencies>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20210307</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>org.eclipse.emf.ecore</artifactId>
<version>2.25.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.emf</groupId>
<artifactId>org.eclipse.emf.ecore.xmi</artifactId>
<version>2.16.0</version>
</dependency>
</dependencies>
Important
|
Si vous avez des erreurs sur votre projet, il y a de fortes chances que ça soit des erreurs Maven.
Pour les résoudre, faites un clic droit sur votre projet, puis sélectionnez Maven→Update project tout en cochant Force Update of Snapshot Releases .
|
Utiliser la bibliothèque org.json
La bibliothèque est plutôt simple à utiliser, on créer des JSONObject
et/ou JSONArray
qui sont l’équivalent soit de map, soit de collection dans lesquels on rajoute les informations dont on a besoin.
Voici un exemple de comment créer un objet et un array JSON
et de comment les "dumps" en chaine de caractère :
JSONObject obj = new JSONObject()
.put("JSON1", "Hello World!")
.put("JSON2", "Hello my World!")
.put("JSON3", 44);
JSONArray array = new JSONArray().put(obj);
System.out.println(array.toString());
Testez votre code
Pour tester votre projet, il est plus simple de prendre directement des méta-modèles que vous avez déjà produit. Normalement votre code est censé fonctionner avec n’importe quel type d’éléments, méta-modèle ou modèles, il est donc facile d’ouvrir un de vos modèles ou méta-modèles et de voir si tout fonctionne :
ResourceSet rset = new ResourceSetImpl();
rset.getResourceFactoryRegistry().getExtensionToFactoryMap().put("ecore", new XMIResourceFactoryImpl());
rset.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xmi", new XMIResourceFactoryImpl());
// Enregistrez ici vos méta-modèles si nécessaire
// rset.getPackageRegistry().put(YOUR_MM_URI, YOUR_MM_EPACKAGE)
Resource r = rset.getResource(URI.createFileURI(PATH_TO_YOUR_ECORE_OR_XMI_MODEL), true);
EObject root = r.getContents().get(0);
// Ici l'appel à votre code pour la sérialisation
Créer/paramétrer son projet Python
Si vous avez déjà travaillé en Python, il n’y a pas de manipulation spéciale à faire si ce n’est l’activation de votre env. virtuel. Si vous n’avez encore jamais travaillé avec Python, il est nécessaire de travailler avec un env. virtuel. Regardez sur le TP 2 comment les choses étaient faites.
Utiliser la bibliothèque intégrée pour la gestion du JSON
Python propose directement une bibliothèque pour la création d’objets JSON. La bibliothèque travaille avec des objets Python de base (dictionnaire pour les objets et liste pour les arrays JSON). Le petit morceau de code suivant vous montre comment créer un objet et un array JSON.
import json
obj = {
'JSON1': 'Hello World!',
'JSON3': 44,
}
obj['JSON2'] = 'Hello my World!'
array = []
array.append(obj)
# ou directement array = [obj]
jsonstring = json.dumps(array)
print(jsonstring)
Testez votre code
Pour tester votre projet, il est plus simple de prendre directement des méta-modèles que vous avez déjà produit. Normalement votre code est censé fonctionner avec n’importe quel type d’éléments, méta-modèle ou modèles, il est donc facile d’ouvrir un de vos modèles ou méta-modèles et de voir si tout fonctionne :
from pyecore.resources import ResourceSet
rset = ResourceSet()
# Enregistrez ici vos méta-modèles si nécessaire
# rset.metamodel_registry[YOUR_MM_URI] = YOUR_MM_EPACKAGE
resource = rset.get_resource(PATH_TO_YOUR_ECORE_OR_XMI_MODEL)
root = resource.contents[0]