Skip to content

Cómo buscar elementos con estereotipos con QVT

mayo 14, 2012

Continuando la línea de un post anterior, donde quería aplicar un UML Profile a un modelo de salida en una transformación QVT,  ahora me puse a buscar elementos del modelo de entrada, los cuales tengan un estereotipo aplicado. No es fácil, pero tampoco imposible. Lo más complicado es utilizar los metamodelos correctos de UML.

El tema está en que UML no es sólo estructuras y relaciones, también hay muchas operaciones implementadas, a nivel de OCL, las cuales son útiles y necesarias para las transformaciones, o al menos para esto que quiero hacer de buscar elementos con un estereotipo aplicado.

En este post me centraré en cómo implementar la transformación QVT, y en el siguiente en cómo preparar los metamodelos para que todo esto funcione.

Me valgo antes que nada de una operación que está en el foro de MediniQVT:

   -- delivers the first occurrence of the named stereotype 
   query getStereotype ( stName : String ) : uml::Stereotype
   {
      Stereotype.allInstances()->select
         (x : uml::Stereotype | x.name = stName)->asSequence()->first()
   }

Entonces, teniendo un checkonly para un elemento al que se quiera verificar si tiene o no un estereotipo (en mi caso una clase: class) hace falta agregar las siguientes líneas en el when:

     not class.getAppliedStereotypes()->isEmpty();
     class.isStereotypeApplied(getStereotype('Table'));

Esto, si no tenemos el metamodelo UML correcto, no funciona, pues la operación getAppliedStereotypes no estará accesible. A mi me solía lanzar esta excepción:

Exception occured in transformation The OCL expression at (file.qvt:96:4) evaluated to an undefined value! Rewrite this OCL expression to only return True or False!

Ahora, después de mucho trabajo y dar vueltas, está funcionando, o sea, que considero que recién voy a comenzar a investigar de verdad….

Anuncios

From → Eclipse, QVT, UML

Dejar un comentario

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: