EventProvider.javagetEvents(DateTime start, DateTime end) возвращает коллекцию событий в заданном временном диапазоне (вызывается, когда FullCalendar запрашивает данные для видимого диапазона дат), а getEventForId(String id) извлекает одно событие по идентификатору (вызывается во время Ajax-колбэков при кликах, перетаскивании и изменении размера событий). Реализации служат мостом между этим контрактом и доменным слоем ProjectForge — как правило, это провайдер на основе DAO, который запрашивает из базы данных календарные события, записи табеля учета рабочего времени или отпуска в пределах запрошенного окна дат.Интерфейс расширяет Serializable, что обязательно в компонентной модели Wicket. Экземпляры EventProvider хранятся как поля EventSource, который сериализуется как часть состояния страницы компонента FullCalendar. Хранилище страниц Wicket (которое может сохранять страницы на диск или в базу данных между запросами) требует, чтобы все объекты в дереве компонентов были сериализуемыми.
Сигнатура getEvents(DateTime start, DateTime end) следует протоколу получения событий FullCalendar: клиент отправляет временные метки начала и окончания (в миллисекундах эпохи) на основе текущего отображаемого представления календаря, а сервер возвращает только события в этом окне. Это обеспечивает ленивую загрузку — календарь с данными за несколько лет загружает события только для текущего отображаемого месяца/недели. Реализации используют Joda-Time DateTime для безопасных с точки зрения часового пояса сравнений диапазонов.
getEventForId(String id) — это точечный поиск, вызываемый во время Ajax-колбэков. Клиент отправляет строковый идентификатор события (обычно первичный ключ базы данных, преобразованный в строку), и провайдер должен вернуть соответствующее Event или выбросить EventNotFoundException. Отделение от getEvents позволяет оптимизировать запросы для одной записи вместо повторного сканирования всего диапазона дат.
| Коммит | Что изменилось |
|---|---|
868d6abb7 – ceb63e8a1 | Шесть ежегодных обновлений заголовков авторских прав. Контракт интерфейса оставался стабильным — двухметодная архитектура (запрос диапазона + точечный поиск) покрывает все шаблоны доступа к данным FullCalendar, используемые приложением. |