# Sujet n° 1 : Permettre la réalisation facile d'un diagramme de cas d'usage

*Encadrant :* Frédéric Serin

Dans le cadre du projet Latitude, nous attendons dans ce projet la proposition d'un générateur de
diagramme de cas d'usage en UML. Sa taille sera sans doute proche des générateurs existants dans
notre logiciel, environ 2000 lignes y compris les commentaires.

**Prérequis :**

  * bonnes bases en algorithmique
  * programmation en Java
  * connaissance de UML
  * notions du SVG (option, du code sera disponible)

## Présentation

Le logiciel Latitude, pour Light and Accessible Tags into plain Text using Universal DEsign, est
développé au sein de notre laboratoire, et est écrit en Java. Il génère des documents principalement
aux formats HTML pour les textes et tableaux, et en SVG pour les graphiques dont des diagrammes
UML.

La réalisation d'une classe permettant de dessiner un diagramme de cas d'utilisation pourra s'inspirer
des classes existantes et notamment la classe `ObjetDiagramme` qui permet de dessiner un
diagramme d'objet. Le code actuel sera fourni. Les autres classes qui permettent de réaliser des
diagrammes de classe, de séquence et d'activité seront également des sources d'inspiration.

La classe, comme les autres fournies comme base et inspiration, permettra de générer deux fichiers :
  * un fichier SVG représentant un diagramme de cas d'usage
  * un fichier en texte brut avec balisage Latitude simple décrivant le diagramme

Il faudra proposer une syntaxe simple et légère pour réaliser un diagramme de cas d'usage. La
structure sera inspirée par celle déjà disponible pour d'autres diagrammes (classe, objet, séquence,
activité). Avec Latitude, les balises nécessaires se veulent légères et clairement identifiées. Leurs
noms sont choisis pour ne pas être intrusifs, ne pas perturber la compréhension ni visuellement, ni
verbalement via un lecteur d'écran.

## Attendu

Vous avez sur Internet toutes les informations nécessaires pour les diagrammes de cas d'usage en
UML et la syntaxe du SVG. Latitude offre déjà les fichiers de lecture et d'écriture de textes.

Il vous faudra donc :
  * définir la syntaxe pour décrire en texte brut et simple d'un diagramme
  * proposer le code de la classe `UseCaseDiagramme`

Dans ce code, après analyse du contenu, vous génèrerez le code SVG du diagramme et, en parallèle,
une description littérale du diagramme.

D'autres éléments enrichiront le modèle et le logiciel proposé :
  * gestion et avertissement de défauts (comme des chevauchements possibles)
  * une description textuelle du modèle
  * des descriptions introduites dans le code SVG via la balise de description (type title)

Le développement devra être modulaire avec, comme pour les autres classes existantes,
l'implantation de classes hébergées (inner classes).
