def __init__(self, extractor, node): # Descomentar para depurar extractor.checkAllAttributes() # Se crea la tabla de este elemento. self.table = ElementTable() # Se crea la nueva instancia del elemento que se va a extraer ElementClass = extractor.extractClass instance = ElementClass(None, None) # Por cada atributo del elemento for attribute in instance.keys(): # Averiguo de que caracter es, i. e. si los valores del # atributo del elemento son los valores de los nodos # extraidos, o son valores compuestos que se deben extraer # de los descendientes de dichos nodos character = instance.getAttributeCharacter(attribute) # Se extrae el nodo que contiene el valor del atributo nodes = evaluateXPath(node, extractor[attribute]) # Si se encontraron nodos for otherNode in nodes: # Si el valor del nodo es el valor del atributo if character == u''.__class__: value = unicode(otherNode.nodeValue) # Si se debe seguir buscando el valor else: # Se crea la instancia del extractor del elemento factory = ExtractorFactory(otherNode.nodeName) otherExtractor = factory.getExtractorInstance() # Se consigue el valor de el atributo handler = Handler(otherExtractor, otherNode) value = handler.getCreatedInstance() table = handler.getElementTable() # Se actualiza la tabla de este handler self.table.update(table) # Se establece el valor del atributo instance.set(attribute, value) # Se agrega la instancia creada a la tabla self.table.add(instance) self.table.root_key = instance.get('xmi.id')
def __init__(self, xmiFilename): document = XMIDocument(xmiFilename) # Saco los elementos UML:Model hijos de XMI.content modelNode = document.getContentModel() # Si no se consiguio ningun modelo en el contenido # del documento XMI if not modelNode: raise exception.NoModelFoundError(xmiFilename) modelNode = modelNode[0] # Se crea la representacion del modelo UML factory = ExtractorFactory(modelNode.nodeName) extractor = factory.getExtractorInstance() self.modelHandler = Handler(extractor, modelNode)