From aa067a3165d9bb4688596ac7075b0cd0b98d32ae Mon Sep 17 00:00:00 2001 From: Marcus van Elst Date: Mon, 20 Apr 2026 20:31:15 +0200 Subject: [PATCH] =?UTF-8?q?M11=20vollst=C3=A4ndig=20abgeschlossen=20(AP-00?= =?UTF-8?q?1=20bis=20AP-007)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - AP-001: Kernobjekte und Port-Verträge (ModelCatalog-Port, sealed Result-Typen, ApiKeyOrigin, GUI-Modell- und Meldungs-Records) - AP-002: Provider-ComboBox, exklusiver Providerbereich, zustandsbewahrender Providerwechsel - AP-003: HTTP-Adapter für Modellabruf (Claude, OpenAI-kompatibel) mit vollständigem Error-Mapping und Dispatcher im Bootstrap - AP-004: Automatischer Modellabruf bei Providerwechsel, Aktion "Modelle neu laden", Umschaltung zwischen Modell-ComboBox und Modell-Textfeld, Worker-Thread-Kapselung - AP-005: Automatische Editorvalidierung (Pflichtfelder, Warnschwellen max.text.characters, Plausibilitätshinweise max.pages, API-Key-Herkunftsauflösung mit Vorrangregel) - AP-006: Zentraler Meldungsbereich mit vier Severity-Stufen, feldnahe rote Fehlermeldungen, API-Key-Herkunftsanzeige - AP-007: Integrations- und Regressionstests, Timeout-Mapping-Tests, Replace-Semantik für wiederholte Modellabruf-Meldungen Hexagonale Architektur eingehalten, Application- und Domain-Schicht bleiben infrastrukturfrei. Threadingmodell konsequent umgesetzt. Naming-Regel und JavaDoc-Standard durchgängig beachtet. Co-Authored-By: Claude Haiku 4.5 --- pdf-umbenenner-adapter-in-gui/pom.xml | 5 + .../gui/GuiConfigurationEditorWorkspace.java | 886 +++++++++++++++--- .../in/gui/GuiModelCatalogCoordinator.java | 277 ++++++ .../adapter/in/gui/GuiStartupContext.java | 43 +- .../AiProviderFamilyStringConverter.java | 63 ++ .../gui/editor/GuiEditorValidationResult.java | 93 ++ .../in/gui/editor/GuiFieldFinding.java | 68 ++ .../in/gui/editor/GuiManualModelEntry.java | 45 + .../in/gui/editor/GuiMessageEntry.java | 68 ++ .../in/gui/editor/GuiMessageSeverity.java | 71 ++ .../in/gui/editor/GuiModelFieldContainer.java | 190 ++++ .../adapter/in/gui/editor/GuiModelSource.java | 54 ++ .../gui/editor/GuiVisibleProviderSection.java | 98 ++ .../adapter/in/gui/editor/package-info.java | 41 +- .../adapter/in/gui/GuiAdapterSmokeTest.java | 4 +- .../in/gui/GuiEditorFieldBindingTest.java | 4 +- .../in/gui/GuiEditorIntegrationTest.java | 8 +- .../in/gui/GuiEditorRegressionSmokeTest.java | 20 +- .../in/gui/GuiEditorValidationSmokeTest.java | 456 +++++++++ .../in/gui/GuiMessageAreaSmokeTest.java | 710 ++++++++++++++ .../in/gui/GuiModelCatalogSmokeTest.java | 639 +++++++++++++ .../in/gui/GuiProviderSelectionSmokeTest.java | 452 +++++++++ .../gui/GuiUnsavedChangesGuardSmokeTest.java | 8 +- .../editor/GuiEditorValidationResultTest.java | 114 +++ .../in/gui/editor/GuiFieldFindingTest.java | 66 ++ .../gui/editor/GuiManualModelEntryTest.java | 53 ++ .../in/gui/editor/GuiMessageEntryTest.java | 69 ++ .../in/gui/editor/GuiMessageSeverityTest.java | 38 + .../in/gui/editor/GuiModelSourceTest.java | 28 + .../editor/GuiVisibleProviderSectionTest.java | 117 +++ .../ClaudeModelCatalogAdapter.java | 315 +++++++ .../OpenAiCompatibleModelCatalogAdapter.java | 309 ++++++ .../out/modelcatalog/package-info.java | 13 + .../EnvironmentApiKeyResolutionAdapter.java | 109 +++ .../adapter/out/validation/package-info.java | 8 + .../ClaudeModelCatalogAdapterTest.java | 258 +++++ ...enAiCompatibleModelCatalogAdapterTest.java | 254 +++++ ...nvironmentApiKeyResolutionAdapterTest.java | 207 ++++ .../out/modelcatalog/AiModelCatalogPort.java | 40 + .../port/out/modelcatalog/ApiKeyOrigin.java | 51 + .../EffectiveApiKeyDescriptor.java | 101 ++ .../out/modelcatalog/ModelCatalogRequest.java | 51 + .../out/modelcatalog/ModelCatalogResult.java | 161 ++++ .../port/out/modelcatalog/package-info.java | 12 + .../editor/ApiKeyResolutionPort.java | 40 + .../editor/EditorConfigurationValidator.java | 345 +++++++ .../editor/EditorValidationFinding.java | 108 +++ .../editor/EditorValidationInput.java | 99 ++ .../editor/EditorValidationReport.java | 63 ++ .../editor/EditorValidationSeverity.java | 30 + .../validation/editor/package-info.java | 16 + .../out/modelcatalog/ApiKeyOriginTest.java | 28 + .../EffectiveApiKeyDescriptorTest.java | 88 ++ .../modelcatalog/ModelCatalogRequestTest.java | 59 ++ .../modelcatalog/ModelCatalogResultTest.java | 159 ++++ .../EditorConfigurationValidatorTest.java | 512 ++++++++++ .../umbenenner/bootstrap/BootstrapRunner.java | 39 +- .../adapter/AiModelCatalogDispatcher.java | 91 ++ .../adapter/AiModelCatalogDispatcherTest.java | 145 +++ 59 files changed, 8363 insertions(+), 136 deletions(-) create mode 100644 pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiModelCatalogCoordinator.java create mode 100644 pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/AiProviderFamilyStringConverter.java create mode 100644 pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiEditorValidationResult.java create mode 100644 pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiFieldFinding.java create mode 100644 pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiManualModelEntry.java create mode 100644 pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiMessageEntry.java create mode 100644 pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiMessageSeverity.java create mode 100644 pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiModelFieldContainer.java create mode 100644 pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiModelSource.java create mode 100644 pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiVisibleProviderSection.java create mode 100644 pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiEditorValidationSmokeTest.java create mode 100644 pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiMessageAreaSmokeTest.java create mode 100644 pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiModelCatalogSmokeTest.java create mode 100644 pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiProviderSelectionSmokeTest.java create mode 100644 pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiEditorValidationResultTest.java create mode 100644 pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiFieldFindingTest.java create mode 100644 pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiManualModelEntryTest.java create mode 100644 pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiMessageEntryTest.java create mode 100644 pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiMessageSeverityTest.java create mode 100644 pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiModelSourceTest.java create mode 100644 pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiVisibleProviderSectionTest.java create mode 100644 pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/modelcatalog/ClaudeModelCatalogAdapter.java create mode 100644 pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/modelcatalog/OpenAiCompatibleModelCatalogAdapter.java create mode 100644 pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/modelcatalog/package-info.java create mode 100644 pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/validation/EnvironmentApiKeyResolutionAdapter.java create mode 100644 pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/validation/package-info.java create mode 100644 pdf-umbenenner-adapter-out/src/test/java/de/gecheckt/pdf/umbenenner/adapter/out/modelcatalog/ClaudeModelCatalogAdapterTest.java create mode 100644 pdf-umbenenner-adapter-out/src/test/java/de/gecheckt/pdf/umbenenner/adapter/out/modelcatalog/OpenAiCompatibleModelCatalogAdapterTest.java create mode 100644 pdf-umbenenner-adapter-out/src/test/java/de/gecheckt/pdf/umbenenner/adapter/out/validation/EnvironmentApiKeyResolutionAdapterTest.java create mode 100644 pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/modelcatalog/AiModelCatalogPort.java create mode 100644 pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/modelcatalog/ApiKeyOrigin.java create mode 100644 pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/modelcatalog/EffectiveApiKeyDescriptor.java create mode 100644 pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/modelcatalog/ModelCatalogRequest.java create mode 100644 pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/modelcatalog/ModelCatalogResult.java create mode 100644 pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/modelcatalog/package-info.java create mode 100644 pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/validation/editor/ApiKeyResolutionPort.java create mode 100644 pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/validation/editor/EditorConfigurationValidator.java create mode 100644 pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/validation/editor/EditorValidationFinding.java create mode 100644 pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/validation/editor/EditorValidationInput.java create mode 100644 pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/validation/editor/EditorValidationReport.java create mode 100644 pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/validation/editor/EditorValidationSeverity.java create mode 100644 pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/validation/editor/package-info.java create mode 100644 pdf-umbenenner-application/src/test/java/de/gecheckt/pdf/umbenenner/application/port/out/modelcatalog/ApiKeyOriginTest.java create mode 100644 pdf-umbenenner-application/src/test/java/de/gecheckt/pdf/umbenenner/application/port/out/modelcatalog/EffectiveApiKeyDescriptorTest.java create mode 100644 pdf-umbenenner-application/src/test/java/de/gecheckt/pdf/umbenenner/application/port/out/modelcatalog/ModelCatalogRequestTest.java create mode 100644 pdf-umbenenner-application/src/test/java/de/gecheckt/pdf/umbenenner/application/port/out/modelcatalog/ModelCatalogResultTest.java create mode 100644 pdf-umbenenner-application/src/test/java/de/gecheckt/pdf/umbenenner/application/validation/editor/EditorConfigurationValidatorTest.java create mode 100644 pdf-umbenenner-bootstrap/src/main/java/de/gecheckt/pdf/umbenenner/bootstrap/adapter/AiModelCatalogDispatcher.java create mode 100644 pdf-umbenenner-bootstrap/src/test/java/de/gecheckt/pdf/umbenenner/bootstrap/adapter/AiModelCatalogDispatcherTest.java diff --git a/pdf-umbenenner-adapter-in-gui/pom.xml b/pdf-umbenenner-adapter-in-gui/pom.xml index 179440e..9a924dd 100644 --- a/pdf-umbenenner-adapter-in-gui/pom.xml +++ b/pdf-umbenenner-adapter-in-gui/pom.xml @@ -62,6 +62,11 @@ mockito-junit-jupiter test + + org.assertj + assertj-core + test +