Projet - Langages de la JVM II

L'objet de ce projet noté est de développer de petites applications de gestion pour une association d'amateurs d'arbres. Il s'agit d'un projet à réaliser en groupe de 3-4 élèves et à rendre selon les modalités indiquées à la fin de ce document.

Description générale

Une association d'amateurs d'arbres souhaite se doter d'un logiciel permettant de l'aider dans sa gestion. La mission principale de l'association est la protection d'arbres remarquables et l'information auprès du public. Un fonctionnement interne à l'association permet de proposer chaque année aux autorités compétentes un classement d'arbres candidats à la classification en tant qu'arbres remarquables. Par ailleurs, l'association assure des visites des arbres remarquables donnant lieu à des comptes-rendus. Comme toute association, celle-ci gère un budget dont les entrées sont composées de dons et subventions ainsi que de cotisations de ses membres, et dont les dépenses sont composées de factures et de défraiements de ses membres pour les visites d'arbres remarquables qu'ils ont effectuées.

Description détaillée

Une municipalité tient à jour une liste des arbres présents sur sa commune. Ces arbres sont caractérisés par un genre (ex. Acer), une espèce (ex. pseudoplatanus), un nom en français commun (ex. Erable), une circonférence (exprimée en cm) et une hauteur (exprimée en mètres), un stade de développement (ex. Adulte), une adresse d'accès et une paire de coordonnées GPS. En outre, un arbre peut avoir reçu la classification d'arbre remarquable, à une date qui peut être connue ou non.

Le service des espaces verts de la mairie maintient une liste de personnes et d'entités (telles que des associations) qui demandent à être tenues informées d'évènements concernant les arbres. Ces notifications peuvent porter sur la plantation d'un nouvel arbre, l'abattage d'un arbre, ou la classification d'un arbre en arbre remarquable.

Une association particulière, qui s'est inscrite aux informations sur les arbres de la commune, vise à promouvoir la protection d'arbres au travers de la reconnaissance de leur caractère remarquable par la municipalité. Cette association est composée de membres, dont l'un·e a le rôle de président·e. Ceux-ci paient annuellement une cotisation fixe et unique, et sont automatiquement exclus s'ils n'ont pas réglé leur cotisation avant la fin d'un exercice budgétaire.

entites.png

L'association réalise deux actions particulières :

  1. Proposer annuellement une liste ordonnée d'arbres qu'elle recommande pour la classification d'arbres remarquables.
  2. Effectuer des visites des arbres remarquables à l'issue desquelles le membre ayant effectué la visite soumet un compte-rendu écrit et daté.

Propositions de classement remarquable

L'association permet chaque année à chacun de ses membres de nominer jusqu'à 5 arbres. Toute nouvelle nomination au-delà de 5 arbres est possible mais elle supprime la nomination la plus ancienne et devient la plus récente. La liste effectivement transmise à la municipalité, limitée elle aussi à 5 arbres pour l'association, est obtenue en identifiant les arbres ayant obtenu le plus de voix des membres de l'association. En cas d'égalité, les arbres sont départagés en privilégiant d'abord ceux de plus grande circonférence, puis les plus hauts. La transmission de cette liste se fait une fois par an en fin d'exercice budgétaire. Toutefois, la réception éventuelle de la notification d'une classification d'arbre remarquable par le service municipal des espaces verts peut se faire à tout moment dans l'année.

votes.png

Visites d'arbres remarquables

L'association planifie des visites d'arbres remarquables. Disposant de peu de moyens, celles-ci sont faites sur la base du volontariat de ses membres, qui décident donc eux-mêmes des visites qu'ils souhaitent effectuer. Une visite est automatiquement validée et donc affectée à un membre si aucun autre membre n'a déjà programmé une visite pour cet arbre remarquable. Pour aider les membres à choisir les arbres à visiter, l'application peut énumérer la liste des arbres remarquables par ancienneté de leur dernière visite. À l'issue d'une visite, un compte-rendu de visite daté est ajouté à la liste des comptes-rendus de l'arbre. Le membre ayant effectué la visite est défrayé pour celle-ci d'un montant fixe, à concurrence d'un nombre maximum de visites par an.

Respect du RGPD

L'association doit en outre être vigilante au respect du Règlement général sur la protection des données (RGPD). Ainsi, un membre doit pouvoir obtenir une représentation (dans un format à spécifier) de l'ensemble de ses données personnelles (nom, prénom, date de naissance, adresse, date de dernière inscription, liste de ses cotisations annuelles). Un membre doit également pouvoir quitter l'association, ce qui a les mêmes effets que s'il en était radié pour non paiement de sa cotisation : suppression de toutes ses informations personnelles, en conservant toutefois la trace de ses activités.

Financement de l'association

Le financement de l'association repose sur la recette des cotisations de ses membres, ainsi que sur le versement de dons et subventions. Ceux-ci sont versés par des donateurs présents dans une liste et qui peuvent être de différentes natures (ex. services municipaux, entreprises, associations, individus), mais qui doivent tous pouvoir recevoir une demande écrite de subvention/don émanant de l'association et, en retour, pouvoir transférer le montant qu'ils souhaitent verser à l'association. Est joint à cette demande le dernier rapport d'activité de l'association s'il existe, qui contient un point budgétaire (recettes et dépenses) et une synthèse des activités pour l'exercice précédent.

Les dépenses de l'association sont de deux types : le défraiement des visites d'arbres remarquables par ses membres, et le paiement de factures reçues.

budget.png

Fin d'exercice budgétaire

La fin d'un exercice budgétaire se compose des actions suivantes :

  • Révocation des membres n'ayant pas réglé leur cotisation pour l'exercice écoulé.
  • Constitution et transmission de la liste proposée pour la classification en arbres remarquables.
  • Génération du rapport d'activité pour l'exercice écoulé.
  • Envoi des demandes de subventions/dons et réception des éventuelles sommes d'argent. Pour simplifier, on supposera une réponse et un versement des fonds éventuels immédiats.

Actions possibles

Les actions suivantes peuvent elles être effectuées à n'importe quel moment d'un exercice budgétaire :

  • Inscription d'un nouveau membre et désinscription d'un membre existant.
  • Recette de la cotisation d'un membre.
  • Paiement d'une facture reçue.
  • Ajout d'un nouveau donateur et suppression d'un donateur existant.
  • Ajout d'une programmation de visite d'arbre remarquable et réception d'un compte-rendu pour une visite programmée.
  • Vote d'un membre en faveur de la reconnaissance d'un arbre remarquable.
  • Réception de notifications concernant la plantation ou l'abattage d'arbres ou la classification en arbre remarquable.

Contraintes d'implémentation

Les applications devront être développées en langage Java en mettant en œuvre les principes étudiés lors du module.

En option

Le recours au langage Kotlin pour des parties des applications est permis mais n'est pas attendu. A noter : l'IDE IntelliJ IDEA permet des traductions de fichiers Java en Kotlin.

Jeu de données

Pour ce projet, vous exploiterez la base des arbres de la ville de Paris, comprenant 211 750 entrées (2019). Pour des questions de taille, vous utiliserez le format d'export CSV comme entrée de vos applications. Les données peuvent être parcourues en ligne grâce à un explorateur de données. Vous utiliserez un modèle en mémoire (en limitant si besoin le nombre d'arbres effectivement pris en compte), bien qu'une base de données serait plus adaptée.

Applications à développer

Il vous est demandé de développer 3 applications simples, disposant d'une interface graphique développée avec JavaFX :

Il est attendu que ces applications puissent partager du code.

Pour simplifier, les 3 applications pourront s'exécuter sur la même machine, ce qui permettra une solution simple pour l'échange de messages entre elles.

Les trois applications devront permettre la consultation de listes d'arbres, pour notamment permettre des choix à l'intérieur : celles-ci pourront être obtenues en appliquant différent types de filtres pré-construits éventuellement paramétrables, ex. :

  • tous les arbres remarquables de l'arrondissement ${a} ordonnés par ancienneté de la date de dernière visite
  • tous les arbres ${a} de circonférence supérieure à ${v}cm

Application de gestion de l'association

Cette application, la plus complexe, doit permettre de faire la gestion de l'association.

Application pour un membre de l'association

Cette application, relativement légère (qui pourrait par exemple être une application mobile), doit permettre de se connecter en tant que membre de l'association afin de gérer ses cotisations, votes et visites. On suppose que l'utilisateur doit s'identifier dans la liste des membres de l'association, mais vous n'avez pas à gérer la sécurisation des accès.

Application pour le service des espaces verts

Cette application se limitera à la partie en lien avec la cahier des charges pour une application du service des espaces verts de la mairie qui pourrait être plus complexe.

Persistance des données des applications

Pour la persistance des données de l'application, vous aurez recours à des fichiers au format JSON, en utilisant Jackson databind (voir, par exemple, ce tutoriel).

Échange de données entre applications

La communication entre applications devrait typiquement passer par des API web. Dans le cadre de ce projet, on se fondera sur la simplification suivante : les 3 applications s'exécutent sur la même machine, et peuvent se laisser des messages en déposant des documents JSON dans des répertoires particuliers du système de fichiers partagé.

On ne demande pas ici un traitement asynchrone des messages : une commande de l'interface graphique permettra de "relever les messages", et donc de traiter les messages au format JSON présents dans certains répertoires de façon synchrone.

En option

Il est possible d'avoir recours à un service qui surveille les modifications d'un système de fichier : Watch Service API

Les messages correspondront à un format attendu connu et géré par les applications, exprimé au moyen de métadonnées présentes dans l'objet racine du document. Ainsi, un message portera des métadonnées pour indiquer qu'il est de type "nomination pour la classification d'arbre remarquable par un membre", et des données en rapport. Un tel fichier sera écrit par une application émettrice dans un répertoire de type "inbox" d'une application destinataire, laquelle aura ensuite la responsabilité de l'archiver ou de le supprimer après l'avoir traité.

En option

L'approche décrite repose sur une grammaire pour les fichiers JSON encodée en dur dans les applications productrices et consommatrices. Une bien meilleure manière de procéder serait d'externaliser le schéma de bonne formation de ces documents, d'y faire référence dans les documents puis d'utiliser un parseur validant (i.e. qui réalise la validation d'un document relativement à un schéma) pour confirmer qu'un document est bien du schéma qu'il prétend être. Cela est permis à l'aide de JSON Schema, et d'outils compatibles.

Rendu attendu

Vous devrez mettre à disposition :

  • l'ensemble de vos fichiers sources
  • la liste des dépendances de vos projets (un fichiers de construction de type Maven ou Gradle pourra être fourni)
  • un fichier de description du projet (ex. readme.md) dans lequel vous décrirez comment paramétrer et démarrer chacune des applications
  • éventuellement : un répertoire contenant des données persistées par applications

La mise à disposition se fera par l'envoi d'un email par l'un des membres du groupe d'un lien de téléchargement au responsable du module. La date de rendu du module est publiée sur la page eCampus du module.