FullCalendar.javaAbstractFullCalendar (encabezado/recursos) e implementa IRequestListener (obtención de eventos Ajax). En la inicialización, genera UUIDs aleatorios para todas las fuentes de eventos. Antes de cada renderizado, configura cinco comportamientos de callback (obtención de eventos, clic, arrastrar-soltar, redimensionar, cambio de vista, selección de rango de fechas) si no han sido configurados externamente. Renderiza la configuración JSON del calendario en un OnDomReadyHeaderItem y delega las solicitudes de eventos al comportamiento GetEventsCallback. Los métodos plantilla (onEventDropped, onEventResized, etc.) proporcionan implementaciones predeterminadas sin operación que las subclases o instancias anónimas sobrescriben.El método setupCallbacks() está protegido por if (getEvents != null) return; — se ejecuta exactamente una vez por ciclo de vida del componente, en onBeforeRender(). Para cada tipo de callback (eventos, clic, seleccionar, soltar, redimensionar, visualización de vista), verifica el campo de configuración correspondiente: si no se ha establecido externamente, crea un comportamiento Ajax de Wicket e inyecta el script del manejador generado en el modelo de configuración. Este patrón perezoso permite a los llamadores sobrescribir los métodos plantilla (conveniente para subclases anónimas) o proporcionar scripts de callback personalizados a través de la API de configuración (para integración avanzada con JavaScript).
En la inicialización, cada fuente de eventos recibe un UUID generado por UUID.randomUUID() con caracteres no alfanuméricos eliminados. Este UUID sirve como identidad de la fuente para los callbacks Ajax — está incrustado en la URL del callback como parte de la función JavaScript, y el servidor lo extrae de la solicitud para enrutar los eventos a la fuente correcta.
La actualización a Wicket 8 eliminó org.apache.wicket.util.collections.MicroMap (una optimización de mapa pequeño en Wicket anterior). El método setupCallbacks() se actualizó para usar new HashMap<>() en lugar de new MicroMap<>() al pasar la variable de URL de la plantilla. Este fue el único cambio funcional en esta clase más allá de las actualizaciones de derechos de autor.
Cinco métodos protegidos proporcionan puntos de enganche: onEventDropped, onEventResized (ambos devuelven un booleano indicando si el cambio fue aceptado), onDateRangeSelected, onEventClicked y onViewDisplayed. Las implementaciones predeterminadas no hacen nada. Las subclases sobrescriben estos para implementar lógica de negocio — por ejemplo, persistir el nuevo horario de un evento arrastrado en la base de datos.
getAjaxConcurrency() devuelve AjaxConcurrency.QUEUE, asegurando que múltiples solicitudes Ajax rápidas (por ejemplo, de operaciones de arrastrar y soltar) se procesen secuencialmente en lugar de concurrentemente, evitando condiciones de carrera en las actualizaciones de posición de eventos.
El método renderHead() genera la llamada de inicialización de FullCalendar: $("#markupId").fullCalendarExt({...Config serializado...});. Utiliza ToStringUtil.toJsonString(config) con los serializadores Joda-Time personalizados de AbstractFullCalendar. El ID de marcado vincula la invocación de JavaScript al elemento DOM específico.
| Commit | Qué cambió |
|---|---|
868d6abb7 hasta 916166996 | Seis commits: cinco actualizaciones anuales del encabezado de derechos de autor más un cambio funcional. El commit de migración (0d183e5df) reemplazó MicroMap con HashMap en el método setupCallbacks() y añadió las importaciones correspondientes de java.util.HashMap/java.util.Map — una corrección de compatibilidad con la API de Wicket requerida por la actualización a Wicket 8 que eliminó la clase de utilidad MicroMap. Todos los demás commits son incrementos del año de derechos de autor. |