EN · DE · RU · FR · ES

#2783: EventProvider.java

projectforge-wicket/src/main/java/net/ftlines/wicket/fullcalendar/EventProvider.java Java-интерфейс (источник данных FullCalendar) · projectforge-wicket/src/main/java/net/ftlines/wicket/fullcalendar/EventProvider.java 47 строк · 8 кода · 33 комментария · 6 пустых
Абстракция источника данных для компонента FullCalendar — сериализуемый интерфейс, который должен реализовать каждый источник событий для предоставления событий. Определяет два метода: getEvents(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 позволяет оптимизировать запросы для одной записи вместо повторного сканирования всего диапазона дат.

История Git

КоммитЧто изменилось
868d6abb7ceb63e8a1Шесть ежегодных обновлений заголовков авторских прав. Контракт интерфейса оставался стабильным — двухметодная архитектура (запрос диапазона + точечный поиск) покрывает все шаблоны доступа к данным FullCalendar, используемые приложением.