Приложение issue-tracker предназначено для создания задач и их назначения. The application is based on CUBA platform.
##Описание приложения
Каждая задача содержит обязательный набор атрибутов (описание, создатель, на кого назначена задача). По мимо этих атрибутов, задача может содержать дополнительный набор атрибутов, в зависимости от того какой проект выбран. Задача содержит ссылку на проект, в проекте есть ссылка на категорию, которая содержит описание структуры динамических атрибутов. Каждая категория относится к некоторому типу сущности.
При создание категории из редактора сущности Project, будет открыт стандартный экран редактирования категории, и заполнены поля, название и тип сущности. Тип сущности это сущность Issue. Т.е. у сущности Issue появится дополнительный набор атрибутов.
При отображение экземпляров сущности Issue, необходимо показывать те динамические атрибуты, которые есть в наборе категории, которая содержится в проекте данной задачи. Для этого сущность Issue реализует интерфейс com.haulmont.cuba.core.entity.Categorized который содержит два метода:
- com.company.tracker.entity.Issue.setCategory, его реализация останется пустой;
- com.company.tracker.entity.Issue.getCategory здесь возвращается экземпляр категории, который содержится в связаном проекте этой задачи.
Все динамические атрибуты корректного экземпляра можно получить с помощью метода com.haulmont.cuba.core.entity.BaseGenericIdEntity.getDynamicAttributes
При редактирование сущности Issue используется RuntimePropertiesFrame, подробнее про него можно прочитать в документации. В дескрипторе экрана создано два источника данных:
- runtimePropsDs - специфический источник, в который будут загружены экземпляры CategoryAttributeValue. Атрибут mainDs ссылается на главный источник данных - issueDs, содержащий редактируемую сущность Issue.
- categoriesDs - обычный collectionDatasource для загрузки списка категорий данного типа сущности.
В контроллере экрана у RuntimePropertiesFrame отключена возможность выбирать категорию для данного экземпляра сущности.
##Структура приложения
Приложение содержит две сущности:
- Project - Проект.
- shortName - короткое имя проекта. Необходимо для формирования уникального номера задачи. Номер задачи формируется из shortName проекта и значения последовательности для данного проекта. Подробную реализацию смотреть в com.company.tracker.listener.IssueListener.
- name - полное имя проекта.
- category - сущность содержащая набор дополнительных атрибутов для задачи, которая создается на основе этого проекта. Тип атрибута сущность - Category из базового проекта CUBA.
- team - набор пользователей, которым будет доступен этот проект. Пользователи смогут создавать и просматривать задачи на основе этого проекта.
- Issue - Проблема(Задача в рамках проекта)
- project - проект. В зависимости от того какой проект выбран, в редакторе задачи будут отображен список дополнительных(динамических) атрибутов.
- number - номер задачи. Необходимо для формирования уникального номера задачи. См. 'Project#shortName'.
- summary - короткое описание задачи
- description - полное описание задачи
- assignee - пользователь на которого назначена задача
- created - пользователь создавший задачу.
##Пример
- Запустить приложение
- Открыть экран Project/Project browser
- Создать новый проект Short Name - PL; Name - Platform;
- Создать новую категорию
- Добавить новый атрибут в категорию Название - Type; Код - PL_ISSUE_TYPE; Тип атрибута - Перечисление; Перечисление - Bug,Exception,Usability Problem,Cosmetics,Feature;
- Сохранить
- Создать новый проект Short Name - ST; Name - Studio;
- Создать новую категорию
- Добавить новый атрибут в категорию Название - Priority; Код - ST_ISSUE_PRIORITY; Тип атрибута - Перечисление; Перечисление - Major,Normal,Minor;
- Сохранить
- Открыть экран Project/Issue browser
- Создать новую задачу. При изменение значения поля Project будет меняться набор динамических атрибутов.