@startuml anyreport !theme cerulean-outline 'left to right direction package moodle-anyreport{ ' сборка приложения class App{ - accessPane : AccessPane - tagPane : TagPane - reportPane : ReportPane } 'панель подключения к базе данных class AccessPane{} AccessPane --> App 'панель просмотра базы данных (аналог phpmyadmin) class BasePane{} BasePane --> App 'панель управления тегами для формирования выборки пользователей class TagPane{} TagPane --> App 'панель отображения отчета по выборке class ReportPane{} ReportPane -->App /'методы обработки действий пользователя клики мыши, нажатия клавишь, итд. '/ class TagControls <>{ + enterPressed() : void + addTag() : void + removeTag() : void + clearTags() : void } TagControls --> TagPane 'Пользователь попросил сохранить отчет в файл 'Указывает путь куда сохранить class ReportControls <>{ - path : String + getTableReport() : void + getXLSXReport() : void + getTextReport() : void } ReportControls --> ReportPane 'модель данных для текстового отчета class ReportTextModel{ 'количество пройденных тестов 'список пройденных тестов 'количество пользователей в выборке 'количество уникальных пользователей } ReportTextModel --> ReportControls 'модель данных для отчета xlsx class ReportXLSXModel{ - path : String + ReportXLSXModel(Data data) : void + setPath() : void + getPath() : String + CreateXLSXReport() : void } ReportXLSXModel --> ReportControls 'модель данных для отображения в gui class ReportTableModel{} ReportTableModel --> ReportControls /'Общий инструментарий работы с базой данных '/ class BaseControls <>{ + connectToServer() : void + disconnectFromServer() : void + showBaseList() : void + selectCurrentBase() : void + showTables() : void } BaseControls --> AccessPane BaseControls --> BasePane /' получение данных из базы данных доступ к базе данных '/ class Base{ - access : Access - connection : Connection + setConnection(Connection connaction) : void + getConnaction() : Connaction + connect(Base b) : void + disconnect(Base b) : void ' запрос к базе, возвращает ответ + querry(String querry) : ResultSet } Base --> Data Base --> BaseControls enum Access{ - login : String - password : String - link : String } Access --> Base ' хранение и представление данных class Data{ - userlist : UserListModel - results : ArrayList - quizes : ArrayList } Data --> ReportTextModel Data --> ReportXLSXModel Data --> ReportTableModel /'формирование перечня пользователей - на основании тегов - на основании исходных перечней (из файла) '/ class UserListModel{ - userlist : ArrayList + getUsers() : ArrayList + setUsersByTag(TagModel tags) : void + setUsersFromFile(File file) : void } UserListModel --> Data enum User{ - id : int - login : String - mail : String } User --> UserListModel enum Result{ - id : int - quizid : int - userid : int - grade : double - time : Long } Result --> Data enum Quiz{ - id : int - name : String } Quiz --> Data class TagModel{ - tags : ArrayList + setTags(ArrayList tags) : void + getTags() : ArrayList + addTag(String tag) : void + removeTag(String tag) : void } TagModel --> TagControls TagModel --> UserListModel } @enduml