

Ce fichier `README.md` présente les grandes lignes du projet :  
- son objectif,  
- l’utilisation des LLM (Large Language Models),  
- la structure du projet,  
- les bibliothèques externes utilisées,  
- et les membres de l’équipe.

---
##  Sommaire

- [Présentation du projet](#-application-de-visualisation-des-musées-de-france)
- [Utilisation des LLM](#-utilisation-des-llm-chatgpt--github-copilot)
- [Structure du projet](#-structure-du-projet)
- [Tests](#tests)
- [Bibliothèques utilisées](#-bibliothèques-utilisées)
- [Équipe de développement](#-équipe-de-développement)

---

#  Application de Visualisation des Musées de France

Bienvenue dans le dépôt de notre projet de génie logiciel.  
Ce projet consiste en la création d’une **application Java** permettant de visualiser, filtrer et analyser les musées de France à partir de données fournies par le Ministère de la Culture.

L’objectif est de proposer une interface conviviale qui permet à l’utilisateur :
- d’explorer les musées selon différents critères (région, thématique, accessibilité…),
- de générer des rapports visuels (diagrammes & rapport html ou pdf),
### Lancement de l’application

Pour lancer l’application :

1. Ouvrir le fichier `src/projetMusee/ui/MainWindow.java` dans un IDE Java 
2. Identifier la méthode `main` (située aux alentours de la ligne 10)
3. Faire **clic droit** → **Run 'Main'**

L’interface graphique de l’application se lancera alors, avec tous les composants intégrés (chargement des musées, filtrage, diagrammes...).


##  Utilisation des LLM (ChatGPT / Copilot)

Nous avons **respecté la consigne donnée par l’enseignant** concernant l’usage des outils d’intelligence artificielle.  
Il a été **mentionné explicitement dans le document de projet** (page 2) :

> *« L’équipe de développement est encouragée à utiliser des outils comme ChatGPT ou Copilot pour accélérer le développement.  
> La contrainte reste que vous devez parfaitement comprendre le code que vous obtenez par le biais de ces outils.  
> Cela sera évalué en fin de projet. »*


### Comment nous avons utilisé les LLM

Dans cet esprit, **nous avons utilisé les LLM comme des assistants de productivité**. Voici un exemple représentatif de notre usage :

- Lors du développement de la classe `Musee` (côté back-end), nous avons récupéré manuellement un objet JSON représentatif d’un musée dans le fichier JSON fourni par le Ministère de la Culture.
- Après avoir analysé sa structure et les différents attributs qu’il contenait, nous avons fourni cet extrait à ChatGPT (modèle GPT-4o) avec une consigne claire pour :
  - générer une classe Java complète nommée `Musee`,
  - y inclure automatiquement les attributs correspondants,
  - ainsi que leurs getters et setters.

Cela nous a permis de **gagner un temps précieux sur des tâches répétitives et mécaniques**. Plutôt que d’écrire à la main une trentaine d’attributs et leurs accesseurs, nous avons concentré nos efforts sur la logique de l’application et l’organisation globale du code.

> Ce n’est qu’un exemple parmi d'autres. D’autres tâches techniques similaires ont également bénéficié ponctuellement de l’aide de LLM pour accélérer leur réalisation.

### Ce que nous avons entièrement réalisé nous-mêmes

- **L’architecture générale du projet a été pensée par l’équipe**, lors d'une séance préparatoire où nous avons conçu la logique complète sur papier :
  - structure des packages,
  - logique du moteur VisuStat, comment l'utiliser dans le cadre de l'application
  - fonctionnement de l’interface graphique,
- **Toutes les décisions structurantes ont été prises par nous-mêmes**, y compris :
  - le choix de créer des classes métiers (museum) dédiées plutôt que d’utiliser des `Map<String, Object>` ou structures génériques,
- **Nous avons vérifié manuellement chaque portion de code générée par l'IA** afin de s'assurer :
  - qu’elle correspondait exactement à notre architecture,
  - qu’elle n’introduisait pas de logique étrangère ou incohérente,
  - qu’elle était correctement intégrée à notre structure objet.

En résumé :

> **L’IA a servi comme un outil secondaire**, pour alléger certaines tâches répétitives, mais **toutes les idées, la logique, la conception et l’implémentation finale sont le fruit de notre travail collectif.**

Nous avons conscience que l’intelligence artificielle ne peut pas concevoir un projet cohérent de bout en bout sans connaître la logique interne et les objectifs spécifiques. C’est pourquoi **chaque aspect du développement a été maîtrisé par notre équipe** et rigoureusement testé.

---

## Structure du projet

La structure complète du projet se trouve dans le fichier (structureProjet.txt) à la racine de ce depot.

Celui-ci décrit l’organisation des fichiers :
- `src/` avec ses sous-dossiers `backend/`, `engine/`, `ui/`, `facade/`, etc.
- `lib/` pour les bibliothèques JAR externes
- `docs/` pour la documentation PDF, diagrammes, user stories
- `data/` pour les fichiers JSON, CSV, SVG générés
- `test/` pour les tests unitaires

---
##  Tests

Nous avons pris soin de tester l’ensemble de l’application.

- Pour le **backend**, des **tests unitaires automatiques** ont été écrits à l’aide de la bibliothèque **JUnit**, comme recommandé. Ils couvrent :
  - La lecture des fichiers,
  - Le filtrage des musées,
  - La logique du moteur **VisuStatEngine**.

- Pour l’**interface utilisateur (UI)**, les tests ont été réalisés **manuellement**. Nous avons simulé diverses situations : clics sur les boutons, changements de couleurs, affichage des panneaux, etc.  
  Ces tests étaient accompagnés de **traces terminales** (avec des `System.out.println`) afin de vérifier la logique de déclenchement des actions et le bon fonctionnement général.

Dans certains cas, nous avons utilisé la méthode `toString()` sur les objets `Musée` pour afficher leur contenu et confirmer que la logique métier fonctionnait correctement en profondeur.

---

##  Bibliothèques utilisées

Voici les principales bibliothèques externes utilisées dans le projet :

- `vizustat-v2.jar` : moteur de statistiques visuelles, que nous avons conçu.
- `batik-*.jar` : transcodage SVG → PNG (Apache Batik)
- `junit-4.13.2.jar` : tests unitaires
- `hamcrest-core-1.3.jar` : matchers pour les assertions

---

##  Équipe de développement

Ce projet a été réalisé dans le cadre d’un travail en équipe.  
Les membres du groupe sont les suivants :

- Ahounou Adjarath Achabi → @aahounou
- Ayi Kpadonou Loan Etienne Foly → @layikpadonou
- Balde Ibrahim → @ibalde
- Bhaya Mohamed Taha → @mbhaya
- Ebnou Abdoum → @eebnouabdoum
- Houndji Farren Isnele Lynda → @fhoundji


---

 *Pour toute question, vous pouvez contacter un membre de l’équipe ou consulter la documentation dans le dossier `docs/`.*

 Nous espérons que ce projet sera à la hauteur de vos attentes et reflétera le sérieux de notre engagement.

Merci pour votre lecture !