:: Enseignements :: ESIPE :: E4INFO :: 2015-2016 :: Java Avancé ::
[LOGO]

Projet d'IR2/IG2


Exercice 1 - IRGMail

Le but de ce projet est d'implanter un client mail mono-utilisateur comme Gmail ou Partage (le truc de la fac), capable :
  • de récupérer de façon asynchrone des mails stockés sur un serveur distant en utilisant les protocoles POP/IMAP/IMAPS.
  • d'afficher les mails dans une interface simple (AJAX/REST) permettant de filtrer rapidement les mails.
  • d'avoir un système de plugin de plusieurs sortes permettant d'améliorer l'expérience utilisateur.

Le projet est composé de trois modules principaux, la gestion des mails (récupération/stockage), la gestion de la recherche, la gestion des plugins.

  1. Configuration
    La configuration, serveur de mail, protocol, login, password, plugins, etc. se fait par un fichier properties unique qui réside sur le serveur (et bien sûr pas accessible à partir d'un browser).
  2. Sécurité
    IRGMail ne propose pas par défaut de sécurité à part vérifier que le(s) browser(s) Web qui se connecte(nt) possède(nt) la même adresse IP que le serveur Web, c-a-d vérifier que le serveur et le browser web tournent sur la même machine.
  3. Récupération des mails
    IRGMail ne stocke pas lui-même les mails mais doit être capable de récupérer les mails auprès d'un fournisseur de mails en utilisant les protocoles IMAP et POP et leurs versions sécurisées (IMAPS, POPS).
    La récupération des mails doit être asynchrone et se faire en tâche de fond dans une ou plusieurs threads dediées.
  4. Stockage des mails
    IRGMail n'utilise pas de base de donnée relationelle/NoSQL pour stocker les messages, ceux-ci restent stockés sur le serveur ayant recu le mail. Bien sûr, pour des questions de performance, une partie des mails peuvent être stockées en mémoire tant que cela reste raisonnable (1 Giga n'est pas raisonnable).
    Le programme doit donc avoir un algorithme spécifique permettant de garder en mémoire uniquement la partie intéressante des mails, qui sont eux mêmes composés d'un entête, d'un corps de message et d'attachement(s).
  5. Affichage des mails
    IRGMail doit être capable d'afficher les mails ainsi que leur contenu et afficher automatiquement les nouveaux mails arrivant sans que l'utilisateur n'ait à effectuer d'action.
    De plus, l'affichage doit distinguer les mails qui sont lus des mails qui ne sont pas lus (cet état doit être synchronisé avec le fournisseur de mails).
  6. La recherche de mails
    L'application doit permettre de rechercher/filtrer des messages par les valeurs des champs présents dans l'entête. La recherche doit fonctionner comme Google: on tape un truc dans la barre de recherche et ça marche (pas d'option pour dire s'il s'agit d'un mot du titre, du nom de la personne qui a envoyé le mail, etc).
    Pour accélérer les choses, l'application doit maintenir un index sans utiliser de blibliothèque externe.
  7. Plugins
    L'application doit être developpée au maximum en utilisant un système de plugins permettant à un utilisateur de configurer son application on ajoutant ou non des plugins (par exemple, pour activer ou non la recherche de mails).
    Ce qu'est un plugin, ainsi que le format de description choisi, sont laissés à votre convenance.
    De plus, on vous demande de développer un plugin spécifique ajoutant une fonctionnalité qui n'est pas listée ci-dessus (ni développée par vos camarades).
L'affichage se fait dans un browser Web sous forme d'une page unique. Les données sont exportées par le serveur sous forme de services Web respectant la technologie REST et affichées par le browser en utilisant des requêtes JavaScript asynchrone (AJAX) émises par une bibliothèque JavaScript. La page correspondant à l'application Web est statique et non générée par le serveur (donc pas suivant le modèle de PHP, JSP, ASP.Net, etc).
Pour la partie JavasScript (affichage et requête) vous être libre d'utiliser la/les librairies JavaScript que vous voulez, bootstrap, jquery, backbonejs, react ou angularjs.
Le serveur Web est imposé, il s'agit de vertx dans sa version 3.0. Un petit exemple jouant le rôle de prototype est disponible.
Attention, ce n'est qu'un prototype qui ne montre en rien comment vous devez concevoir l'architecture de votre programme.
Pour gérer l'interaction avec le provider de mails, vous utiliserez la biliothèque Java Mail 1.5.

Le projet (un seul fichier par binôme) doit être déposé par le binome dont le nom est le premier dans l'ordre alphabétique sur la plateforme elearning avant le 27 novembre à 23h55.
Le livrable est un fichier au format ZIP (avec l'encodage correct si vous utilisez Windows) et devra contenir dans un répertoire principal à vos deux noms
  • un répertoire src contenant les sources du projet et les éventuelles ressources à recopier à côté des classes;
  • un répertoire docs contenant le manuel de l'utilisateur (user.pdf) et le rapport qui explique votre architecture (dev.pdf) au format PDF;
  • un répertoire classes vide dans l'archive et qui contiendra les classes une fois compilées
  • un répertoire libs qui contiendra le ou les jars nécéessaire pour JavaMail.
  • un jar exécutable nommé irgmail.jar qui fonctionne avec java -jar irgmail.jar et donc qui possède un fichier manifest adéquat;
  • un build.xml (écrit à la main, pas illisible car généré par un outil) qui permet de
    • compiler les sources (target compile)
    • créer le jar exécutable (target jar)
    • générer la javadoc dans docs/api (target javadoc)
    • nettoyer le projet pour qu'il ne reste plus que les éléments demandés (target clean)
    • les répertoires vertx et webroot.

Ce projet est évalué par les enseignants de Java, Design Pattern et Concurrence, et donnera donc lieu à 3 notes différentes qui seront chacune intégrée de le calcul de la moyenne de la matière concernée.
Pour chaque matière, voici les critères d'évaluation.