Добавление новой модели

Для добавления новой модели в ядро (код моделей находится в модуле common module), необходимо сделать следующее:

  • Добавить таблицу БД для модели в server/src/main/resources/liquibase/db.changelog.xml.
  • Добавить класс, представляющий экземпляр модели, в persistence/domain.
  • Для совместимости с будущими версиями мобильных приложений, рекомендуется использовать аннотацию JsonIgnoreProperties:

    @JsonIgnoreProperties(ignoreUnknown = true)
    
  • Добавить классы и XML-файлы для работы с моделью в БД, в persistence/mapper.
  • Реализовать класс DAO, представляющий логику работы с моделью.
  • Добавить этот класс DAO в нужные сервисы или веб-ресурсы:
  • 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.
  • Ответы методов инкапсулируются в контейнер com.hmdm.rest.json.Response.

  • В случае использования кастомных JSON запросов или ответов, реализовать классы, соответствующие этим JSON объектам, в rest/json.
  • Добавить класс ресурса в инициализатор guice/module/PublicRestModule или PrivateRestModule.

Разница между 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.

    << Часть 4: Разработка плагина