# canny-seiji/unimatrix architecture

> Architecture diagram of the GitHub repository canny-seiji/unimatrix, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/canny-seiji/unimatrix
- Repository: https://github.com/canny-seiji/unimatrix

## Overview

UniMatrix is a desktop exam-scheduling application for managing academic resources and building, editing, organizing, and reviewing exam schedules. The principal workflow runs from schedule-management views through manual or generated planning, rule validation, and persistence; users can also organize schedule files, inspect dashboard summaries, and export schedules as PDFs. The graph reflects the sampled sources and source-index references; the README is empty, and some subsystem links remain unverified because their implementations were not excerpted.

Main entry points: [`src/main/java/com/unimatrix/service/ScheduleEditorService.java`](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/service/ScheduleEditorService.java) (Schedule editor), [`src/main/java/com/unimatrix/view/ManageSchedulesPanel.java`](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/view/ManageSchedulesPanel.java) (Schedule management), [`src/main/java/com/unimatrix/service/WorkspaceService.java`](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/service/WorkspaceService.java) (Workspace and trash), [`src/main/java/com/unimatrix/dao/ExamScheduleDAO.java`](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/dao/ExamScheduleDAO.java) (Exam data access)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Desktop interface"]
  node_app["Application startup<br/>[App.java]"]
  node_login["Login view<br/>[LoginView.java]"]
  node_dashboard["Main dashboard"]
  node_dashdata["Dashboard summaries"]
  node_scheduleui["Schedule management"]
  node_manualui["Manual scheduling"]
  node_autoui["Automatic scheduling"]
  node_overview["Schedule overview"]
  node_manage["Data management"]
  node_background["Background tasks"]
  node_theme["UI theme"]
  node_account["Account management<br/>[AccountPanel.java]"]
end

subgraph group_planning["Schedule planning"]
  node_generator["Scheduling engine"]
  node_planner["Explicit planner"]
  node_rules["Planning rules<br/>[PlanningRules.java]"]
  node_editor["Schedule editor"]
  node_validator["Schedule validation"]
  node_history["Schedule history"]
  node_pdf["PDF export"]
end

subgraph group_data["Persistence and workspace"]
  node_workspace["Workspace and trash"]
  node_database[("MySQL database")]
  node_connection["Database connections"]
  node_transactions["Transactions<br/>[Transactions.java]"]
  node_entitydao["Catalog data access<br/>[EntityDataDAO.java]"]
  node_examdao["Exam data access"]
  node_folders["Schedule folders"]
end

subgraph group_domain["Scheduling domain"]
  node_schedulemodel["Schedule document"]
  node_exammodel["Exam assignment<br/>[ExamSchedule.java]"]
  node_catalog["Course and resource models<br/>[Course.java]"]
  node_times["Exam time rules<br/>[ExamTimes.java]"]
end

node_user(("Staff user"))

node_user -->|"signs in"| node_login
node_app -->|"opens"| node_login
node_user -.->|"uses"| node_dashboard
node_dashboard -.->|"loads summaries"| node_dashdata
node_dashdata -->|"loads exams"| node_examdao
node_dashdata -.->|"reads counts"| node_database
node_user -.->|"manages schedules"| node_scheduleui
node_scheduleui -->|"opens manual editor"| node_manualui
node_scheduleui -->|"opens generator"| node_autoui
node_manualui -.->|"edits schedules"| node_editor
node_autoui -.->|"requests generation"| node_generator
node_generator -->|"delegates planning"| node_planner
node_editor -.->|"validates edits"| node_validator
node_editor -.->|"checks constraints"| node_rules
node_editor -->|"loads catalog"| node_entitydao
node_editor -->|"reads and writes"| node_database
node_editor -->|"uses transactions"| node_transactions
node_editor -.->|"records revisions"| node_history
node_rules -->|"checks intervals"| node_times
node_rules -->|"checks assignments"| node_exammodel
node_overview -->|"loads schedules"| node_examdao
node_scheduleui -.->|"shows schedules"| node_overview
node_scheduleui -.->|"organizes files"| node_workspace
node_workspace -->|"captures before moves"| node_history
node_workspace -->|"uses transactions"| node_transactions
node_workspace -->|"updates workspace"| node_database
node_scheduleui -.->|"manages folders"| node_folders
node_scheduleui -.->|"exports schedules"| node_pdf
node_pdf -.->|"renders document"| node_schedulemodel
node_pdf -.->|"renders exams"| node_exammodel
node_entitydao -.->|"opens connection"| node_connection
node_examdao -->|"opens connection"| node_connection
node_connection -->|"connects to"| node_database
node_examdao -->|"saves through"| node_editor
node_editor -->|"builds documents"| node_schedulemodel
node_schedulemodel -->|"contains assignments"| node_exammodel
node_exammodel -->|"references course"| node_catalog
node_user -.->|"maintains data"| node_manage
node_user -.->|"manages account"| node_account
node_background -.->|"supports tasks"| node_scheduleui
node_dashboard -.->|"uses styling"| node_theme

click node_app "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/App.java"
click node_login "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/view/LoginView.java"
click node_dashboard "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/view/MainDashboardView.java"
click node_dashdata "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/view/DatabaseDashboardProvider.java"
click node_scheduleui "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/view/ManageSchedulesPanel.java"
click node_manualui "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/view/ManualSchedulePanel.java"
click node_autoui "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/view/AutoGeneratePanel.java"
click node_overview "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/view/ScheduleOverview.java"
click node_manage "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/view/ManageDataPanel.java"
click node_background "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/view/BackgroundTask.java"
click node_theme "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/view/theme/UniMatrixTheme.java"
click node_generator "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/service/SchedulingEngine.java"
click node_planner "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/service/ExplicitPlanner.java"
click node_rules "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/service/PlanningRules.java"
click node_editor "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/service/ScheduleEditorService.java"
click node_validator "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/service/ScheduleValidator.java"
click node_history "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/service/ScheduleHistory.java"
click node_pdf "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/service/SchedulePdfExporter.java"
click node_workspace "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/service/WorkspaceService.java"
click node_connection "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/dao/DatabaseConnection.java"
click node_transactions "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/dao/Transactions.java"
click node_entitydao "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/dao/EntityDataDAO.java"
click node_examdao "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/dao/ExamScheduleDAO.java"
click node_schedulemodel "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/model/ScheduleDocument.java"
click node_exammodel "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/model/ExamSchedule.java"
click node_catalog "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/model/Course.java"
click node_times "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/service/ExamTimes.java"
click node_account "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/view/AccountPanel.java"
click node_folders "https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/dao/ScheduleFolderDAO.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_login,node_dashboard,node_dashdata,node_scheduleui,node_manualui,node_autoui,node_overview,node_manage,node_background,node_theme,node_account,node_user toneBlue
class node_generator,node_planner,node_rules,node_editor,node_validator,node_history,node_pdf toneAmber
class node_workspace,node_database,node_connection,node_transactions,node_entitydao,node_examdao,node_folders toneMint
class node_schedulemodel,node_exammodel,node_catalog,node_times toneRose
```

## Components

### Desktop interface

- [Application startup](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/App.java): `src/main/java/com/unimatrix/App.java`
- [Login view](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/view/LoginView.java): `src/main/java/com/unimatrix/view/LoginView.java`
- [Main dashboard](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/view/MainDashboardView.java): `src/main/java/com/unimatrix/view/MainDashboardView.java`
- [Dashboard summaries](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/view/DatabaseDashboardProvider.java): `src/main/java/com/unimatrix/view/DatabaseDashboardProvider.java`
- [Schedule management](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/view/ManageSchedulesPanel.java): `src/main/java/com/unimatrix/view/ManageSchedulesPanel.java`
- [Manual scheduling](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/view/ManualSchedulePanel.java): `src/main/java/com/unimatrix/view/ManualSchedulePanel.java`
- [Automatic scheduling](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/view/AutoGeneratePanel.java): `src/main/java/com/unimatrix/view/AutoGeneratePanel.java`
- [Schedule overview](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/view/ScheduleOverview.java): `src/main/java/com/unimatrix/view/ScheduleOverview.java`
- [Data management](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/view/ManageDataPanel.java): `src/main/java/com/unimatrix/view/ManageDataPanel.java`
- [Background tasks](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/view/BackgroundTask.java): `src/main/java/com/unimatrix/view/BackgroundTask.java`
- [UI theme](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/view/theme/UniMatrixTheme.java): `src/main/java/com/unimatrix/view/theme/UniMatrixTheme.java`
- [Account management](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/view/AccountPanel.java): `src/main/java/com/unimatrix/view/AccountPanel.java`

### Schedule planning

- [Scheduling engine](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/service/SchedulingEngine.java): `src/main/java/com/unimatrix/service/SchedulingEngine.java`
- [Explicit planner](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/service/ExplicitPlanner.java): `src/main/java/com/unimatrix/service/ExplicitPlanner.java`
- [Planning rules](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/service/PlanningRules.java): `src/main/java/com/unimatrix/service/PlanningRules.java`
- [Schedule editor](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/service/ScheduleEditorService.java): `src/main/java/com/unimatrix/service/ScheduleEditorService.java`
- [Schedule validation](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/service/ScheduleValidator.java): `src/main/java/com/unimatrix/service/ScheduleValidator.java`
- [Schedule history](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/service/ScheduleHistory.java): `src/main/java/com/unimatrix/service/ScheduleHistory.java`
- [PDF export](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/service/SchedulePdfExporter.java): `src/main/java/com/unimatrix/service/SchedulePdfExporter.java`

### Persistence and workspace

- [Workspace and trash](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/service/WorkspaceService.java): `src/main/java/com/unimatrix/service/WorkspaceService.java`
- **MySQL database**
- [Database connections](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/dao/DatabaseConnection.java): `src/main/java/com/unimatrix/dao/DatabaseConnection.java`
- [Transactions](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/dao/Transactions.java): `src/main/java/com/unimatrix/dao/Transactions.java`
- [Catalog data access](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/dao/EntityDataDAO.java): `src/main/java/com/unimatrix/dao/EntityDataDAO.java`
- [Exam data access](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/dao/ExamScheduleDAO.java): `src/main/java/com/unimatrix/dao/ExamScheduleDAO.java`
- [Schedule folders](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/dao/ScheduleFolderDAO.java): `src/main/java/com/unimatrix/dao/ScheduleFolderDAO.java`

### Scheduling domain

- [Schedule document](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/model/ScheduleDocument.java): `src/main/java/com/unimatrix/model/ScheduleDocument.java`
- [Exam assignment](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/model/ExamSchedule.java): `src/main/java/com/unimatrix/model/ExamSchedule.java`
- [Course and resource models](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/model/Course.java): `src/main/java/com/unimatrix/model/Course.java`
- [Exam time rules](https://github.com/canny-seiji/unimatrix/blob/main/src/main/java/com/unimatrix/service/ExamTimes.java): `src/main/java/com/unimatrix/service/ExamTimes.java`

### Other components

- **Staff user**

## Connections

- Staff user → Login view: signs in
- Application startup → Login view: opens (evidence: `src/main/java/com/unimatrix/App.java`)
- Staff user → Main dashboard: uses
- Main dashboard → Dashboard summaries: loads summaries
- Dashboard summaries → Exam data access: loads exams (evidence: `src/main/java/com/unimatrix/view/DatabaseDashboardProvider.java`)
- Dashboard summaries → MySQL database: reads counts
- Staff user → Schedule management: manages schedules
- Schedule management → Manual scheduling: opens manual editor (evidence: `src/main/java/com/unimatrix/view/ManageSchedulesPanel.java`)
- Schedule management → Automatic scheduling: opens generator (evidence: `src/main/java/com/unimatrix/view/ManageSchedulesPanel.java`)
- Manual scheduling → Schedule editor: edits schedules (evidence: `src/main/java/com/unimatrix/view/ManualSchedulePanel.java`)
- Automatic scheduling → Scheduling engine: requests generation
- Scheduling engine → Explicit planner: delegates planning (evidence: `src/main/java/com/unimatrix/service/SchedulingEngine.java`)
- Schedule editor → Schedule validation: validates edits (evidence: `src/main/java/com/unimatrix/service/ScheduleEditorService.java`)
- Schedule editor → Planning rules: checks constraints (evidence: `src/main/java/com/unimatrix/service/ScheduleEditorService.java`)
- Schedule editor → Catalog data access: loads catalog (evidence: `src/main/java/com/unimatrix/service/ScheduleEditorService.java`)
- Schedule editor → MySQL database: reads and writes (evidence: `src/main/java/com/unimatrix/service/ScheduleEditorService.java`)
- Schedule editor → Transactions: uses transactions (evidence: `src/main/java/com/unimatrix/service/ScheduleEditorService.java`)
- Schedule editor → Schedule history: records revisions (evidence: `src/main/java/com/unimatrix/service/ScheduleEditorService.java`)
- Planning rules → Exam time rules: checks intervals (evidence: `src/main/java/com/unimatrix/service/PlanningRules.java`)
- Planning rules → Exam assignment: checks assignments (evidence: `src/main/java/com/unimatrix/service/PlanningRules.java`)
- Schedule overview → Exam data access: loads schedules (evidence: `src/main/java/com/unimatrix/view/ScheduleOverview.java`)
- Schedule management → Schedule overview: shows schedules (evidence: `src/main/java/com/unimatrix/view/ManageSchedulesPanel.java`)
- Schedule management → Workspace and trash: organizes files (evidence: `src/main/java/com/unimatrix/view/ManageSchedulesPanel.java`)
- Workspace and trash → Schedule history: captures before moves (evidence: `src/main/java/com/unimatrix/service/WorkspaceService.java`)
- Workspace and trash → Transactions: uses transactions (evidence: `src/main/java/com/unimatrix/service/WorkspaceService.java`)
- Workspace and trash → MySQL database: updates workspace (evidence: `src/main/java/com/unimatrix/service/WorkspaceService.java`)
- Schedule management → Schedule folders: manages folders (evidence: `src/main/java/com/unimatrix/view/ManageSchedulesPanel.java`)
- Schedule management → PDF export: exports schedules (evidence: `src/main/java/com/unimatrix/view/ManageSchedulesPanel.java`)
- PDF export → Schedule document: renders document (evidence: `src/main/java/com/unimatrix/service/SchedulePdfExporter.java`)
- PDF export → Exam assignment: renders exams (evidence: `src/main/java/com/unimatrix/service/SchedulePdfExporter.java`)
- Catalog data access → Database connections: opens connection (evidence: `src/main/java/com/unimatrix/dao/EntityDataDAO.java`)
- Exam data access → Database connections: opens connection (evidence: `src/main/java/com/unimatrix/dao/ExamScheduleDAO.java`)
- Database connections → MySQL database: connects to (evidence: `src/main/java/com/unimatrix/dao/DatabaseConnection.java`)
- Exam data access → Schedule editor: saves through (evidence: `src/main/java/com/unimatrix/dao/ExamScheduleDAO.java`)
- Schedule editor → Schedule document: builds documents (evidence: `src/main/java/com/unimatrix/service/ScheduleEditorService.java`)
- Schedule document → Exam assignment: contains assignments (evidence: `src/main/java/com/unimatrix/model/ScheduleDocument.java`)
- Exam assignment → Course and resource models: references course (evidence: `src/main/java/com/unimatrix/model/ExamSchedule.java`)
- Staff user → Data management: maintains data
- Staff user → Account management: manages account
- Background tasks → Schedule management: supports tasks (evidence: `src/main/java/com/unimatrix/view/ManageSchedulesPanel.java`)
- Main dashboard → UI theme: uses styling (evidence: `src/main/java/com/unimatrix/view/DashboardPreview.java`)
