FullCalendar.javaAbstractFullCalendar (en-tête/ressources) et implémente IRequestListener (récupération d'événements Ajax). Lors de l'initialisation, il génère des UUID aléatoires pour toutes les sources d'événements. Avant chaque rendu, il met en place cinq comportements de callback (récupération d'événements, clic, glisser-déposer, redimensionnement, changement de vue, sélection de plage de dates) s'ils n'ont pas été configurés en externe. Il rend la configuration JSON du calendrier dans un OnDomReadyHeaderItem et délègue les requêtes d'événements au comportement GetEventsCallback. Les méthodes template (onEventDropped, onEventResized, etc.) fournissent des implémentations par défaut vides que les sous-classes ou les instances anonymes peuvent redéfinir.La méthode setupCallbacks() est protégée par if (getEvents != null) return; — elle s'exécute exactement une fois par cycle de vie du composant, dans onBeforeRender(). Pour chaque type de callback (événements, clic, sélection, dépôt, redimensionnement, affichage de vue), elle vérifie le champ de configuration correspondant : s'il n'est pas déjà défini en externe, elle crée un comportement Ajax Wicket et injecte le script de gestionnaire généré dans le modèle de configuration. Ce modèle paresseux permet aux appelants soit de redéfinir les méthodes template (pratique pour les sous-classes anonymes), soit de fournir des scripts de callback personnalisés via l'API de configuration (pour une intégration JavaScript avancée).
Lors de l'initialisation, chaque source d'événement reçoit un UUID généré par UUID.randomUUID() avec les caractères non alphanumériques supprimés. Cet UUID sert d'identité de la source pour les callbacks Ajax — il est intégré dans l'URL de callback dans le cadre de la fonction JavaScript, et le serveur l'extrait de la requête pour acheminer les événements vers la source correcte.
La mise à niveau vers Wicket 8 a supprimé org.apache.wicket.util.collections.MicroMap (une optimisation de petite carte dans les anciennes versions de Wicket). La méthode setupCallbacks() a été mise à jour pour utiliser new HashMap<>() au lieu de new MicroMap<>() lors du passage de la variable d'URL template. C'était le seul changement fonctionnel apporté à cette classe en dehors des mises à jour de copyright.
Cinq méthodes protégées fournissent des points d'ancrage : onEventDropped, onEventResized (les deux retournent un booléen indiquant si le changement a été accepté), onDateRangeSelected, onEventClicked et onViewDisplayed. Les implémentations par défaut ne font rien. Les sous-classes redéfinissent ces méthodes pour implémenter la logique métier — par exemple, persister le nouveau créneau horaire d'un événement glissé dans la base de données.
getAjaxConcurrency() retourne AjaxConcurrency.QUEUE, garantissant que plusieurs requêtes Ajax rapides (par exemple, provenant d'opérations de glisser-déposer) sont traitées séquentiellement plutôt que simultanément, évitant ainsi les conditions de concurrence dans les mises à jour de position des événements.
La méthode renderHead() génère l'appel d'initialisation FullCalendar : $("#markupId").fullCalendarExt({...Config sérialisé...});. Elle utilise ToStringUtil.toJsonString(config) avec les sérialiseurs Joda-Time personnalisés de AbstractFullCalendar. L'ID de balisage lie l'invocation JavaScript à l'élément DOM spécifique.
| Commit | Ce qui a changé |
|---|---|
868d6abb7 à 916166996 | Six commits : cinq mises à jour annuelles de l'en-tête de copyright plus un changement fonctionnel. Le commit de migration (0d183e5df) a remplacé MicroMap par HashMap dans la méthode setupCallbacks() et a ajouté les imports java.util.HashMap/java.util.Map correspondants — un correctif de compatibilité d'API Wicket requis par la mise à niveau vers Wicket 8 qui a supprimé la classe utilitaire MicroMap. Tous les autres commits sont des incréments d'année de copyright. |