Refactor: Stringly-typed Knotentypen durch ItemType-Enum ersetzt
ItemType(Enum) mit TREE_NODE, XSL_FILE, XML_FILE, UNKNOWN statt String-Konstanten in tree_manager.py. Verbessert Typsicherheit und IDE-Support. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -11,6 +11,7 @@ Dieses Mixin enthält alle Methoden für die Verwaltung des TreeWidgets im MainW
|
|||||||
import logging
|
import logging
|
||||||
import shutil
|
import shutil
|
||||||
import time
|
import time
|
||||||
|
from enum import Enum, auto
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from PySide6.QtCore import Qt
|
from PySide6.QtCore import Qt
|
||||||
@@ -31,6 +32,13 @@ from ui.TreeNodeEditDialog import TreeNodeEditDialog
|
|||||||
from ui.XslFileEditDialog import XslFileEditDialog
|
from ui.XslFileEditDialog import XslFileEditDialog
|
||||||
|
|
||||||
|
|
||||||
|
class ItemType(Enum):
|
||||||
|
TREE_NODE = auto()
|
||||||
|
XSL_FILE = auto()
|
||||||
|
XML_FILE = auto()
|
||||||
|
UNKNOWN = auto()
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
@@ -68,7 +76,7 @@ class TreeManagerMixin:
|
|||||||
|
|
||||||
if not item:
|
if not item:
|
||||||
# Kein Item gefunden - zeige Kontextmenü für Root-Elemente
|
# Kein Item gefunden - zeige Kontextmenü für Root-Elemente
|
||||||
node_type = "Unknown"
|
node_type = ItemType.UNKNOWN
|
||||||
context_menu = self._create_context_menu_for_type(node_type, None)
|
context_menu = self._create_context_menu_for_type(node_type, None)
|
||||||
else:
|
else:
|
||||||
# Bestimme den Node-Typ basierend auf dem Item
|
# Bestimme den Node-Typ basierend auf dem Item
|
||||||
@@ -109,7 +117,7 @@ class TreeManagerMixin:
|
|||||||
node_type = self._get_node_type_from_item(item)
|
node_type = self._get_node_type_from_item(item)
|
||||||
logger.debug(f"Selektierter Node-Typ: {node_type}")
|
logger.debug(f"Selektierter Node-Typ: {node_type}")
|
||||||
|
|
||||||
if node_type == "XmlFile":
|
if node_type == ItemType.XML_FILE:
|
||||||
# Hole XmlFile-Objekt und XSL-ID aus UserRole
|
# Hole XmlFile-Objekt und XSL-ID aus UserRole
|
||||||
xml_file_obj = item.data(0, Qt.ItemDataRole.UserRole)
|
xml_file_obj = item.data(0, Qt.ItemDataRole.UserRole)
|
||||||
xsl_id_str = item.data(1, Qt.ItemDataRole.UserRole)
|
xsl_id_str = item.data(1, Qt.ItemDataRole.UserRole)
|
||||||
@@ -165,13 +173,13 @@ class TreeManagerMixin:
|
|||||||
# Child-Item - prüfe ob es ein XML-File ist
|
# Child-Item - prüfe ob es ein XML-File ist
|
||||||
text = item.text(0)
|
text = item.text(0)
|
||||||
if text.startswith("XML:"):
|
if text.startswith("XML:"):
|
||||||
return "XmlFile"
|
return ItemType.XML_FILE
|
||||||
else:
|
else:
|
||||||
# Könnte ein TreeNode-Child oder XslFile-Child sein
|
# Könnte ein TreeNode-Child oder XslFile-Child sein
|
||||||
# Prüfe den Parent-Typ
|
# Prüfe den Parent-Typ
|
||||||
parent_type = self._get_node_type_from_item(parent_item)
|
parent_type = self._get_node_type_from_item(parent_item)
|
||||||
if parent_type == "XslFile":
|
if parent_type == ItemType.XSL_FILE:
|
||||||
return "XmlFile"
|
return ItemType.XML_FILE
|
||||||
else:
|
else:
|
||||||
# Rekursiv bestimmen basierend auf gespeicherten Daten
|
# Rekursiv bestimmen basierend auf gespeicherten Daten
|
||||||
return self._determine_node_type_from_data(item)
|
return self._determine_node_type_from_data(item)
|
||||||
@@ -181,7 +189,7 @@ class TreeManagerMixin:
|
|||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Fehler beim Bestimmen des Node-Typs: {e}")
|
logger.error(f"Fehler beim Bestimmen des Node-Typs: {e}")
|
||||||
return "Unknown"
|
return ItemType.UNKNOWN
|
||||||
|
|
||||||
def _determine_node_type_from_data(self, item):
|
def _determine_node_type_from_data(self, item):
|
||||||
"""
|
"""
|
||||||
@@ -197,21 +205,21 @@ class TreeManagerMixin:
|
|||||||
# Hole das gespeicherte Node-Objekt direkt
|
# Hole das gespeicherte Node-Objekt direkt
|
||||||
node = item.data(0, Qt.ItemDataRole.UserRole)
|
node = item.data(0, Qt.ItemDataRole.UserRole)
|
||||||
if not node:
|
if not node:
|
||||||
return "Unknown"
|
return ItemType.UNKNOWN
|
||||||
|
|
||||||
# Bestimme den Typ direkt vom Node-Objekt
|
# Bestimme den Typ direkt vom Node-Objekt
|
||||||
if isinstance(node, TreeNode):
|
if isinstance(node, TreeNode):
|
||||||
return "TreeNode"
|
return ItemType.TREE_NODE
|
||||||
elif isinstance(node, XslFile):
|
elif isinstance(node, XslFile):
|
||||||
return "XslFile"
|
return ItemType.XSL_FILE
|
||||||
elif isinstance(node, XmlFile):
|
elif isinstance(node, XmlFile):
|
||||||
return "XmlFile"
|
return ItemType.XML_FILE
|
||||||
|
|
||||||
return "Unknown"
|
return ItemType.UNKNOWN
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Fehler beim Bestimmen des Node-Typs aus Daten: {e}")
|
logger.error(f"Fehler beim Bestimmen des Node-Typs aus Daten: {e}")
|
||||||
return "Unknown"
|
return ItemType.UNKNOWN
|
||||||
|
|
||||||
def _find_item_by_node(self, node_obj):
|
def _find_item_by_node(self, node_obj):
|
||||||
"""
|
"""
|
||||||
@@ -284,7 +292,7 @@ class TreeManagerMixin:
|
|||||||
try:
|
try:
|
||||||
menu = QMenu(self)
|
menu = QMenu(self)
|
||||||
|
|
||||||
if node_type == "TreeNode":
|
if node_type == ItemType.TREE_NODE:
|
||||||
# Kontextmenü für TreeNode
|
# Kontextmenü für TreeNode
|
||||||
action_add_child = QAction("Unterknoten hinzufügen", self)
|
action_add_child = QAction("Unterknoten hinzufügen", self)
|
||||||
action_add_child.setIcon(QIcon(QIcon.fromTheme("folder-new")))
|
action_add_child.setIcon(QIcon(QIcon.fromTheme("folder-new")))
|
||||||
@@ -338,7 +346,7 @@ class TreeManagerMixin:
|
|||||||
action_delete.triggered.connect(lambda: self._delete_tree_node(item))
|
action_delete.triggered.connect(lambda: self._delete_tree_node(item))
|
||||||
menu.addAction(action_delete)
|
menu.addAction(action_delete)
|
||||||
|
|
||||||
elif node_type == "XslFile":
|
elif node_type == ItemType.XSL_FILE:
|
||||||
# Kontextmenü für XslFile
|
# Kontextmenü für XslFile
|
||||||
action_add_xml = QAction("XML-Datei hinzufügen", self)
|
action_add_xml = QAction("XML-Datei hinzufügen", self)
|
||||||
action_add_xml.setIcon(QIcon(QIcon.fromTheme("document-new")))
|
action_add_xml.setIcon(QIcon(QIcon.fromTheme("document-new")))
|
||||||
@@ -387,7 +395,7 @@ class TreeManagerMixin:
|
|||||||
action_delete.triggered.connect(lambda: self._delete_xsl_file(item))
|
action_delete.triggered.connect(lambda: self._delete_xsl_file(item))
|
||||||
menu.addAction(action_delete)
|
menu.addAction(action_delete)
|
||||||
|
|
||||||
elif node_type == "XmlFile":
|
elif node_type == ItemType.XML_FILE:
|
||||||
# Kontextmenü für XmlFile
|
# Kontextmenü für XmlFile
|
||||||
# Transformations-Aktionen
|
# Transformations-Aktionen
|
||||||
action_transform = QAction("Transformieren", self)
|
action_transform = QAction("Transformieren", self)
|
||||||
|
|||||||
Reference in New Issue
Block a user