Реализация новых контекстов
Многие плагины контекстов добавляют новые типы контекстов в дерево контекстов SberMobile Server. В большинстве случаев эти дополнительные контексты придерживаются типичных двухуровневых парадигм:
- Контекст контейнера, который находится в контексте пользователя, которому он принадлежит
- Системные администраторы, инженеры и пользователи создают экземпляры дополнительных контекстов в этом контейнере
Например, контекст контейнера Тревоги и множественные контексты Тревога, определенные пользователем, следуют этой парадигме. |
Многие классы, относящиеся к контекстам сервера, скорее являются частью SberMobile Server, нежели частью Java SDK с открытым исходным кодом. Эти классы недоступны в исходном коде. Чтобы получить доступ к этим классам, нужно добавить следующие файлы JAR к пути класса:
Эти файлы JAR можно найти в подпапке /jar установочной папки SberMobile Server. |
Добавление нового контейнера для контекстов, определенных пользователями, включает в себя набор шагов:
Реализация класса контекста контейнера
Контексты контейнера (такие как контекст Тревога или Виджет) наследуются от EditableChildrenContext
. Чтобы реализовать контейнер для ваших пользовательских ресурсов, необходимо унаследовать класс из EditableChildrenContext
путем вызова конструктора: public EditableChildrenContext(String name, String objectName, Class<? extends EditableChildContext> childClass, TableFormat childInfoFormat)
Ниже представлено значение параметров конструктора:
Параметр | Описание |
name | Имя контекста контейнера. |
objectName | Доступное для чтения описание дополнительного ресурса, например, "Тревога". |
childClass | Класс контекста пользовательского ресурса. Может быть унаследован от |
childInfoFormat | Формат переменной, которая представляет основную настройку пользовательского ресурса. Пользователи должны будут вводить эти данные на протяжении процесса создания ресурса. Эта переменная должна содержать поля строк Использование статических экземпляров Такой же формат должен быть использован для переменной |
Есть два метода, которые следует всегда переписывать в пользовательской реализации EditableChildrenContext
:
- Метод
setupMyself()
. Реализация этого метода должна настроить контекст самостоятельно, также добавить дополнительные переменные, функции, события и действия. - Метод
buildChild(String cname, boolean readOnly, String type)
. Этот метод должен возвращать экземпляр контекста пользовательского контекста, который должен быть унаследован отEditableChildContext
. Имя возвращенного контекста должно соответствовать входному параметруcname
.
Количество методов EditableChildrenContext
обычно вытекает из реализаций setupMyself()
:
addCreateAction()
для активации создания пользователем дочернего ресурсаallowGrouping()
для поддержки группирования пользовательских ресурсов
Реализация класса контекста пользовательского ресурса
Контексты, соотносящиеся с вашими пользовательскими ресурсами (так, например, контекст соответствует Тревоге или Виджету), должны быть унаследованы от EditableChildContext
. Их создание происходит с помощью метода buildChild()
от EditableChildrenContext
, описанного выше.
Общедоступный конструктор EditableChildContext
- это public EditableChildContext(String name, boolean allowMakeCopy)
. Он принимает имя контекста (которое по факту относится к buildChild()
как
аргумент) и флажок, определяющий, будет ли действие Создать копию включено для контекста пользовательского ресурса.
Реализации EditableChildContext
должны перезаписать метод setupMyself()
для персонализации самого контекста, а также для добавления дополнительных переменных, функций, событий и действий.
Код загрузки контекста обычно ссылается на следующие методы EditableChildContext
:
- Вызов
super.setupMyself()
добавляет все необходимые основные переменные и действия. - Выполнение
addChildInfoVariable(TableFormat rf, boolean readOnly)
добавляет переменнуюchildInfo
к контексту пользовательского ресурса. Его формат должен соответствоватьchildInfoFormat
, передающемуся конструкторуEditableChildrenContext
, и включать в себя поляname
иdescription
. addConfigureAction()
,addDeleteAction()
иaddReplicateAction()
добавляют действия Конфигурировать, Удалить и Реплицировать соотвественно.
Регистрация редактора контейнера ресурсов
Идея ResourceContainerBuilder
заключается в необходимости добавления контейнеров контексту Пользователь и удалении их в подходящие моменты. Сам редактор обычно должен наследоваться от DefaultResourceContainerBuilder
и быть зарегистрированным методом ContextPlugin
от install(ServerContext context)
.
Далее следует код в качестве примера добавления редактора контейнера ресурсов для тревог.
|
Метод buildImpl()
добавляет контекст контейнера UserContext и регистрирует его как видимый дочерний. Метод dismantleImpl()
возвращает эти операции.
Создание контекстов агрегации
Добавления самого контейнера в контекст пользователя недостаточно, потому что отображаемый для любого администратора SberMobile Server корень видимого дерева демонстрирует видимые дочерние части контекста корня сервера.
Поэтому контекст корня сервера также должен демонстрировать контексты, содержащие контекст пользовательских ресурсов в качестве дочерних. Эти контексты называются контекстами агрегации.
Больше информации о преобразованиях этого контекста доступно в статье Видимое и действительное дерево контекстов.
Итак, необходимо включить группирование для пользовательских ресурсов.
Создание контекстов агрегации и контекстов групповых контейнеров представлено посредством одного статического вызова ServerContextUtils.createAggregationContexts(Context context, String containerName, String containerDescription, String iconId, String helpId, String groupContainerDescription, boolean mapGroups, String... additionalChildren)
.
Ниже представлен пример того, как создаются контексты агрегации для тревог:
|