Ejemplo n.º 1
0
    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')
Ejemplo n.º 2
0
    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)