- Архитектура системы
- Сборка системы
- Архитектура плагинов
- Разработка плагина
- Доработка ядра
Добавление новой модели
Для добавления новой модели в ядро (код моделей находится в модуле common module), необходимо сделать следующее:
- Добавить таблицу БД для модели в server/src/main/resources/liquibase/db.changelog.xml.
- Добавить класс, представляющий экземпляр модели, в persistence/domain.
Для совместимости с будущими версиями мобильных приложений, рекомендуется использовать аннотацию JsonIgnoreProperties:
@JsonIgnoreProperties(ignoreUnknown = true)
private NewModelDAO newModelDAO; @Inject public SomeResource(NewModelDAO newModelDAO, …) { this.newModelDAO = newModelDAO; }
Примечание: модели находятся в модуле common. Поэтому после изменения кода модуля common, необходимо выполнить команду:
mvn install
чтобы новый код стал доступен для модуля ядра (server) и всех плагинов.
Multi-Tenancy
Следует иметь в виду, что система Headwind MDM является Multi-Tenant (т.е. в ней могут присутствовать несколько организаций). Несмотря на то, что в однопользовательской установке данная функция не используется, рекомендуется во всех моделях указывать CustomerID или делать ссылку на модель, имеющую CustomerID, и проверять, что во всех методах, реализуемых в DAO классе, доступ предоставляется только к объектам своего CustomerID.
Добавление нового компонента
Новый компонент ядра, как минимум, будет состоять из модели и веб-интерфейса для работы с ней.
Сначала нужно добавить модель (см. предыдущий раздел).
Веб-интерфейс состоит из Back-end (REST-методы работы с моделью) и Front-end (пользовательский интерфейс).
Реализация Back-End
Реализация Back-End состоит из следующих шагов:
- Реализовать класс resource/NewComponentResource. Для того, чтобы методы нового ресурса отразились бы в SwaggerUI, нужно использовать аннотацию @ApiOperation.
- В случае использования кастомных JSON запросов или ответов, реализовать классы, соответствующие этим JSON объектам, в rest/json.
- Добавить класс ресурса в инициализатор guice/module/PublicRestModule или PrivateRestModule.
Ответы методов инкапсулируются в контейнер com.hmdm.rest.json.Response.
Разница между Public и Private заключается в том, что в методах Public авторизация не требуется, тогда как методы Private требуют авторизации (либо через встроенный механизм Spring – через куки, либо через JWT для сторонних приложений).
Реализация Front-End
Front-End новых ресурсов следует располагать в webapp/app/components/main.
Реализация Front-End состоит из следующих шагов:
- Создать необходимые представления (для CRUD контроллера это будет представление таблицы и всплывающего окна редактирования) в main/view и main/view/modal.
- Добавить строки для локализации представления в localization/*.js.
- Реализовать AngularJS контроллер, разместить его в main/controller.
- Реализовать интерфейс доступа к REST сервисам (AngularJS factory метод), разместить его в service/main.service.js или добавить свой JavaScript файл сервиса.
- Добавить ссылки на все созданные JavaScript файлы в файле index.html.