Construye to propio generador de código con MOSKitt SDK

25
Construye tu propio generador de código con MOSKitt SDK Construye tu propio generador de código con MOSKitt SDK Jose Manuel García Valladolid Héctor Iturria Sánchez [email protected] [email protected]

Transcript of Construye to propio generador de código con MOSKitt SDK

Construye tu propio generador de código con MOSKitt SDKConstruye tu propio generador de código con MOSKitt SDK

Jose Manuel García Valladolid

Héctor Iturria Sánchez

[email protected]

[email protected]

Estructura general de una transformación

Estructura de una transformación M2T

Contexto de Entrada

Modelo de dominio: UML2 Class

Modelo de Interfaz de Usuario: DataForms

Contexto de Entrada

Metamodelo DataForms

El usuario interactúa con el sistema a través de un Editor de formularios.

Este editor de formularios es una ventana con título que contiene un conjunto de páginas. Cada página tiene una etiqueta que le permite al usuario identificarla.

El editor proporcionará algún mecanismo para que el usuario pueda conmutar entre páginas accediendo al contenido de cada una de ellas.

Metamodelo Ecore DataForms

Contexto de Salida: HTML+CSS

Entorno de desarrollo

Plugin de Transformación M2T

Definición de la transformación

Clase XPANDTransformation I

Clase XPANDTransformation II

Workflow XPAND

Workflow XPAND

Plantillas Xpand

Importa una definición de modelo

Carga una extensión

Define una sección de una plantilla para una clase Java simple que es aplicada a un elemento del tipo Entity.

Directivas básicas Xpand

DEFINE: definición de una plantilla. Tiene un nombre y se aplica a un tipo de elemento específico (incluidas las colecciones).

IMPORT: da acceso a las plantillas y metamodelos definidos en un espacio de nombres dado.

EXTENSION: carga extensiones en lenguaje XTend.

Directivas para control de flujo

EXPAND: se usa para ejecutar un bloque DEFINE para un elemento del tipo especificado.

FOR y FOREACH (dentro de EXPAND): permiten aplicar una definición de una plantilla a una colección de elementos.

FOR → Ejecuta la plantilla para el resultado de la expresión.

FOREACH → Ejecuta la plantilla para todos los elementos de la colección especificada. Es posible indicar un separador.

Otras directivas

FILE: define una sección en la cual todo el texto generado por las directivas existentes será almacenado en el fichero especificado.

LET: permite definir variables y su contenido.

ERROR: permite detener el procesamiento de las plantillas.

REM: permite la inclusión de comentarios en nuestras plantillas.

Funciones interesantes

Operaciones sobre collecciones:

Select: books.select(b | b.isReserved = false);

Collect: books.collect(b.title | b.isReserved = false);

SortBy: books.sortBy(b.author);

Size: books.size

Exists: books.exists(b | b.isReserved = false);

Get: books.get(1);

Otras operaciones

IsInstance: library::Book.isInstance(selectedObject)

Actividad 1

Uso del gestor de transformaciones de MOSKitt.

Abrir el modelo ClubUI.dataforms y evaluar el diseño de interfaz de usuario que propone.

Lanzar la transformación a partir del modelo DataForms de ejemplo.

Comprobar el resultado. Verificar que la aplicación HTML generada concuerda con el modelo DataForms de entrada.

Actividad 2

Modelar una página nueva con DataForms

La página contendrá un formulario tipo registro para los atributos de la clase Socio del modelo de dominio UML2.

Añadir, además, 2 acciones al formulario, “Guardar” y “Cancelar”.

Ejecutar la transformación y comprobar el resultado.

Actividad 3

Dar soporte a la transformación para el tipo de datos uml::Boolean

Modificar la plantilla XPAND “field.xpt” para incluir el soporte a uml::Boolean.

El control HTML asociado a este tipo de dato será un CheckBox. Su código HTML es: <input name=”nombreControl” type=”checkbox”/>

Crear en el modelo UML2 club.uml un atributo nuevo a la clase Participacion llamado enVenta de tipo uml::Boolean.

Crear un campo nuevo en formulario de la página de

Actividad 4

Dar soporte a la transformación para el tipo de datos uml::Enumeration

Modificar la plantilla XPAND “field.xpt” para incluir el soporte a uml::Enumeration.

El control HTML asociado a este tipo de dato será un ComboBox. Su código HTML es: <select name=”nombreControl”> <option name=”opcion”>TituloOpcion</option> </select>

Ejecutar la transformación y comprobar que el campo TipoSocio está soportado en el resultado.

Actividad 5

Dar soporte al patrón de visualización VisualizationPattern de un Form en DataForms

Modificar las plantillas necesarias para que la disposición de los campos del formulario sea:Registro: disposición actual.

Tabular: se creará una tabla en la que la primera línea contendrá los títulos de las columnas, que serán las etiquetas de los campos. Después en una segunda línea contendrá cada uno de los campos.

Realizar cambios en el modelo DataForms de entrada y comprobar la transformación.