EN · DE · RU · FR · ES

#2779: Config.java

projectforge-wicket/src/main/java/net/ftlines/wicket/fullcalendar/Config.java Модель конфигурации Java (FullCalendar) · projectforge-wicket/src/main/java/net/ftlines/wicket/fullcalendar/Config.java 428 строк · 267 кода · 79 комментариев · 82 пустых
Комплексная модель конфигурации для компонента Wicket FullCalendar — единый объект, который содержит все настройки календаря и сериализуется в JSON для инициализации клиентской части FullCalendar. Этот класс моделирует все настраиваемые аспекты виджета календаря: источники событий, макет заголовка, текстовые метки кнопок, скрипты обратного вызова (для событий перетаскивания, изменения размера, клика, рендеринга, выбора и отображения), настройки отображения времени, строки формата столбцов и флаги взаимодействия (редактируемый, выбираемый, перетаскиваемый, изменяемый). Аннотации Jackson управляют JSON-сериализацией: @JsonRawValue предотвращает двойное экранирование текста JavaScript-колбэков, @JsonIgnore скрывает внутренние модели Wicket от сериализации, а @JsonProperty управляет именами полей.

Архитектура

Управление скриптами обратного вызова

Семь моделей обратного вызова используют IModel<String> — абстракцию модели Wicket для динамических значений. Каждый геттер обратного вызова аннотирован @JsonRawValue, что указывает Jackson вставлять строковое содержимое модели непосредственно в вывод JSON без кавычек. Это критически важно, поскольку строки обратного вызова представляют собой тела функций JavaScript (например, function(event, delta, revertFunc) { ... }) и должны отображаться как сырой код в инициализации FullCalendar, а не как строки в двойных кавычках. Методы-сеттеры предоставляют удобство (setEventDrop(String) оборачивает в Model.of()) и расширенные возможности (setEventDropModel(IModel) для динамических моделей).

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

Использование IModel для скриптов обратного вызова обеспечивает динамическую генерацию скриптов — это критически важно, поскольку эти скрипты содержат URL-адреса Ajax-колбэков Wicket, которые меняются между запросами (из-за токенов защиты от кэширования и версионирования страниц). Метод setupCallbacks() в FullCalendar.java заполняет эти модели сгенерированным текстом скрипта, а механизм разрешения моделей Wicket гарантирует актуальные значения при каждом рендеринге.

Конфигурация времени

Используются типы Joda-Time (LocalTime для minTime/maxTime), которые сериализуются через пользовательские сериализаторы в AbstractFullCalendar. Перечисление ColumnFormat сопоставляется с опциями формата заголовков столбцов FullCalendar для видов дня, недели и месяца.

Fluent Builder

Метод add(EventSource) возвращает this, поддерживая цепочечную конфигурацию. Несколько источников событий можно добавлять в текучем стиле: new Config().add(holidaysSource).add(meetingsSource).

История Git

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