Commit Graph

30 Commits

Author SHA1 Message Date
info b900455d69 Fix: Code-Qualität und Effizienz verbessern (v1.5.1)
- main.py: print() durch logging ersetzt, cleanup nach Logger-Init verschoben
- conf.py: funktionsloses global-Statement entfernt
- database.py: unerreichbaren zweiten Projekt-Check entfernt
- hash_calculation.py: deprecated _handle_xml_file_drop entfernt, nutzlosen
  _get_all_project_xml_files-Wrapper entfernt, seen_paths-Scope-Bug in
  rekursiver Traversierung behoben (O(N²) → O(N)), veraltete List[]-Syntax
  und ungenutzte Imports bereinigt
- transform.py: TOCTOU-Muster (exists+stat) durch direktes stat() mit
  FileNotFoundError ersetzt; fop_conf.exists() gecacht

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 17:02:59 +02:00
info a0626a78a3 Feat: Projektweite XSLT-Parameter mit Vererbungshierarchie (v1.4.0)
Ermöglicht die Definition von XSLT-Parametern auf Projektebene, die als
Basis für alle Transformationen dienen und von TreeNode- bzw. XslFile-
Parametern überschrieben werden können (Projekt < TreeNode < XslFile).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 10:58:01 +02:00
info 4e65a6ad4c Feat: vis.js Layout-Switcher im XSL-Abhängigkeitsgraph (v1.2.0)
Layout-Umschaltung zwischen barnesHut, ForceAtlas2, Repulsion und hierarchischem
Layout mit konfigurierbaren Parametern pro Layout. Einstellungen werden persistent
in AppSettings gespeichert und beim Öffnen des Dialogs wiederhergestellt.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 19:32:29 +01:00
info cb90f9e483 Refactor: Code-Duplikation reduziert und Dead Code entfernt
- blake2b-Hash-Berechnung in zentrale Utility-Funktion extrahiert (src/utils.py) mit chunk-basiertem Hashing für bessere RAM-Effizienz
- _transform_all_xml_files und _transform_all_xml_files_force zu einer Methode mit force-Parameter zusammengeführt
- Project-Lookup-Methoden (getXsl, getJavaVm, etc.) über gemeinsame _lookup()-Hilfsmethode konsolidiert
- Duplizierte XML-Sammel-Methoden entfernt, Set-basierte Duplikatsprüfung eingeführt
- Ungenutzte Imports, Dead Code und wirkungslose Ausdrücke entfernt

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 20:21:02 +01:00
info ec33a5b586 Feature: Timeout-Einstellung und asynchrone DB-Abfrage mit Abbrechen-Dialog
DB-Abfragen laufen nun in einem Hintergrund-Thread mit QProgressDialog,
sodass die UI nicht mehr einfriert. connect_timeout wird als konfigurierbarer
Parameter (1-300s, Standard: 10) im Connection-String übergeben.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 21:31:40 +01:00
info e6b2743677 Feature: Expand-Status von Tree-Knoten bei jedem Speichern persistent sichern
- ProjectData um optionales Feld 'expanded_nodes' erweitert (abwärtskompatibel)
- _save_project_settings() speichert nun automatisch den Expand-Status
- Expand-Status wird bei allen Speicheroperationen gesichert:
  * Beim Bearbeiten von TreeNodes und XslFiles
  * Bei Drag&Drop-Operationen im Tree
  * Bei Hash-Berechnungen für XML-Dateien
  * Beim Laden von Daten aus der Datenbank
  * Beim Beenden der Anwendung
- Beim Laden eines Projekts werden aufgeklappte Knoten wiederhergestellt
- Rekursive Speicherung und Wiederherstellung für TreeNode und XslFile
- Umfassendes Logging für Debugging und Fehlerbehandlung
2026-02-01 15:44:55 +01:00
info cbcae3222f Feature: s9api-basierte SaxonWorkerPool-Variante für XSLT 2.0/3.0
Die JAXP-basierte SaxonWorkerPool-Implementierung ist nur für XSLT 1.0
vollständig spezifiziert und kann bei XSLT 2.0/3.0 zu fehlerhaften
Ausgaben führen.

Änderungen:
- Neue SaxonWorkerPoolS9Api-Klasse mit Saxon s9api für XSLT 2.0/3.0
- XsltVersion-Enum in conf.py (XSLT_1_0, XSLT_2_0_3_0)
- ComboBox in Performance-Einstellungen zur XSLT-Version-Auswahl
- MainWindow wählt automatisch richtige Worker-Pool-Variante
- Verbesserte Classpath-Behandlung und Fehlerbehandlung

Standard-Einstellung: XSLT 2.0/3.0 (s9api) - empfohlen für moderne Stylesheets
Fallback: XSLT 1.0 (JAXP) - verfügbar für Legacy-Stylesheets

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-05 20:20:00 +01:00
info a7a69d27d7 Performance: FOP Worker Pool für 5-10x schnellere PDF-Generierung
Implementiert persistente JVM-Prozesse für Apache FOP analog zum bestehenden
SaxonWorkerPool-System. Eliminiert JVM-Startup-Overhead durch Wiederverwendung
von Worker-Prozessen.

Änderungen:
- Neues Modul fop_pool.py mit FopWorkerPool und Java Worker-Klasse
- Integration in transform.py mit automatischem Fallback auf subprocess
- GUI-Einstellungen für FOP Worker Pool (aktivieren/deaktivieren)
- Automatische Neuinitialisierung bei Einstellungsänderungen
- Konfiguration: use_fop_worker_pool in AppSettings (Standard: aktiviert)

Performance: 5-10x schnellere PDF-Generierung bei vielen kleinen PDFs durch
Wiederverwendung von FopFactory und Font-Caches.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-04 17:24:19 +01:00
info d7fbb178a7 Feature: Konfigurierbare SaxonWorkerPool-Aktivierung
Performance-Dialog erweitert um Checkbox zur Aktivierung/Deaktivierung des SaxonWorkerPool.
Benutzer können jetzt zwischen Worker-Pool (schnell, benötigt JDK) und Fallback-Modus (robust, nur JRE) wählen.

Änderungen:
- Neue Einstellung 'use_saxon_worker_pool' in AppSettings (Standard: aktiviert)
- Erweiterter Performance-Dialog mit zwei Sektionen (ThreadPoolExecutor + SaxonWorkerPool)
- Pool-Initialisierung prüft nun Einstellung vor Worker-Start
- Aktualisiertes Menü-Tooltip zeigt beide Einstellungen

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-28 17:33:00 +01:00
info d0cdcd6432 Performance: 4x schnellere XSLT-Transformationen durch Worker-Pool
Problem: 82 XML-Dateien brauchten 160 Sekunden (JVM-Startup-Overhead)

Lösung: Persistente JVM-Worker-Prozesse mit JAXP Transformer API
- Saxon Worker Pool mit N persistenten JVM-Prozessen
- Eliminiert JVM-Startup und Classpath-Scanning bei jedem Job
- Parallele Verarbeitung mit ThreadPoolExecutor
- JAXP Transformer API (javax.xml.transform) - stabil, kein System.exit()
- Konfigurierbare Worker-Anzahl über Performance-Menü

Ergebnis: 82 Dateien in 40 Sekunden (4x Speedup, ~0.49s pro Datei)

Zusätzliche Verbesserungen:
- Dual-Logging (Datei + Konsole) mit Timestamps
- Worker-stderr-Logs in Projektverzeichnis/temp/
- Umfangreiche Debug-Ausgaben für Fehlerdiagnose
- Robuste Fehlerbehandlung mit ErrorListener

Technische Details:
- SaxonWorkerPool: Verwaltet N Worker-Prozesse
- JAXP statt Transform.main() (kein System.exit!)
- Worker-Locks für thread-sichere Job-Verteilung
- Graceful Shutdown mit EXIT-Befehl
- Fallback auf subprocess bei Pool-Fehlern

Dateien:
- src/saxon_pool.py (NEU): Worker-Pool-Implementation
- src/transform.py: Integration mit Worker-Pool
- src/ui/MainWindow.py: Pool-Initialisierung, Performance-Menü
- src/conf.py: max_workers Einstellung
- src/main.py: Dual-Logging

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-28 16:46:39 +01:00
info 8c7db39f5f FOP-Config: Projektspezifischer Konfigurationsordner und erweitertes Logging
- Project-Modell um optionales fop_config_dir Feld erweitert
- TransformationJob verwendet nun projektspezifischen FOP-Config-Pfad
- Saxon und FOP stdout/stderr werden nun im Debug-Level geloggt
- UI-Elemente für FOP-Config-Ordner-Auswahl hinzugefügt
- AppSettings und MainWindow unterstützen neues Feld beim Laden/Speichern

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-26 12:45:44 +01:00
info 1fc7decace UI-Zustand beim Schließen speichern und beim Start wiederherstellen
Fenstergeometrie, Splitter-Positionen und TreeWidget-Spaltenbreiten werden jetzt in der Konfiguration gespeichert und beim nächsten Start automatisch wiederhergestellt.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-15 20:07:53 +01:00
info 2e86a4befb CLAUDE.md Dokumentation hinzugefügt und Konfigurationspfad-Handling verbessert
- CLAUDE.md mit umfassender Projektdokumentation für Claude Code hinzugefügt
- Beschreibt Architektur, Datenmodelle, UI-Muster und Entwicklungsworkflows
- Konfigurationspfad-Verarbeitung in src/conf.py robuster gemacht:
  - os.path durch pathlib.Path ersetzt
  - Validierung für Schreibrechte und Verzeichnisexistenz hinzugefügt
  - Besseres Error-Handling mit sys.exit(1) bei fehlenden Berechtigungen

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-11 13:00:32 +02:00
info 5c91836d87 Bessere Unterstützung unter Linux fhür '~' als home dir 2025-10-02 21:00:19 +02:00
info f2491c5478 Die XML-Dateien haben nun hashsummen in Projekt-Datei 2025-09-20 17:22:09 +02:00
info 8b576b3fa7 Hinzufügen der XML-Dateien
Klassen zur besseren Unterscheidung umbenant
2025-08-10 17:32:22 +02:00
info f5eafe436e Neues Button 2025-08-03 12:15:32 +02:00
info 078f705c5d Kleine Anpassungen 2025-07-27 19:41:04 +02:00
info d91c19fe8c Der Projekt-Baum wird beim Öffnen des Projektes gefüllt 2025-07-27 18:33:14 +02:00
info 0aed454cd8 Kleine Anpassungen im PdfProjectSettings 2025-07-17 19:12:41 +02:00
info 91ae941d03 Config aangepasst
Project-Dialog um Postgres DB erweitert
2025-07-14 21:00:06 +02:00
info b226be4e4e Dialoge für PostgreSQL erstellt 2025-06-22 18:12:27 +02:00
info b8441d1ab4 Laden der Project.yaml aus dem Projekt-Verzeichnis 2025-06-22 14:47:17 +02:00
info ea9324637f Konzept für Auswerten der SQL-Daten aus FN, parsen und schreiben der Pojekt-Datei 2025-06-21 21:20:37 +02:00
info e0ed64ec1c Definition der Noden für Baum angefangen 2025-06-20 21:42:30 +02:00
info 6901333213 Die Werte der PdfProjects werden in Tabelle eingetragen 2025-06-18 19:49:31 +02:00
info 02d1d4ada4 Fusion als Standard-Thema gesetzt. Thema wird in config.json gespeichert 2025-06-17 19:11:08 +02:00
info 7dc77cb310 AppSettings-Dialog um PDF-Projekte erweitert 2025-06-14 20:35:32 +02:00
info 96fa6cb8aa Konfiguration wird geladen und gespeichert. 2025-06-13 20:23:19 +02:00
info cb203112d6 Der AppSettings-Dialog wird beim Start automatisch geöffnet, um fehlende Einstellungen eintragen zu können
* Es wurden weitere Dialoge für einzelne Tabellen erstellt.
2025-06-12 20:43:31 +02:00