269 |
269 |
270 class InstancesPathCollector(object): |
270 class InstancesPathCollector(object): |
271 """ object for collecting instances path list""" |
271 """ object for collecting instances path list""" |
272 def __init__(self, controller): |
272 def __init__(self, controller): |
273 self.Instances = [] |
273 self.Instances = [] |
274 |
274 self.controller = controller |
275 parser = etree.XMLParser() |
275 parser = etree.XMLParser() |
276 # arbitrary set debug to false, updated later |
276 # arbitrary set debug to false, updated later |
277 self.resolver = LibraryResolver(controller, debug=False) |
277 self.debug = False |
278 parser.resolvers.add(self.resolver) |
|
279 |
278 |
280 # TODO compile XSLT once for all at __init__ |
279 # TODO compile XSLT once for all at __init__ |
281 self.instances_path_xslt_tree = etree.XSLT( |
280 self.instances_path_xslt_tree = etree.XSLT( |
282 etree.parse( |
281 etree.parse( |
283 os.path.join(ScriptDirectory, "plcopen", "instances_path.xslt"), |
282 os.path.join(ScriptDirectory, "plcopen", "instances_path.xslt"), |
284 parser), |
283 parser), |
285 extensions={ |
284 extensions={ |
286 ("instances_ns", "AddInstance"): self.AddInstance}) |
285 ("instances_ns", "AddInstance"): self.AddInstance, |
|
286 ("instances_ns", "GetProject"): self.GetProject, |
|
287 ("instances_ns", "GetStdLibs"): self.GetStdLibs, |
|
288 ("instances_ns", "GetExtensions"): self.GetExtensions}) |
287 |
289 |
288 def AddInstance(self, context, *args): |
290 def AddInstance(self, context, *args): |
289 self.Instances.append(args[0][0]) |
291 self.Instances.append(args[0][0]) |
290 |
292 |
|
293 def GetProject(self, context, *args): |
|
294 return self.controller.GetProject(self.debug) |
|
295 |
|
296 def GetStdLibs(self, context, *args): |
|
297 return [lib for lib in StdBlckLibs.values()] |
|
298 |
|
299 def GetExtensions(self, context, *args): |
|
300 return [ctn["types"] for ctn in self.controller.ConfNodeTypes] |
|
301 |
291 def Collect(self, root, name, debug): |
302 def Collect(self, root, name, debug): |
292 self.resolver.debug = debug |
303 self.debug = debug |
293 self.instances_path_xslt_tree( |
304 self.instances_path_xslt_tree( |
294 root, instance_type=etree.XSLT.strparam(name)) |
305 root, instance_type=etree.XSLT.strparam(name)) |
295 res = self.Instances |
306 res = self.Instances |
296 self.Instances = [] |
307 self.Instances = [] |
297 return res |
308 return res |