-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreadme_gencode
84 lines (55 loc) · 4.05 KB
/
readme_gencode
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
READ ME : Projet Génération de codes
Author(s) : Antoine SOUESME & Sylvain BLANCHARD
Lancement du programme :
- Run la classe Main.java
Main :
- La classe Main.java permet de :
lancer la génération des entités présentes dans le fichier model.xml
lancer la génération de classe Repository.java
Fichier modèle :
- model.xml : contient le fichier d'entré pour l'association, l'héritage et le modèle de résolution.
- paquet1.xml : contient le fichier plat d'entré pour le lot d'instances
- repoModel.xml : contient le fichier pour la génération du fichier Repository.java
Contenu du projet :
- Main.java : classe principale du projet
- MjPackage.java : classe correspondante à un package java
- MjEntity.java : classe correspondante à une classe
- MjAttribute.java : classe correspondante à un attribut d'une classe
- MjReference.java : classe correspondante à un type non primitif (exemple : un type d'une classe).
- MjType.java : classe correspondante à la déclaration d'un type
- RepositoryGenerator.java : classe servant à la génération d'un fichier repository en fonction d'un fichier model.
- RepositoryTemp.java : résultat de la génération du repository
- Util.java : classe contenant les outils pour récupérer l'ensemble des fonctions utiles à la génération de code.
- Visiteur.java : classe pour la visite des différents objets du fichier xml à parser
- xmlGenerator.java : classe pour générer un fichier xml
Choix de conception / état d'avancement :
Version minimale :
Détection des entités et des attributs dans une classe fonctionnelle. Détection des objets lors du parsage du fichier xml d'entré.
Association :
Les associations sont gérées de la manière suivante :
Le mot clé "typedef" défini un nouveau type, il est composé de plusieurs éléments :
un "id" unique, un "name", un "typeid" qui contient soit l'id d'un type défini auparavant soit un type primitif java. Il peut également posséder un élément "length" s'il s'agit d'une liste bornée. Un élément "package" est ajouté pour importer le package défini.
Les listes d'objets avec cardinalités sont gérées de la manière suivante :
avec une cardinalité fixe : un tableau est créé avec la taille de la cardinalité
avec des cardinalités minimale et maximale : des fonctions add et remove permettant de conserver le nombre défini d’élément dans la tableau.
Globalement, sont gérées :
- liste d’éléments primitif de base string,int ...
- liste d’éléments de type de données autres
- liste d'entités (relation )
- liste d'objets avec cardinalité fixe
- liste d'objets avec cardinalité min et max
L'ajout des attributs se faisant dans une hashmap défini avec des clé/valeurs, la clé représentant le nom de la variable, l'unicité des déclarations de variables est donc gérée de cette manière.
Heritage :
- L'héritage se fait en fonction de la déclaration d'une nouvelle entité via le mot clé "extends". Si le mot clé est renseigné alors à la génération de l'entité on rajoute la classe qui est étendue. L'import du package dans lequel se trouve la classe étendue est également géré.
- L'héritage circulaire est géré.
Valeur initiale :
Les valeurs sont initialisées de la manière suivante :
- S'il s'agit d'un type primitif (que l’élément parsé contient une valeur "init"), la variable est initialisée à la valeur "init"
- S'il s'agit d'un type object, l'object est instancié à l'aide d'un constructeur.
Lot d'instance : (avoir le repo, serialisation + matérialisation + génération du repo)
"is" => décrit un nom d’instance
"in" => décrit le nom de l’instance sur laquelle l’entité doit pointer.
La classe RepositoryGenerator génère le repository. Cette classe Repository permet de générer un XML conforme aux lot d’instance décrit dans le fichier repoModel.xml.
Reste à faire :
- Terminer la génération du repository
- re-bouclage