PLCControler.py
changeset 1351 a546a63ce1bf
parent 1350 7280349a3375
child 1354 241c19ea80da
--- a/PLCControler.py	Wed Oct 09 23:06:47 2013 +0200
+++ b/PLCControler.py	Thu Oct 10 09:43:52 2013 +0200
@@ -254,55 +254,30 @@
 #            Helpers object for generating instance tagname
 #-------------------------------------------------------------------------------
 
-class InstanceTagName(etree.XSLTExtension):
+class InstanceTagName:
 
     def __init__(self, controller):
-        etree.XSLTExtension.__init__(self)
         self.Controller = controller
-    
-    def GetTagName(self, infos):
-        return ""
-    
-    def execute(self, context, self_node, input_node, output_parent):
-        tagname_infos = etree.Element('infos')
-        self.process_children(context, tagname_infos)
-        tagname = etree.Element('tagname')
-        tagname.text = self.GetTagName(tagname_infos)
-        try:
-            output_parent.append(tagname)
-        except:
-            pass
-
-class ConfigTagName(InstanceTagName):
-    
-    def GetTagName(self, infos):
-        return self.Controller.ComputeConfigurationName(infos.get("name"))
-        
-class ResourceTagName(InstanceTagName):
-    
-    def GetTagName(self, infos):
-        return self.Controller.ComputeConfigurationResourceName(
-            infos.get("config_name"), infos.get("name"))
-
-class PouTagName(InstanceTagName):
-    
-    def GetTagName(self, infos):
-        return self.Controller.ComputePouName(infos.get("name"))
-
-class ActionTagName(InstanceTagName):
-    
-    def GetTagName(self, infos):
-        return self.Controller.ComputePouActionName(
-            infos.get("pou_name"), infos.get("name"))
-
-class TransitionTagName(InstanceTagName):
-    
-    def GetTagName(self, infos):
-        return self.Controller.ComputePouTransitionName(
-            infos.get("pou_name"), infos.get("name"))
-
-instance_tagname_xslt = etree.parse(
-    os.path.join(ScriptDirectory, "plcopen", "instance_tagname.xslt"))
+        self.TagName = None
+    
+    def GetTagName(self):
+        return self.TagName
+    
+    def ConfigTagName(self, context, *args):
+        self.TagName = self.Controller.ComputeConfigurationName(args[0][0])
+        
+    def ResourceTagName(self, context, *args):
+        self.TagName = self.Controller.ComputeConfigurationResourceName(args[0][0], args[1][0])
+
+    def PouTagName(self, context, *args):
+        #print "PouTagName", etree.tostring(args[0][0])
+        self.TagName = self.Controller.ComputePouName(args[0][0])
+
+    def ActionTagName(self, context, *args):
+        self.TagName = self.Controller.ComputePouActionName(args[0][0], args[0][1])
+
+    def TransitionTagName(self, context, *args):
+        self.TagName = self.Controller.ComputePouTransitionName(args[0][0], args[0][1])
 
 #-------------------------------------------------------------------------------
 #           Helpers object for generating pou block instances list
@@ -812,23 +787,24 @@
     
     def GetPouInstanceTagName(self, instance_path, debug = False):
         project = self.GetProject(debug)
+        factory = InstanceTagName(self)
+        
+        parser = etree.XMLParser()
+        parser.resolvers.add(LibraryResolver(self, debug))
         
         instance_tagname_xslt_tree = etree.XSLT(
-            instance_tagname_xslt, 
-            extensions = {
-                ("instance_tagname_ns", "instance_definition"): InstanceDefinition(self, debug),
-                ("instance_tagname_ns", "config_tagname"): ConfigTagName(self),
-                ("instance_tagname_ns", "resource_tagname"): ResourceTagName(self),
-                ("instance_tagname_ns", "pou_tagname"): PouTagName(self),
-                ("instance_tagname_ns", "action_tagname"): ActionTagName(self),
-                ("instance_tagname_ns", "transition_tagname"): TransitionTagName(self)})
-        
-        result = instance_tagname_xslt_tree(project, 
-                instance_path=etree.XSLT.strparam(instance_path)).getroot()
-        if result is not None:
-            return result.text
-        
-        return None
+            etree.parse(
+                os.path.join(ScriptDirectory, "plcopen", "instance_tagname.xslt"),
+                parser), 
+            extensions = {("instance_tagname_ns", name): getattr(factory, name)
+                          for name in ["ConfigTagName", "ResourceTagName",
+                                       "PouTagName", "ActionTagName", 
+                                       "TransitionTagName"]})
+        
+        instance_tagname_xslt_tree(project, 
+            instance_path=etree.XSLT.strparam(instance_path))
+        
+        return factory.GetTagName()
     
     def GetInstanceInfos(self, instance_path, debug = False):
         tagname = self.GetPouInstanceTagName(instance_path)