# koder95/emetrykant architecture

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

- Interactive diagram: https://gitdiagram.com/koder95/emetrykant
- Repository: https://github.com/koder95/emetrykant

## Overview

eMetrykant is a desktop application for reading and searching parish-register records. Its main workflow presents personal-data search suggestions and results from indexed records; a separate management workflow validates and edits index entries, then saves or discards changes. The graph also shows index loading and GitHub-based release checking/update as distinct capabilities. Source excerpts establish the query, persistence, startup, and release-check relationships; UI internals and update-task wiring are not sampled, so those connections are kept limited.

Main entry points: [`src/main/java/pl/koder95/eme/App.java`](https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/App.java) (JavaFX app), [`src/main/java/pl/koder95/eme/io/InMemoryIndexRepository.java`](https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/io/InMemoryIndexRepository.java) (In-memory index repository), [`src/main/java/pl/koder95/eme/application/PersonalDataQueryService.java`](https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/application/PersonalDataQueryService.java) (Personal-data query), [`src/main/java/pl/koder95/eme/fx/PersonalDataView.java`](https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/fx/PersonalDataView.java) (Personal-data view)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_presentation["Desktop presentation"]
  node_app["JavaFX app<br/>[App.java]"]
  node_personal_view["Personal-data view"]
  node_management_view["Index management UI"]
  node_management_factory["Management view factory"]
end

subgraph group_application["Application services"]
  node_query["Personal-data query"]
  node_index_management["Index management"]
  node_reload_service["Index reload"]
  node_context["Application context"]
end

subgraph group_records["Index and records"]
  node_analyzer["Cabinet analyzer"]
  node_index_source["Index list source"]
  node_index_repository[("In-memory index repository")]
  node_index_loader["Index loader<br/>[IndexLoader.java]"]
  node_index_writer["Index writer<br/>[IndexWriter.java]"]
  node_xml_source["XML index source"]
  node_xml_target["XML index target"]
  node_index_domain["Index records and books<br/>[Index.java]"]
end

subgraph group_updates["Release updates"]
  node_github_info["Release information"]
  node_github_controller["GitHub repository access"]
  node_update_task["Self-update task"]
end

node_user(("User"))
node_github[("GitHub")]
node_files[("Index XML files")]

node_user -->|"searches and views"| node_personal_view
node_user -->|"manages records"| node_management_view
node_app -->|"initializes"| node_context
node_app -->|"loads view"| node_personal_view
node_app -->|"provides service"| node_query
node_app -->|"provides service"| node_reload_service
node_app -->|"provides factory"| node_management_factory
node_management_factory -->|"creates view"| node_management_view
node_personal_view -->|"queries records"| node_query
node_personal_view -->|"requests reload"| node_reload_service
node_management_view -->|"edits records"| node_index_management
node_query -->|"queries and converts"| node_analyzer
node_query -->|"reads indices"| node_index_repository
node_query -->|"sets source"| node_index_source
node_index_source -->|"reads indices"| node_index_repository
node_reload_service -->|"reloads indices"| node_index_repository
node_index_management -->|"edits and persists"| node_index_repository
node_index_repository -->|"loads records"| node_index_loader
node_index_repository -->|"saves records"| node_index_writer
node_index_loader -->|"reads XML"| node_xml_source
node_index_writer -->|"writes XML"| node_xml_target
node_xml_source -->|"reads"| node_files
node_xml_target -->|"writes"| node_files
node_index_repository -->|"holds records"| node_index_domain
node_app -->|"checks release"| node_github_info
node_github_info -->|"selects repository"| node_github_controller
node_github_controller -->|"fetches release data"| node_github
node_app -->|"starts update"| node_update_task

click node_app "https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/App.java"
click node_personal_view "https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/fx/PersonalDataView.java"
click node_management_view "https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/fx/DataManagementView.java"
click node_management_factory "https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/fx/DataManagementViewFactory.java"
click node_query "https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/application/PersonalDataQueryService.java"
click node_index_management "https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/application/IndexManagementService.java"
click node_reload_service "https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/application/IndexReloadService.java"
click node_context "https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/bootstrap/ApplicationContext.java"
click node_analyzer "https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/core/SimpleCabinetAnalyzer.java"
click node_index_source "https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/core/IndexListDataSource.java"
click node_index_repository "https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/io/InMemoryIndexRepository.java"
click node_index_loader "https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/io/IndexLoader.java"
click node_index_writer "https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/io/IndexWriter.java"
click node_xml_source "https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/io/FileXmlIndexDataSource.java"
click node_xml_target "https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/io/FileXmlIndexDataTarget.java"
click node_index_domain "https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/domain/index/Index.java"
click node_github_info "https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/git/RepositoryInfo.java"
click node_github_controller "https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/git/GitHubRepositoryController.java"
click node_update_task "https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/au/SelfUpdateTask.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_personal_view,node_management_view,node_management_factory,node_user toneBlue
class node_query,node_index_management,node_reload_service,node_context,node_github,node_files toneAmber
class node_analyzer,node_index_source,node_index_repository,node_index_loader,node_index_writer,node_xml_source,node_xml_target,node_index_domain toneMint
class node_github_info,node_github_controller,node_update_task toneRose
```

## Components

### Desktop presentation

- [JavaFX app](https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/App.java): `src/main/java/pl/koder95/eme/App.java`
- [Personal-data view](https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/fx/PersonalDataView.java): `src/main/java/pl/koder95/eme/fx/PersonalDataView.java`
- [Index management UI](https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/fx/DataManagementView.java): `src/main/java/pl/koder95/eme/fx/DataManagementView.java`
- [Management view factory](https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/fx/DataManagementViewFactory.java): `src/main/java/pl/koder95/eme/fx/DataManagementViewFactory.java`

### Application services

- [Personal-data query](https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/application/PersonalDataQueryService.java): `src/main/java/pl/koder95/eme/application/PersonalDataQueryService.java`
- [Index management](https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/application/IndexManagementService.java): `src/main/java/pl/koder95/eme/application/IndexManagementService.java`
- [Index reload](https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/application/IndexReloadService.java): `src/main/java/pl/koder95/eme/application/IndexReloadService.java`
- [Application context](https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/bootstrap/ApplicationContext.java): `src/main/java/pl/koder95/eme/bootstrap/ApplicationContext.java`

### Index and records

- [Cabinet analyzer](https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/core/SimpleCabinetAnalyzer.java): `src/main/java/pl/koder95/eme/core/SimpleCabinetAnalyzer.java`
- [Index list source](https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/core/IndexListDataSource.java): `src/main/java/pl/koder95/eme/core/IndexListDataSource.java`
- [In-memory index repository](https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/io/InMemoryIndexRepository.java): `src/main/java/pl/koder95/eme/io/InMemoryIndexRepository.java`
- [Index loader](https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/io/IndexLoader.java): `src/main/java/pl/koder95/eme/io/IndexLoader.java`
- [Index writer](https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/io/IndexWriter.java): `src/main/java/pl/koder95/eme/io/IndexWriter.java`
- [XML index source](https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/io/FileXmlIndexDataSource.java): `src/main/java/pl/koder95/eme/io/FileXmlIndexDataSource.java`
- [XML index target](https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/io/FileXmlIndexDataTarget.java): `src/main/java/pl/koder95/eme/io/FileXmlIndexDataTarget.java`
- [Index records and books](https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/domain/index/Index.java): `src/main/java/pl/koder95/eme/domain/index/Index.java`

### Release updates

- [Release information](https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/git/RepositoryInfo.java): `src/main/java/pl/koder95/eme/git/RepositoryInfo.java`
- [GitHub repository access](https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/git/GitHubRepositoryController.java): `src/main/java/pl/koder95/eme/git/GitHubRepositoryController.java`
- [Self-update task](https://github.com/koder95/emetrykant/blob/master/src/main/java/pl/koder95/eme/au/SelfUpdateTask.java): `src/main/java/pl/koder95/eme/au/SelfUpdateTask.java`

### Other components

- **User**
- **GitHub**
- **Index XML files**

## Connections

- User → Personal-data view: searches and views
- User → Index management UI: manages records
- JavaFX app → Application context: initializes
- JavaFX app → Personal-data view: loads view
- JavaFX app → Personal-data query: provides service
- JavaFX app → Index reload: provides service
- JavaFX app → Management view factory: provides factory
- Management view factory → Index management UI: creates view
- Personal-data view → Personal-data query: queries records
- Personal-data view → Index reload: requests reload
- Index management UI → Index management: edits records
- Personal-data query → Cabinet analyzer: queries and converts
- Personal-data query → In-memory index repository: reads indices
- Personal-data query → Index list source: sets source
- Index list source → In-memory index repository: reads indices
- Index reload → In-memory index repository: reloads indices
- Index management → In-memory index repository: edits and persists
- In-memory index repository → Index loader: loads records
- In-memory index repository → Index writer: saves records
- Index loader → XML index source: reads XML
- Index writer → XML index target: writes XML
- XML index source → Index XML files: reads
- XML index target → Index XML files: writes
- In-memory index repository → Index records and books: holds records
- JavaFX app → Release information: checks release
- Release information → GitHub repository access: selects repository
- GitHub repository access → GitHub: fetches release data
- JavaFX app → Self-update task: starts update
