def getListener(self, xmlNode, context): if xmlNode.hasAttribute('listener'): listenerName = xmlNode.getAttribute('listener') listenerClass = smart_load(listenerName)() return listenerClass if xmlNode.hasAttribute('bean'): beanName = xmlNode.getAttribute('bean') listenerClass = context.getBean(beanName) return listenerClass raise Exception('listener or bean')
def array2event(self, refDict): if not refDict.has_key('type'): raise scrutator.core.exception.BadTypeException("Do not contain a type for reconstruction") try: recons = smart_load(refDict['type'])() except TypeError: raise Exception(refDict['type']+" can't be unserialize") import pickle recons.setArg(pickle.loads(refDict['arg'])) return recons
def load(self, filename, eventManager, context = CoreManager()): from xml.dom.minidom import parse from sys import path resource_name = path[0] + '/' + filename doc = parse(resource_name) for trigger in doc.getElementsByTagName('trigger'): eventName = trigger.getAttribute('event') #if it's not "all" events if not eventName == 'all': eventName = smart_load(eventName)().getType() eventManager.bind(eventName, self.getListener(trigger, context))
def loadBean(self, bean): """load a bean""" bean_id = bean.getAttribute('id') class_name = bean.getAttribute('class') argument_list = list() #fetch element in constructor arg args = bean.getElementsByTagName('constructor-arg') #if we have params for constructor if len(args) == 1: arg = args[0] for node in arg.childNodes: #fetch value if (node.nodeName == "value"): val = getText(node.childNodes) #if value is an int, convert it if val.isdigit(): val = int(val) #append element to argument list argument_list.append(val) #if we have reference element, fetch it with the getBean method #warning: you must declare reference before using it if (node.nodeName == "ref"): argument_list.append(self.context.getBean(node.getAttribute("bean"))) #smart load reference of the class class_obj = smart_load(class_name) try: if (len(argument_list) == 0): class_inst = class_obj() else: class_inst = class_obj(*argument_list) except TypeError, e: raise XMLBeanConstArgError(class_obj.__name__ + " bad args " + str(argument_list) + "\n" + str(e))