diff --git a/src/ui/mixins/transformation.py b/src/ui/mixins/transformation.py index 1f92419..8237448 100644 --- a/src/ui/mixins/transformation.py +++ b/src/ui/mixins/transformation.py @@ -375,6 +375,24 @@ class TransformationMixin: logger.error(f"Fehler beim Transformieren des TreeNode: {e}") QMessageBox.critical(self, "Fehler", f"Fehler beim Transformieren: {str(e)}") + def _get_cached_project_tools(self): + """ + Gibt die aufgelösten Tool-Konfigurationen des aktuellen Projekts zurück (gecacht). + + Der Cache wird invalidiert, sobald sich die Projekt-ID ändert. + """ + project_id = self.project.id if self.project else None + if getattr(self, "_tool_cache_project_id", None) != project_id: + self._tool_cache_project_id = project_id + self._tool_cache = ( + next((jvm for jvm in app_settings.java_vms if jvm.id == self.project.java_vm_id), None), + next((sj for sj in app_settings.saxon_jars if sj.id == self.project.saxon_jar_id), None), + next((af for af in app_settings.apache_fops if af.id == self.project.apache_fop_id), None), + next((dp for dp in app_settings.diff_pdfs if dp.id == self.project.diff_pdf_id), None), + next((xd for xd in app_settings.xsl_dirs if xd.id == self.project.xsl_dir_id), None), + ) + return self._tool_cache + def _create_transformation_job( self, xsl_file_obj: XslFile, xml_file_obj: XmlFile, xsl_file_item: QTreeWidgetItem | None = None ) -> TransformationJob | None: @@ -394,12 +412,8 @@ class TransformationMixin: QMessageBox.warning(self, "Fehler", "Kein Projekt geöffnet") return None - # Hole Tool-Konfigurationen aus app_settings - java_vm = next((jvm for jvm in app_settings.java_vms if jvm.id == self.project.java_vm_id), None) - saxon_jar = next((sj for sj in app_settings.saxon_jars if sj.id == self.project.saxon_jar_id), None) - apache_fop = next((af for af in app_settings.apache_fops if af.id == self.project.apache_fop_id), None) - diff_pdf = next((dp for dp in app_settings.diff_pdfs if dp.id == self.project.diff_pdf_id), None) - xsl_dir = next((xd for xd in app_settings.xsl_dirs if xd.id == self.project.xsl_dir_id), None) + # Tool-Konfigurationen gecacht auflösen (einmalig pro Projekt) + java_vm, saxon_jar, apache_fop, diff_pdf, xsl_dir = self._get_cached_project_tools() # Prüfe ob alle Konfigurationen vorhanden sind if not all([java_vm, saxon_jar, apache_fop, diff_pdf, xsl_dir]):