Modèle
Les alarmes sont donc gérées comme des objets à part des évènements.
Afin de ne pas avoir à les chercher au fin fond de l'arborescence, elles sont stockées dans un dossier technique (invisible pour l'utilisateur), directement à la racine de l'outil. L'absence de hiérarchie entre un évènement et son alarme est compensée par l'utilisation d'identifiants uniques, chaque objet référençant l'autre.
Afin de gérer le futur cryptage qui sera activable par dossier, le titre de l'évènement est recopié sur l'alarme. Les alarmes ne seront pas cryptables, il sera donc possible de les déclencher même si l'évènement associé est crypté.
Il sera possible d'ouvrir un évènement à partir de son alarme. Pour le moment, la recherche de l'évènement se fait dans toute l'arborescence, il faudra sans doute stocker sur l'alarme le chemin de l'évènement, mais cela obligera à le modifier lors d'un déplacement d'évènement. Ce sera donc à revoir si la recherche sur des gros volumes génère du lag.
Implémentation
Le système repose entièrement sur un service Manage_Alarm qui concentre la totalité du code de gestion :
- Analyse de l'évènement passé en paramètre.
- Si l'évènement est avec alarme : recherche du dossier technique, création si échec, recherche de l'alarme (en cas de modification), création si besoin, récupération des données d'alarme de l'évènement, calcul du moment de l'alarme, stockage des données, référencement des deux objets.
- Si l'évènement est sans alarme, déférencement si besoin, suppression de l'alarme si elle existe, suppression du dossier technique s'il est vide.
Résultat
La programmation de l'évènement : L'évènement rangé dans son index de semaine et l'alarme rangée dans son dossier technique, les deux se référençant à l'aide d'UIDs : Prochaines étapes
La page Alarmes de l'outil va d'abord être implémentée, sa liste devant permettre de contrôler les données créées plus rapidement que via l'XML.
Il restera ensuite à gérer les cas "délicats" : trouver tous les endroits où le service Manage_Alarm doit être branché, avec au moins :
- Lors de la copie d'un évènement ou d'un dossier.
- Lors de l'instanciation / la désinstanciation d'un évènement répétitif.