Table des matières 1 Choix techniques 2 1.1 Enregistrement au format XML......................... 2 1.1.1 Introduction............................... 2 1.1.2 De Java à XML.............................. 2 1.1.3 Retour à Java............................... 2 1.2 Rendu graphique................................. 3 1.3 Exportation des diagrammes.......................... 4 1.3.1 Exportation en PNG........................... 4 1.3.2 Exportation en SVG........................... 4 1.4 Génération SQL................................. 5 1.5 Génération JACK................................ 6 1.5.1 Event................................... 6 1.5.2 Plan.................................... 6 1.5.3 Agent................................... 7 2 Uses Cases 8 3 Manuel de développement 9 4 Code 10 1
Chapitre 1 Choix techniques Le but de ce chapitre est de présenter quelques solutions et choix techniques utilisés dans DesCartes Architect. Ces solutions passent souvent par l utilisation de librairies opensource. 1.1 Enregistrement au format XML 1.1.1 Introduction L extensible Markup Language (XML) est un méta-langage permettant de décrire toutes sortes de données. Son but est de structurer l information afin d en permettre un échange aisé. XML se base sur une grammaire afin d assurer que la structure de données est cohérente. 1.1.2 De Java à XML Pour convertir une classe Java au format XML, on pourrait simplement se servir de chaînes de caractères que l on créerait à la volée. Cette manière est somme toute assez simple à mettre en place, mais dès lors que le document devient un peu complexe on risque des incohérences dans notre fichier XML. Castor Une manière plus élégante pour créer des documents XML passe par l utilisation de l outil Castor. Castor est un logiciel Open Source permettant de lier des document XML à des classes Java ou même SQL. Concrètement, Castor se sert d une grammaire XML afin de créer les classes Java correspondantes. Ensuite, il ne nous reste plus qu à instancier ces classes et de remplir ses attributs à l aide de méthodes générées par Castor. Pour terminer, on appelle une fonction spécifique de la classe racine qui crée réelement notre fichier XML. 1.1.3 Retour à Java Avoir créé un fichier XML à partir de nos données Java n a pas grand intéret si l on ne peut pas faire l inverse, à savoir ouvrir ce fichier XML afin de reconstruire nos classes Java et ainsi permettre la réédition de notre fichier. 2
Pour interpreter le fichier XML, on pourrait simplement implémenter un parseur 1 qui parcourrait le fichier et recréerait ainsi nos classes. Mais en cherchant un peu sur internet, on découvre très vite qu il existe déjà des librairies Java qui permettent aisément de parcourrir un document XML. JDom JDom est une librairie qui permet de modéliser, de parcourir et de manipuler un fichier XML. Elle se distingue par sa simplicité d utilisation. JDom fournit une représentation en mémoire du fichier XML sous la forme d un arbre d objets. Bien entendu, JDom fournit aussi les fonctions de parcours et de récupération d attributs. 1.2 Rendu graphique Graphics2D est une librairie Java qui offre la possibilité de dessiner des formes simple sur certains composants graphiques. Ellipses, rectangles, lignes... les formes ainsi dessinées sont vectorielles. Un dessin vectoriel n est pas un ensemble de pixels, mais seulement des points séparés par des distances relatives. Les dessins vectoriels sont donc recalculées à chaque rafraichissement du composant sur lequel ils sont dessinés. L intérêt premier des dessins vectoriels est qu ils peuvent être redimensionnés à volonté sans aucune déformation. Si cette méthode convient pour des formes simples, il en va tout autrement lorsque l image que l ont veut dessiner devient un peu complexe. La solution serait de pouvoir importer des dessins vectoriels. Scalable Vector Graphics Le SVG est une grammaire XML permettant de décrire un ensembles de graphiques vectoriels. Plus précisément, SVG gère quelques formes géométriques de base (ellipses, rectangles,...). Ce qui en fait ici un élément intéressant est sa gestion des chemins. En effet, ces chemins utilisent des courbes de Bézier 2, ce qui permet d obtenir n importe quelle forme. Pour dessiner des formes vectorielles complexes au format SVG, on peut se servir d un éditeur tel que inkscape. Outre l édition de dessins vectoriels, ce logiciel permet de transformer une image bitmap en image SVG. Du SVG en Java Pour pouvoir importer des images au format SVG dans notre programme Java, nous devons faire appel à une librairie tierce. La librairie la plus aboutie dans ce domaine est celle développée par Apache, elle se nomme Batik. Batik interprète le fichier SVG et dessine l image associée à l aide de Graphics2D. Mais ce n est pas tout, cette librairie permet aussi d appliquer toute sortes de transformations sur notre image vectorielle, comme par exemple de lui appliquer un zoom ou une rotation. 1 Parseur signifie ici une fonction permettant de reconnaitre des mots clés 2 Les courbes de Bézier sont des courbes polynomiales paramétriques décrites pour la première fois en 1962 par l ingénieur français Pierre Bézier qui les utilisa pour concevoir des pièces d automobiles à l aide d ordinateurs. 3
1.3 Exportation des diagrammes Afin d exporter les différents diagrammes produits dans d autres documents, tel que Open Office ou Microsoft Word par exemple, il faut trouver des formats standards pouvant afficher correctement des diagrammes. 1.3.1 Exportation en PNG La première solution trouvée a été l exportation au format PNG. Le format PNG pour Portable Network Graphics mais aussi pour l acronyme récursif PNG s Not Gif a été mis au point afin de fournir une alternative libre au format GIF, qui lui est propriétaire. En parcourant la documentation du format PNG, on découvre facilement qu il n a rien a envier à son grand frère le GIF. De Graphics2D à PNG Lorsque l on désire dessiner sur des composants Swing 3, on passe par le composant Graphics2D du dit composant Swing. Les diagrammes que nous voulons exporter sur une image PNG, suivent cette règle ; ils sont dessinés sur un composant Swing. Swing offre la possibilité de récupéré ce composant Graphics2D et d en dessiner le contenu sur d autres composants. Dès lors, il suffit de créer une image vide en mémoire, et de dessiner notre composant Swing dessus. 1.3.2 Exportation en SVG Exporter un diagramme dans un format vectoriel, offre l avantage de pouvoir redimensionner ce diagramme à l infini. De cette façon, quelque soit le support ou la taille d impression, le diagramme ne sera jamais déformé et donc toujours lisible. De Graphics2D à SVG Comme présenté dans la section Rendu Graphique, les dessins tracés sur un composant Graphics2D sont vectoriels. La librairie Batik (utilisée pour l importation de dessins vectoriels) offre un composant permettant de générer un document au format SVG. Ce composant se présente comme un composant Graphics2D sur lequel il est possible de peindre. Son utilisation est facile, il suffit de peindre sur ce composant, et celui-ci génere le code SVG correspondant. 3 Swing est une librairie Java offrant des widgets graphiques 4
1.4 Génération SQL La génération de tables SQL permet de créer une base de données sur base du design agent. Un agent pouvant être représenté comme une classe dans le formalisme UML, il suffit d appliquer la transformation UML vers SQL sur nos agents. Ainsi les agents deviennent des tables et leurs attributs deviennent les attributs de table. Un attribut identifiant est ajouté à notre table, afin que celle-ci contienne une cléf primaire qui pourra être utilisée dans les cas suivants. Multiplicité..1 d un coté de l association Lorsqu on rencontre une association présentant une multiplicité du type..1 d un coté, l identifiant de l agent qui est associé à la cardinalité..1 devient une cléf étrangère dans l autre agent. Présence de multiplicité..n de chaque coté de l association Dans ce cas, l association se transforme en une table. La table ainsi créée contient comme clef étrangère les identifiants des 2 agents associés. On peut éventuellement ajouter des attributs dans la table associative. Présence d une généralisation Ici encore, chacuns des agents est transformé en table. L identifiant de l agent dont héritent les autres agents est transformé en clef étrangère dans ceux-ci. Une autre solution consiste à créer une seule table contenant tous les attributs de chaques agents avec des exclusions de groupes d attributs. 5
1.5 Génération JACK La génération de squelettes de classes JACK se fait pour trois types d éléments ; les Agents, les Plans et les Events. Pour générer ces squelettes, on crée des chaines de caractères à l aide des différents attributs définis avec l éditeur Structural Editor. Voici les structures générées pour chacun de ces types d éléments 1.5.1 Event 1 event EVENT_NAME extends EVENT_TYPE { 2 FOCUS as METHOD_TYPE() 3 } 1.5.2 Plan 1 public plan PLAN_NAME extends Plan { 2 3 // Events 4 #EVENT_FOCUS event EVENT_NAME eventatt; 5 6 // Generic methods 7 #reasoning method methodname(parameter list){ 8 // Body of a reasoning method 9 } 10 #reasoning method pass(){ 11 // Post-processing and clean up steps when the plan has succeeded 12 } 13 #reasoning method fail(){ 14 // Post-processing and clean up steps when the plan has failed 15 } 16 static boolean relevant (EventType eventref){ 17 // Code to determine when the plan is relevant to eventref 18 } 19 context(){ 20 // Logical condition to determine which plan instances are applicable 21 } 22 body(){ 23 // The plan body - the actual steps performed when the plan is executed 24 } 25 } 6
1.5.3 Agent 1 agent AGENT_NAME extends Agent { 2 3 // Events 4 #EVENT_FOCUS event EVENT_NAME eventatt; 5 6 // Plans 7 #uses plan PLAN_NAME; 8 9 // Attributes 10 ATTRIBUTE_TYPE ATTRIBUTE_NAME; 11 12 // Constructor 13 public AGENT_NAME(String name) { 14 super(name); 15 } 16 17 // Methods 18 METHOD_VISIBILITY METHODE_RETURN_TYPE METHOD_NAME (PARAMETER_TYPE PARAMETER_NAME){ 19 } 20 } 7
Chapitre 2 Uses Cases 8
Chapitre 3 Manuel de développement Cette partie s adresse aux développeurs qui feront évoluer DesCartes Architect. Rédigé en anglais, ce chapitre présente la création d un nouvel éditeur, sur base de l éditeur de uses cases. 9
Chapitre 4 Code 10