ConfigTreeNode.py
changeset 1315 ff14a66bbd12
parent 1179 3e7bd88fcff7
child 1330 96b242e4c59d
--- a/ConfigTreeNode.py	Tue Sep 10 23:23:45 2013 +0200
+++ b/ConfigTreeNode.py	Wed Sep 11 23:48:41 2013 +0200
@@ -9,15 +9,15 @@
 
 import os,traceback,types
 import shutil
-from xml.dom import minidom
-
-from xmlclass import GenerateClassesFromXSDstring
+from lxml import etree
+
+from xmlclass import GenerateParserFromXSDstring
 from util.misc import GetClassImporter
 
 from PLCControler import PLCControler, LOCATION_CONFNODE
 from editors.ConfTreeNodeEditor import ConfTreeNodeEditor
 
-_BaseParamsClass = GenerateClassesFromXSDstring("""<?xml version="1.0" encoding="ISO-8859-1" ?>
+_BaseParamsParser = GenerateParserFromXSDstring("""<?xml version="1.0" encoding="ISO-8859-1" ?>
         <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
           <xsd:element name="BaseParams">
             <xsd:complexType>
@@ -26,7 +26,7 @@
               <xsd:attribute name="Enabled" type="xsd:boolean" use="optional" default="true"/>
             </xsd:complexType>
           </xsd:element>
-        </xsd:schema>""")["BaseParams"]
+        </xsd:schema>""")
 
 NameTypeSeparator = '@'
 
@@ -46,17 +46,15 @@
     def _AddParamsMembers(self):
         self.CTNParams = None
         if self.XSD:
-            self.Classes = GenerateClassesFromXSDstring(self.XSD)
-            Classes = [(name, XSDclass) for name, XSDclass in self.Classes.items() if XSDclass.IsBaseClass]
-            if len(Classes) == 1:
-                name, XSDclass = Classes[0]
-                obj = XSDclass()
-                self.CTNParams = (name, obj)
-                setattr(self, name, obj)
+            self.Parser = GenerateParserFromXSDstring(self.XSD)
+            obj = self.Parser.CreateRoot()
+            name = obj.getLocalTag()
+            self.CTNParams = (name, obj)
+            setattr(self, name, obj)
 
     def __init__(self):
         # Create BaseParam 
-        self.BaseParams = _BaseParamsClass()
+        self.BaseParams = _BaseParamsParser.CreateRoot()
         self.MandatoryParams = ("BaseParams", self.BaseParams)
         self._AddParamsMembers()
         self.Children = {}
@@ -170,15 +168,21 @@
             # generate XML for base XML parameters controller of the confnode
             if self.MandatoryParams:
                 BaseXMLFile = open(self.ConfNodeBaseXmlFilePath(),'w')
-                BaseXMLFile.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
-                BaseXMLFile.write(self.MandatoryParams[1].generateXMLText(self.MandatoryParams[0], 0).encode("utf-8"))
+                BaseXMLFile.write(etree.tostring(
+                    self.MandatoryParams[1], 
+                    pretty_print=True, 
+                    xml_declaration=True, 
+                    encoding='utf-8'))
                 BaseXMLFile.close()
             
             # generate XML for XML parameters controller of the confnode
             if self.CTNParams:
                 XMLFile = open(self.ConfNodeXmlFilePath(),'w')
-                XMLFile.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
-                XMLFile.write(self.CTNParams[1].generateXMLText(self.CTNParams[0], 0).encode("utf-8"))
+                XMLFile.write(etree.tostring(
+                    self.CTNParams[1], 
+                    pretty_print=True, 
+                    xml_declaration=True, 
+                    encoding='utf-8'))
                 XMLFile.close()
             
             # Call the confnode specific OnCTNSave method
@@ -581,8 +585,9 @@
         if self.MandatoryParams:
             try:
                 basexmlfile = open(self.ConfNodeBaseXmlFilePath(CTNName), 'r')
-                basetree = minidom.parse(basexmlfile)
-                self.MandatoryParams[1].loadXMLTree(basetree.childNodes[0])
+                self.BaseParams = etree.fromstring(
+                    basexmlfile.read(), _BaseParamsParser)
+                self.MandatoryParams = ("BaseParams", self.BaseParams)
                 basexmlfile.close()
             except Exception, exc:
                 self.GetCTRoot().logger.write_error(_("Couldn't load confnode base parameters %s :\n %s") % (CTNName, unicode(exc)))
@@ -592,8 +597,10 @@
         if self.CTNParams:
             try:
                 xmlfile = open(self.ConfNodeXmlFilePath(CTNName), 'r')
-                tree = minidom.parse(xmlfile)
-                self.CTNParams[1].loadXMLTree(tree.childNodes[0])
+                obj = etree.fromstring(xmlfile.read(), self.Parser)
+                name = obj.getLocalTag()
+                setattr(self, name, obj)
+                self.CTNParams = (name, obj)
                 xmlfile.close()
             except Exception, exc:
                 self.GetCTRoot().logger.write_error(_("Couldn't load confnode parameters %s :\n %s") % (CTNName, unicode(exc)))