From 94728c270f02bd50278be3554f72bd3ae42bde28 Mon Sep 17 00:00:00 2001 From: Marcus van Elst Date: Sun, 5 Apr 2026 11:17:33 +0200 Subject: [PATCH] =?UTF-8?q?Optimierung:=20Konfigurationspakete=20koh=C3=A4?= =?UTF-8?q?renter=20zugeschnitten?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../validation/StartConfigurationValidator.java | 2 +- .../PropertiesConfigurationPortAdapter.java | 6 ++++-- .../adapter/out/configuration/package-info.java | 11 +++++++++-- .../validation/StartConfigurationValidatorTest.java | 2 +- .../umbenenner/application/config/package-info.java | 13 +++++++++++-- .../config/{ => startup}/StartConfiguration.java | 9 +++++++-- .../application/config/startup/package-info.java | 13 +++++++++++++ .../application/port/out/ConfigurationPort.java | 2 +- .../pdf/umbenenner/bootstrap/BootstrapRunner.java | 2 +- .../umbenenner/bootstrap/BootstrapRunnerTest.java | 2 +- 10 files changed, 49 insertions(+), 13 deletions(-) rename pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/config/{ => startup}/StartConfiguration.java (61%) create mode 100644 pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/config/startup/package-info.java diff --git a/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/bootstrap/validation/StartConfigurationValidator.java b/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/bootstrap/validation/StartConfigurationValidator.java index 0b1785c..80f9977 100644 --- a/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/bootstrap/validation/StartConfigurationValidator.java +++ b/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/bootstrap/validation/StartConfigurationValidator.java @@ -1,6 +1,6 @@ package de.gecheckt.pdf.umbenenner.adapter.out.bootstrap.validation; -import de.gecheckt.pdf.umbenenner.application.config.StartConfiguration; +import de.gecheckt.pdf.umbenenner.application.config.startup.StartConfiguration; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/configuration/PropertiesConfigurationPortAdapter.java b/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/configuration/PropertiesConfigurationPortAdapter.java index a32269e..fcbc695 100644 --- a/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/configuration/PropertiesConfigurationPortAdapter.java +++ b/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/configuration/PropertiesConfigurationPortAdapter.java @@ -14,12 +14,14 @@ import java.util.function.Function; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import de.gecheckt.pdf.umbenenner.application.config.StartConfiguration; +import de.gecheckt.pdf.umbenenner.application.config.startup.StartConfiguration; import de.gecheckt.pdf.umbenenner.application.port.out.ConfigurationPort; /** * Properties-based implementation of {@link ConfigurationPort}. - * AP-005: Loads configuration from config/application.properties with environment variable precedence. + *

+ * Loads configuration from config/application.properties with environment variable + * precedence for sensitive values like the API key. */ public class PropertiesConfigurationPortAdapter implements ConfigurationPort { diff --git a/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/configuration/package-info.java b/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/configuration/package-info.java index 6875d6e..720cc6e 100644 --- a/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/configuration/package-info.java +++ b/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/configuration/package-info.java @@ -1,5 +1,12 @@ /** - * Configuration adapters for outbound infrastructure access. - * Contains implementations of configuration loading from external sources. + * Configuration loading adapters. + *

+ * Contains implementations of the {@link de.gecheckt.pdf.umbenenner.application.port.out.ConfigurationPort} + * that load the bootstrap-layer {@link de.gecheckt.pdf.umbenenner.bootstrap.configuration.StartConfiguration} + * from external sources (e.g., properties files, environment variables). + *

+ * These adapters bridge the outbound port contract with concrete infrastructure + * (property file parsing, environment variable lookup) without leaking infrastructure + * details into the application or bootstrap layers. */ package de.gecheckt.pdf.umbenenner.adapter.out.configuration; \ No newline at end of file diff --git a/pdf-umbenenner-adapter-out/src/test/java/de/gecheckt/pdf/umbenenner/adapter/out/bootstrap/validation/StartConfigurationValidatorTest.java b/pdf-umbenenner-adapter-out/src/test/java/de/gecheckt/pdf/umbenenner/adapter/out/bootstrap/validation/StartConfigurationValidatorTest.java index 6cb8afe..f0c4b67 100644 --- a/pdf-umbenenner-adapter-out/src/test/java/de/gecheckt/pdf/umbenenner/adapter/out/bootstrap/validation/StartConfigurationValidatorTest.java +++ b/pdf-umbenenner-adapter-out/src/test/java/de/gecheckt/pdf/umbenenner/adapter/out/bootstrap/validation/StartConfigurationValidatorTest.java @@ -1,6 +1,6 @@ package de.gecheckt.pdf.umbenenner.adapter.out.bootstrap.validation; -import de.gecheckt.pdf.umbenenner.application.config.StartConfiguration; +import de.gecheckt.pdf.umbenenner.application.config.startup.StartConfiguration; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; diff --git a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/config/package-info.java b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/config/package-info.java index 8354e70..cd3547e 100644 --- a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/config/package-info.java +++ b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/config/package-info.java @@ -1,5 +1,14 @@ /** - * Configuration model types for the PDF Umbenenner application. - * Contains typed configuration objects representing startup parameters. + * Application-layer runtime configuration model. + *

+ * Contains only the minimal runtime configuration contract ({@link RuntimeConfiguration}) + * that the application layer actually depends on during batch document processing. + *

+ * This is intentionally small and focused: it includes only the parameters the + * application needs (e.g., maxPages), not the broader infrastructure configuration + * (paths, API keys, persistence settings, etc.) which are handled at the bootstrap layer. + *

+ * This separation follows hexagonal architecture principles by ensuring the application + * layer depends only on configuration values it actually uses. */ package de.gecheckt.pdf.umbenenner.application.config; \ No newline at end of file diff --git a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/config/StartConfiguration.java b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/config/startup/StartConfiguration.java similarity index 61% rename from pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/config/StartConfiguration.java rename to pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/config/startup/StartConfiguration.java index 3601322..9fbaa12 100644 --- a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/config/StartConfiguration.java +++ b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/config/startup/StartConfiguration.java @@ -1,10 +1,15 @@ -package de.gecheckt.pdf.umbenenner.application.config; +package de.gecheckt.pdf.umbenenner.application.config.startup; import java.net.URI; import java.nio.file.Path; /** * Typed immutable configuration model for PDF Umbenenner startup parameters. + *

+ * Contains all technical infrastructure and runtime configuration parameters + * loaded and validated at bootstrap time. This is a complete configuration model + * for the entire application startup, including paths, API settings, persistence, + * and operational parameters. */ public record StartConfiguration( Path sourceFolder, @@ -22,4 +27,4 @@ public record StartConfiguration( String logLevel, String apiKey ) -{ } \ No newline at end of file +{ } diff --git a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/config/startup/package-info.java b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/config/startup/package-info.java new file mode 100644 index 0000000..20c6554 --- /dev/null +++ b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/config/startup/package-info.java @@ -0,0 +1,13 @@ +/** + * Startup configuration model types. + *

+ * Contains the complete technical startup configuration model ({@link StartConfiguration}) + * that encompasses all infrastructure parameters, paths, API settings, and operational + * parameters required to initialize and run the application. + *

+ * This is separate from the minimal {@link de.gecheckt.pdf.umbenenner.application.config.RuntimeConfiguration} + * which represents only the configuration values the application layer actually depends on + * during batch processing. The startup configuration is the complete technical model used + * by bootstrap and adapter layers for initialization, validation, and infrastructure wiring. + */ +package de.gecheckt.pdf.umbenenner.application.config.startup; diff --git a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/ConfigurationPort.java b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/ConfigurationPort.java index 7410695..86cc4e2 100644 --- a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/ConfigurationPort.java +++ b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/ConfigurationPort.java @@ -1,6 +1,6 @@ package de.gecheckt.pdf.umbenenner.application.port.out; -import de.gecheckt.pdf.umbenenner.application.config.StartConfiguration; +import de.gecheckt.pdf.umbenenner.application.config.startup.StartConfiguration; /** * Outbound port for configuration access. diff --git a/pdf-umbenenner-bootstrap/src/main/java/de/gecheckt/pdf/umbenenner/bootstrap/BootstrapRunner.java b/pdf-umbenenner-bootstrap/src/main/java/de/gecheckt/pdf/umbenenner/bootstrap/BootstrapRunner.java index 57bc6d9..1e6b564 100644 --- a/pdf-umbenenner-bootstrap/src/main/java/de/gecheckt/pdf/umbenenner/bootstrap/BootstrapRunner.java +++ b/pdf-umbenenner-bootstrap/src/main/java/de/gecheckt/pdf/umbenenner/bootstrap/BootstrapRunner.java @@ -21,7 +21,7 @@ import de.gecheckt.pdf.umbenenner.adapter.out.sqlite.SqliteProcessingAttemptRepo import de.gecheckt.pdf.umbenenner.adapter.out.sqlite.SqliteSchemaInitializationAdapter; import de.gecheckt.pdf.umbenenner.adapter.out.sqlite.SqliteUnitOfWorkAdapter; import de.gecheckt.pdf.umbenenner.application.config.RuntimeConfiguration; -import de.gecheckt.pdf.umbenenner.application.config.StartConfiguration; +import de.gecheckt.pdf.umbenenner.application.config.startup.StartConfiguration; import de.gecheckt.pdf.umbenenner.application.port.in.BatchRunOutcome; import de.gecheckt.pdf.umbenenner.application.port.in.BatchRunProcessingUseCase; import de.gecheckt.pdf.umbenenner.application.port.out.ConfigurationPort; diff --git a/pdf-umbenenner-bootstrap/src/test/java/de/gecheckt/pdf/umbenenner/bootstrap/BootstrapRunnerTest.java b/pdf-umbenenner-bootstrap/src/test/java/de/gecheckt/pdf/umbenenner/bootstrap/BootstrapRunnerTest.java index 7c845bc..68fbce3 100644 --- a/pdf-umbenenner-bootstrap/src/test/java/de/gecheckt/pdf/umbenenner/bootstrap/BootstrapRunnerTest.java +++ b/pdf-umbenenner-bootstrap/src/test/java/de/gecheckt/pdf/umbenenner/bootstrap/BootstrapRunnerTest.java @@ -3,7 +3,7 @@ package de.gecheckt.pdf.umbenenner.bootstrap; import de.gecheckt.pdf.umbenenner.adapter.in.cli.SchedulerBatchCommand; import de.gecheckt.pdf.umbenenner.adapter.out.bootstrap.validation.InvalidStartConfigurationException; import de.gecheckt.pdf.umbenenner.adapter.out.bootstrap.validation.StartConfigurationValidator; -import de.gecheckt.pdf.umbenenner.application.config.StartConfiguration; +import de.gecheckt.pdf.umbenenner.application.config.startup.StartConfiguration; import de.gecheckt.pdf.umbenenner.application.port.in.BatchRunOutcome; import de.gecheckt.pdf.umbenenner.application.port.in.BatchRunProcessingUseCase; import de.gecheckt.pdf.umbenenner.application.port.out.ConfigurationPort;