EN · DE · RU · FR · ES

#2784: EventSource.java

projectforge-wicket/src/main/java/net/ftlines/wicket/fullcalendar/EventSource.java Java-модель (конфигурация источника событий FullCalendar) · projectforge-wicket/src/main/java/net/ftlines/wicket/fullcalendar/EventSource.java 244 строки · 138 кода · 66 комментариев · 40 пустых
Модель конфигурации и идентификации источника событий FullCalendar — мост между поставщиком данных (EventProvider) и его визуальным представлением в календаре. Каждый источник событий имеет свойства внешнего вида (цвета, CSS-класс), поведенческие флаги (редактируемый, по умолчанию на весь день, обработка часового пояса), модель событий в формате JSON-raw (JavaScript-колбэк, который загружает события) и метаданные, хранящиеся в обобщённом Map<String, Object> (название, UUID). UUID автоматически генерируется при инициализации календаря и служит идентификатором источника для Ajax-колбэков. Аннотации Jackson управляют сериализацией: @JsonRawValue для скрипта колбэка событий, @JsonIgnore для внутренних ссылок, таких как EventProvider и геттеры UUID/названия (которые сериализуются через карту data).

Архитектура

Двойная система идентификации

Источники событий имеют две системы идентификации: внутреннюю ссылку EventProvider (Java-объект, не сериализуемый на клиент) и строку UUID, хранящуюся в карте data под ключом "fcxUuid". UUID является основным идентификатором для взаимодействия клиент-сервер — он передаётся в параметрах Ajax-колбэков и используется EventManager для поиска. Название (хранится под ключом "fcxTitle") — это читаемая человеком метка, отображаемая в флажках выбора источника событий. Класс констант Const централизует эти ключи карты.

Модель событий как JavaScript

Поле events — это IModel<String>, значением которого является тело JavaScript-функции — колбэк, который FullCalendar вызывает для загрузки событий этого источника. Оно устанавливается методом FullCalendar.setupCallbacks() с использованием шаблона из FullCalendar.events.tpl. Аннотация @JsonRawValue на геттере гарантирует, что этот JavaScript-код встраивается непосредственно в JSON-объект конфигурации без кавычек, что необходимо для интерпретации его FullCalendar как исполняемого кода.

Интеграция с селектором

Два булевых флага управляют интеграцией с EventSourceSelector: includeInSelector (отображается ли источник в списке флажков UI) и enableInSelector (доступен ли его флажок для взаимодействия). Это позволяет сделать источники присутствующими, но скрытыми, или видимыми, но не переключаемыми — полезно для обязательных базовых календарей, которые всегда должны отображаться.

Текучий API

Все сеттеры возвращают EventSource для текучей конфигурации, что согласуется с остальными классами модели FullCalendar.

История Git

КоммитЧто изменилось
868d6abb7ceb63e8a1Шесть ежегодных обновлений заголовков авторских прав. Модель источника событий остаётся стабильной — система идентификации на основе UUID, двойные свойства цвета/внешнего вида, флаги интеграции с селектором и модель событий на основе шаблонов покрывают все потребности конфигурации источника событий.