4.9 KiB
4.9 KiB
AP06 – Bootstrap und CLI-Adapter
Ziel
Die bestehende AsvValidatorApplication wird in zwei klar getrennte Verantwortlichkeiten zerlegt:
- Bootstrap (
de.gecheckt.asv.bootstrap.Main) — verdrahtet die Komponenten manuell per Constructor Injection und ist der einzigepublic static void main. - CLI-Adapter (
de.gecheckt.asv.adapter.in.cli.CliRunneroder ähnlich) — nimmt CLI-Argumente entgegen, ruft die Application-Schicht auf, übersetzt das Ergebnis in einen Exit-Code.
Zusätzlich werden die Exit-Codes spec-konform auf 0/1/2 umgestellt.
Voraussetzungen
- AP03, AP04, AP05
Scope IN
Bootstrap
- Klasse
de.gecheckt.asv.bootstrap.Mainmitpublic static void main(String[] args) - verdrahtet manuell:
- Logging-Konfigurator
- CLI-Runner
- (Application-Service — Platzhalter, wird in AP09 feingeschnitten)
- ruft
CliRunner.run(args)auf, gibt den zurückgegebenen Exit-Code anSystem.exitweiter
CLI-Adapter
- Klasse
CliRunnerim Paketadapter.in.cli - Methode
int run(String[] args) - akzeptiert genau ein Positionsargument: den Pfad zur Eingabedatei
- bei 0 oder ≥2 Argumenten → Exit-Code
2, Minimalbericht-Vorbereitung (vollständige Minimalbericht-Logik kommt in AP08) - bei nicht existierender, nicht lesbarer oder nicht regulärer Eingabedatei → Exit-Code
2 - bei erfolgreichem Lauf ohne Spec-Fehler → Exit-Code
0 - bei erfolgreichem Lauf mit Spec-Fehlern → Exit-Code
1
Exit-Code-Konstanten
- Konstanten nur noch in einer Klasse (z.B.
ExitCodeim Paketadapter.in.cli) - Werte:
0= gültig, keine Fehler-Befunde1= ungültig, mindestens ein Spec-Fehler2= Bedienfehler
- Die alten Konstanten (
EXIT_CODE_INVALID_ARGUMENTS=1,EXIT_CODE_FILE_ERROR=2,EXIT_CODE_VALIDATION_ERRORS=3) werden gelöscht
Verdrahtung mit Befundmodell (AP05)
CliRunnergibt am Ende einenValidationReportaus AP05 weiter oder erzeugt selbst einen Minimal-ValidationReportmit einemFindingdes KindsSPEC, SeverityERROR, LayerARTIFACTim Bedienfehlerfall- das eigentliche Einlesen und Verarbeiten der Datei kann für M1 noch ein Dummy-Pfad sein: die Datei wird gelesen, die Bytes gezählt, ein leerer
ValidationReportmitfileNameundtimestampzurückgegeben. Echte Validierung gehört nicht in M1.
Zeichensatz-Korrektur
- beim Einlesen der Eingabedatei wird ISO 8859-15 verwendet, nicht UTF-8. Das ist eine harte Spec-Vorgabe aus
fachliche-anforderungen.md§5.1 und muss ab jetzt dauerhaft so bleiben.Achtung: Java kenntFiles.readString(path, StandardCharsets.ISO_8859_1); // nicht ideal — besser Charset.forName("ISO-8859-15")StandardCharsets.ISO_8859_1, aber nichtISO_8859_15. DaherCharset.forName("ISO-8859-15")verwenden.
Scope OUT
- Berichtdatei und Log-Datei im Eingabeverzeichnis (AP07)
- vollständiger Minimalbericht bei Exit-Code
2(AP08) - Entkopplung der Altlogik (AP09)
- Architekturtest (AP10)
Schritte
- Branch
m1/ap06-bootstrap-cli de.gecheckt.asv.bootstrap.Mainanlegen mitpublic static void mainCliRunnerinadapter.in.clianlegenExitCode-Konstantenklasse anlegenAsvValidatorApplicationschrittweise entkernen: Code wandert nachCliRunnerundMain- Einlese-Encoding auf
Charset.forName("ISO-8859-15")umstellen maven-jar-plugininpom.xmlaufde.gecheckt.asv.bootstrap.Mainsetzen (Platzhalter aus AP02 konkretisieren)- Alle Tests, die auf
AsvValidatorApplicationdirekt zeigen, aufCliRunnerumziehen mvn clean packagelaufen lassen, das erzeugte JAR manuell mitjava -jar target/asv-format-validator-*.jar <test-datei>prüfenmvn clean verifygrün bekommen- Commit
M1-AP06: Bootstrap, CLI-Adapter, Exit-Codes 0/1/2, ISO 8859-15 - Abschlussbericht schreiben
Abnahmekriterien
de.gecheckt.asv.bootstrap.Mainexistiert und istMain-Classdes JARCliRunnerist der einzige Ort mit CLI-Argument-Parsing- Exit-Codes
0,1,2sind definiert und spec-konform eingesetzt - Test: Aufruf ohne Argument → Exit-Code
2 - Test: Aufruf mit nicht existierender Datei → Exit-Code
2 - Test: Aufruf mit leerer, lesbarer Datei → Exit-Code
0(Dummy-Pfad, leererValidationReport) - Einlese-Encoding ist ISO 8859-15 (per Test belegt: eine Datei mit Byte
0xA4ergibt beim Einlesen€, weil0xA4in ISO 8859-15 auf Euro-Zeichen liegt) - ausführbares JAR unter
target/ist manuell startbar mvn clean verifyist grün- Abschlussbericht liegt vor
Rest-Risiken und offene Punkte
- Der Dummy-Pfad (Datei wird gelesen, leerer Report zurückgegeben) ist bewusst dünn. Die Einbindung der alten Parser-Logik passiert in AP09.
- Es ist verlockend, schon hier in AP06 die bestehende Parser-/Validator-Kette mit dem neuen Modell zu verknüpfen. Nicht tun. AP06 soll nur die äußere Hülle geradeziehen.
Bericht
docs/arbeitspakete/m1/berichte/AP06-bericht.md nach templates/ap-bericht.md.