Projekt Episko 0.1 Help

Grobdesign

Übersicht

Projekt: Projekt Episko
    Inkrement: 4
Autor: Simon Blum, Ben Oeckl, Paul Stöckle
Datum: 05.12.2024
Zuletzt geändert:
    von: Simon Blum
    am: 24.01.2025
Version: 2
Prüfer: Max Rodler
Letzte Freigabe:
    durch: Max Rodler
    am: 24.01.2025

Changelog

Datum

Verfasser

Kurzbeschreibung

05.12.2024

Simon Blum

Initiales Erstellen und Verfassen

24.01.2025

Simon Blum

Hinzufügen von Paketen/Modulen

Distribution List

Klassendiagramm

Class diagrammdatalogicstatisticsfrontendMetadatauuid : Uuiddirectory : Pathtitle : Stringdescription : Stringrepository_url: Stringcreated : DateTimeupdated : DateTime--Metadata will be constructed using a MetadataBuilderwhich has been left out for clarityCategoryid: i32name: StringLanguageid: i32name: Stringversion: StringIDEid: i32name: StringBuildSystemid: i32name: Stringversion: StringConfigdirectories_to_load: List<Path>files_to_load: List<Path>database_directory: PathConfigHandlerconfig_file_location: Pathload_config(): Result<Config>add_saved_file(file: Path): Result<void>add_saved_directory(dir: Path): Result<void>ConfigControllerMetadataHandlercached_paths: HashSet<Path>init(db_handler: DatabaseHandler): MetadataHandlercreate_metadata(metadata: Metadata): Result<Metadata>Createload_metadata(file: Path): Result<Metadata>search_directory(dir: Path): List<Metadata>load_cached_metadata(): Result<List<Metadata>>search_metadata(query: String): Result<List<Metadata>>Readupdate_metadata(metadata: Metadata): Result<Metadata>Updatedelete_metadata(id: Uuid): Result<void>Delete--return value from load_metadata/search_directory isnot always neededDatabaseHandlerdb_connection: DatabaseConnectioninit(path_to_db: Path): Result<DatabaseHandler>cache_metadata(metadata: Metadata): Result<Uuid>get_all_metadata(): Result<List<Metadata>>filter_metadata(filter: Map<Any, Any>): Result<List<Metadata>>get_metadata_by_id(id: Uuid) : Result<Option<Metadata>>update_entry(metadata: Metadata): Result<Metadata>delete_entry(id: Uuid): Result<Uuid>FileSystemHandlerwrite_manifest(file: Path): Result<Void>read_manifest(file: Path): Result<Metadata>delete_manifest(file: Path): Result<Uuid>search_directory(dir: Path): Result<List<Path>>StatisticHandlergenerate_statistics(metadata: List<Metadata>): StatisticsStatisticsprojects_by_language: Map<Language, Int>projects_by_ide: Map<Ide, Int>projects_by_category: Map<String, Int>projects_by_build_system: Map<BuildSystem, Int>number_of_projects: IntAppinit() : Result<App>Exposed to frontendcreate_metadata(metadata: Metadata): Result<Metadata>Create .-- "retrieve" from cacheretrieve_all_metadata(): Result<List<Metadata>>retrieve_searched_metadata(query: String): Result<List<Metadata>>retrieve_filtered_metadata(filter: Map<Any, Any>): Result<List<Metadata>>-- "load" from filessearch_directory(dir: Path, should_save: boolean): Result<List<Metadata>>load_file(file: Path, should_save: boolean): Result<Metadata>Readupdate_metadata(metadata: Metadata): Result<Metadata>Updatedelete_metadata(id: Uuid): Result<Uuid>Deleteretrieve_statistics(): StatisticsStatisticscategories*0..5languages**preferred_ide*1build_system**config11db_handler11fs_handler11cached_metadata*1generated_statistics11metadata_handler11statistics_handler11config_controller11By default are parameters are classifiedas "in". The data/logic/frontend packages do seem like they could resemble aclassic model/view/controller architecture. However, since they arenot implemented as such the wording has been purposefully avoided. 

Sequenzdiagramme

Die Sequenzdiagramme basieren auf den Use-Cases und sind dementsprechend aufgeteilt.

U1.1

UserUserGuiGuiAppAppConfigControllerMetadataHandlerFileSystemHandlerDatabaseHandlerManifestFileManifestFileConfigFileConfigFileCacheCacheStart Applicationinit()init()ConfigControllerload_config()ConfigControllerget_db_location()db_locationinit(dbLocation)DatabaseHandlerDatabaseHandlerinit(dbHandler)MetadataHandlerFileSystemHandlerMetadataHandlerload_cached_metadata()get_all_metadata()select *QueryResultResult<List<Metadata>>loop[for each retrieved metadata]validate ⋔:cached_metadataResult<void>get_saved_files()saved_files: List<Path>loop[for each saved_file]load_file(filePath)if file_path not in cached_pathsLoadFile ⋔Result<void>get_saved_directories()saved_directories: List<Path>loop[for each saved_directory]search_directory(dir)search_directory(dir)List<Path>loop[for each received path]if file_path not in cached_pathsLoadFile ⋔Result<void>get_cached_metadata()List<Metadata>List<Metadata>StatisticGeneration ⋔

U1.2

UserUserGuiGuiAppAppMetadataHandlerMetadataHandlerFileSystemHandlerFileSystemHandlerDatabaseHandlerDatabaseHandlerManifestFileManifestFileCacheCacheCreate Metadatacreate_metadata(..)create_metadata(..)cache_metadata(..)insert entryUuidget_metadata_by_id(..)select with idMetadataMetadatawrite_manifest(..)create fileResult<void>MetadataMetadataDisplay MetadataStatisticGeneration ⋔

U1.3

UserUserGuiGuiAppAppMetadataHandlerMetadataHandlerFileSystemHandlerFileSystemHandlerDatabaseHandlerDatabaseHandlerManifestFileManifestFileCacheCacheUpdate Metadataupdate_metadata(..)update_metadata(..)update_entry(..)update entryUuidget_metadata_by_id(..)select with idMetadataMetadatawrite_manifest(..)update fileResult<void>MetadataMetadataDisplay MetadataStatisticGeneration ⋔

U1.4

UserUserGuiGuiAppAppMetadataHandlerMetadataHandlerFileSystemHandlerFileSystemHandlerDatabaseHandlerDatabaseHandlerManifestFileManifestFileCacheCacheDelete Metadatadelete_metadata(..)delete_metadata(..)delete_entry(..)delete entryResult<void>Result<void>delete_manifest(..)delete fileResult<void>Result<void>Result<void>Display ResultStatisticGeneration ⋔

U2.1

UserUserGuiGuiAppAppMetadataHandlerMetadataHandlerConfigControllerConfigControllerConfigFileConfigFileEnter FilePathSave?should_saveload_file(filePath, should_save)load_metadata(filePath)load_file ⋔if should_saveadd_saved_file(filePath)save_config()Result<void>Result<Metadata>Result<Metadata>Display MetadataStatisticGeneration ⋔

U2.2

UserUserGuiGuiAppAppMetadataHandlerMetadataHandlerConfigControllerConfigControllerFileSystemHandlerFileSystemHandlerDatabaseHandlerDatabaseHandlerManifestFileManifestFileConfigFileConfigFileCacheCacheEnter DirectorySave?should_savesearch_directory(directory, should_save)search_metadata(directory)search_directory(directory)Result<List<Path>>loop[for each path received]LoadFile ⋔if should_saveadd_saved_directory(directory)save_config()Result<void>Result<List<Metadata>>Result«Metadata»Display MetadataStatisticGeneration ⋔

U3.1

UserUserGuiGuiAppAppMetadataHandlerMetadataHandlerDatabaseHandlerDatabaseHandlerCacheCacheenter searchretrieve_searched_metadata(query)search_metadata(query)create filter with querysearch_metadata(filter)select where filter appliesQueryResultResult<List<Metadata>>Result<List<MetadataHandler>>Result<List<MetadataHandler>>display result

U3.2

UserUserGuiGuiAppAppMetadataHandlerMetadataHandlerDatabaseHandlerDatabaseHandlerCacheCacheselect filtersretrieve_filtered_metadata(query)filter_metadata(query)search_metadata(filter)select where filter appliesQueryResultResult<List<Metadata>>Result<List<MetadataHandler>>Result<List<MetadataHandler>>display result

U3.3

UserUserGuiGuiAppAppMetadataHandlerMetadataHandlerStatisticHandlerStatisticHandlerstart applicationU1.1 ⋔StatisticGenerationget_cached_metadata()cached_metadatagenerate_statistics(cachedMetadata)generated_statisticsopen statistics pageretrieve_statistics()get_generated_statistics()generated_statisticsStatisticsdisplay statistics

Anforderungstracing

Struktur

Die Anforderungsverfolgung ist aktuell nach folgender Struktur aufgebaut:

[Use Case] -> [Anforderung] -> [Klassenattribut]

In Zukunft soll diese noch in ein passendes Diagramm überführt werden.

Verfolgung

UC1.1 -> FA1.1.1 -> App.retrieve_all_metadata()

UC1.1 -> FA1.1.2 -> FileSystemHandler.read_manifest()

UC1.2 -> FA1.2.1 -> App.create_metadata(), MetadataHandler.create_metadata(), DatabaseHandler.update_entry() FileSystemHandler.write_manifest()

UC1.2 -> FA1.2.2 -> FileSystemHandler.write_manifest()

UC1.2 -> FA1.2.3 -> DatabaseHandler.cache_metadata()

UC1.3 -> FA1.3.1 -> App.update_metadata()

UC1.3 -> FA1.3.2 -> MetadataHandler.update_metadata(), DatabaseHandler.update_entry()

UC1.3 -> FA1.3.3 -> MetadataHandler.load_metadata(), MetadataHandler.search_directory(), FileSystemHandler.read_manifest()

UC1.4 -> FA1.4.1 -> App.delete_metadata, MetadataHandler.delete_metadata, FileSystemHandler.delete_manifest()

UC1.4 -> FA1.4.2 -> DatabaseHandler.delete_entry(),

UC1.4 -> FA1.4.3 -> metadata_handler.load_metadata(), MetadataHandler.search_directory(), MetadataHandler.delete_metadata, DatabaseHandler.delete_entry()

UC2.1 -> FA2.1.1 -> App.loadFile, ConfigController.add_saved_file()

UC2.1 -> FA2.1.2 -> Siehe FA1.1.2

UC2.1 -> FA2.1.3 -> siehe FA1.2.3

UC2.1 -> FA2.1.4 -> App.search_directory(), ConfigController.add_saved_directory()

UC2.1 -> FA2.1.5 -> MetadataHandler.search_directory(), FileSystemHandler.search_directory()

UC2.2 -> FA2.2.1 -> Siehe FA2.1.4

UC2.2 -> FA2.2.2 -> Siehe FA2.1.5

UC2.2 -> FA2.2.3 -> MetadataHandler.load_metadata(), MetadataHandler.update_metadata(), DatabaseHandler.update_entry()

UC2.2 -> FA2.2.4 -> Siehe FA2.1.5

UC2.2 -> FA2.2.5 -> Siehe FA2.1.5

UC3.1 -> FA3.1.1 -> MetadataHandler.search_metadata()

UC3.1 -> FA3.1.2 -> App.retrieve_searched_metadata() - Input der Methode stellt Nutzereingabe da

UC3.1 -> FA3.1.3 -> App.retrieve_searched_metadata() - Output Methode wird nutzer angezeigt

UC3.2 -> FA3.2.1 -> MetadataHandler.filter_metadata()

UC3.2 -> FA3.2.2 -> App.retrieve_filtered_metadata() - Input der Methode stellt Nutzereingabe da

UC3.2 -> FA3.2.3 -> App.retrieve_filtered_metadata() - Output Methode wird nutzer angezeigt

UC3.3 -> FA3.3.1 -> StatisticsController.generate_statistics()

UC3.3 -> FA3.3.2 -> StatisticsController.retrieve_statistics()

Last modified: 03 April 2025