P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 -...
Transcript of P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 -...
![Page 1: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario](https://reader034.fdocuments.ec/reader034/viewer/2022052022/6036baf8245fa875851f5e5a/html5/thumbnails/1.jpg)
Iván Ruiz Rube Departamento de Ingeniería Informática Escuela Superior de Ingeniería Universidad de Cádiz
12/12/13 1
Transformaciones de modelo a texto con Xtend
Procesadores de Lenguajes 2
PL2 - Transformaciones de modelo a texto con Xtend
Curso 2013-2014
![Page 2: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario](https://reader034.fdocuments.ec/reader034/viewer/2022052022/6036baf8245fa875851f5e5a/html5/thumbnails/2.jpg)
Contenidos
� Instalación � Introducción � Desarrollo de una transformación
12/12/13 2 PL2 - Transformaciones de modelo a texto con Xtend
![Page 3: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario](https://reader034.fdocuments.ec/reader034/viewer/2022052022/6036baf8245fa875851f5e5a/html5/thumbnails/3.jpg)
INSTALACIÓN
TRANSFORMACIONES DE MODELO A TEXTO CON XTEND
12/12/13 3 PL2 - Transformaciones de modelo a texto con Xtend
![Page 4: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario](https://reader034.fdocuments.ec/reader034/viewer/2022052022/6036baf8245fa875851f5e5a/html5/thumbnails/4.jpg)
Instalación Xtend
12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 4
Help → Install New Software
Incluido en la distribución de Xtext. En otro caso, instalar por el procedimiento general
![Page 5: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario](https://reader034.fdocuments.ec/reader034/viewer/2022052022/6036baf8245fa875851f5e5a/html5/thumbnails/5.jpg)
INTRODUCCIÓN
TRANSFORMACIONES DE MODELO A TEXTO CON XTEND
12/12/13 5 PL2 - Transformaciones de modelo a texto con Xtend
![Page 6: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario](https://reader034.fdocuments.ec/reader034/viewer/2022052022/6036baf8245fa875851f5e5a/html5/thumbnails/6.jpg)
Xtend � Xtend es un pequeño lenguaje que
permite simplificar la programación en Java
� Construido sobre la base de Xtext � Este lenguaje “compila” a un código Java
legible y bien formado � El código generado es más eficiente que
el desarrollado manualmente � Diseñado para trabajar con APIs ya
existentes 12/12/13
PL2 - Transformaciones de modelo a texto con Xtend 6
![Page 7: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario](https://reader034.fdocuments.ec/reader034/viewer/2022052022/6036baf8245fa875851f5e5a/html5/thumbnails/7.jpg)
Características
� 100% compatible Java � Eliminación de ruido sintáctico: visibilidad
por defecto, paréntesis vacíos, etc. � Expresiones lambda, para evitar clases
anónimas � Inferencia automática de tipos � Instrucciones switch más potentes � Expresiones para plantillas
12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 7
![Page 8: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario](https://reader034.fdocuments.ec/reader034/viewer/2022052022/6036baf8245fa875851f5e5a/html5/thumbnails/8.jpg)
Ejemplo: Movies.xtend
12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 8
@Data class Movie { String title int year double rating long numberOfVotes Set<String> categories
}
![Page 9: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario](https://reader034.fdocuments.ec/reader034/viewer/2022052022/6036baf8245fa875851f5e5a/html5/thumbnails/9.jpg)
Ejemplo (gen): Movie.java (I)
12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 9
import java.util.Set; import org.eclipse.xtend.lib.Data; import org.eclipse.xtext.xbase.lib.util.ToStringHelper; @Data @SuppressWarnings("all") public class Movie { private final String _title; public String getTitle() { return this._title; } ...
![Page 10: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario](https://reader034.fdocuments.ec/reader034/viewer/2022052022/6036baf8245fa875851f5e5a/html5/thumbnails/10.jpg)
Ejemplo (gen): Movie.java (II)
12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 10
public Movie(final String title, final int year, final double rating, final long numberOfVotes, final Set<String> categories) { super(); this._title = title; .. } @Override public int hashCode() { … } @Override public boolean equals(final Object obj) { … }
![Page 11: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario](https://reader034.fdocuments.ec/reader034/viewer/2022052022/6036baf8245fa875851f5e5a/html5/thumbnails/11.jpg)
Generador de código
12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11
� El paquete generator incluye todo lo necesario para la transformación M2T.
� En el fichero .xtend tendremos que codificar las reglas de transformación
� La carpeta xtend-gen contendrá el código Java resultante
![Page 12: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario](https://reader034.fdocuments.ec/reader034/viewer/2022052022/6036baf8245fa875851f5e5a/html5/thumbnails/12.jpg)
Desarrollo de la transformación
� Función principal que genera un nuevo archivo HTML.
12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 12
class SurveysDSLGenerator implements IGenerator { override void doGenerate(Resource resource, IFileSystemAccess fsa) { for (myEncuesta : resource.allContents.toIterable.filter(typeof(Encuesta))) {
fsa.generateFile(myEncuesta.nombre + ".html", myEncuesta.toHTML) }
}
![Page 13: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario](https://reader034.fdocuments.ec/reader034/viewer/2022052022/6036baf8245fa875851f5e5a/html5/thumbnails/13.jpg)
Desarrollo de la transformación (II)
� Función auxiliar que genera el contenido
12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 13
def toHTML(Encuesta myQuiz) ''’ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es”> <head><title>Mis Encuenstas</title></head> <body> <table border="1"> <tr> <td><b>Pregunta</b></td> <td><b>Descripcion</b></td> <td><b>Valoracion</b></td> </tr> «FOR myQuestion : myQuiz.preguntas» «myQuestion.toHTML» «ENDFOR» </table> </body> </html>
'''
![Page 14: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario](https://reader034.fdocuments.ec/reader034/viewer/2022052022/6036baf8245fa875851f5e5a/html5/thumbnails/14.jpg)
Desarrollo de la transformación (III)
� Otra función auxiliar…
12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 14
def toHTML(Pregunta myQuestion) ''' <tr> <td> «myQuestion.titulo» </td> <td> «myQuestion.descripcion» </td> <td> «myQuestion.puntuacion» </td> </tr>
''' }
![Page 15: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario](https://reader034.fdocuments.ec/reader034/viewer/2022052022/6036baf8245fa875851f5e5a/html5/thumbnails/15.jpg)
Código Java generado por Xtend
12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 15
![Page 16: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario](https://reader034.fdocuments.ec/reader034/viewer/2022052022/6036baf8245fa875851f5e5a/html5/thumbnails/16.jpg)
Test del DSL con generación de código
12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 16
[Project UI] Run as → Eclipse Application
![Page 17: P9 - Transformaciones de modelo a texto con Xtend...Generador de código 12/12/13 PL2 - Transformaciones de modelo a texto con Xtend 11 ! El paquete generator incluye todo lo necesario](https://reader034.fdocuments.ec/reader034/viewer/2022052022/6036baf8245fa875851f5e5a/html5/thumbnails/17.jpg)
12/12/13 17 PL2 - Transformaciones de modelo a texto con Xtend
Transformaciones de modelo a texto con Xtend
Procesadores de Lenguajes 2
Iván Ruiz Rube [email protected]