diff -r 7280349a3375 -r a546a63ce1bf PLCControler.py --- 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)