lfranky@javeriana.edu.co



Documentos relacionados

Instalación y uso del framework Taylor para el modelaje de entidades JPA

RUEDA TORRES DULCE CAROLINA 3CM2 JAX-WS WEB SERVICES WEB APPLICATION DEVELOPMENT

Curso Programación en la Web: Configuración de software. Por: María Consuelo Franky. profesora Dpto. de Ingeniería de Sistemas Universidad Javeriana

Universidad ORT - Arquitectura de Software. Requisitos

Objetivo: Introducción conceptual y aplicación básica de los lenguajes del lado del servidor.

Requisitos. Universidad ORT Arquitectura de Software

4.6.7 FUNCIONES NXA PARA CREAR

Elementos léxicos del lenguaje de programación Java

Partes de un programa en Java. A. Ejemplo de un Programa en Java /* Programa Ejemplo de Java: Muestra una Ventana Archivo: Ejemplo1.

Modulo 1 El lenguaje Java

EXTENSIÓN DE UML PARA APLICACIONES WEB

Objetos y Clases en Java. ELO 329: Diseño y Programación Orientados a Objetos

La utilización de las diferentes aplicaciones o servicios de Internet se lleva a cabo respondiendo al llamado modelo cliente-servidor.

USANDO SERVLETS EN UN SERVIDOR WEB RESIN

MANUAL DE USUARIO. Webservice simple para la exportación rápida de información proveniente de una base de datos. Versión 0,1,1

JAVA EE 5. Arquitectura, conceptos y ejemplos.

Universidad Central de Bayamón COLEGIO DE DESARROLLO EMPRESARIAL Y TECNOLOGIA. Número Estudiante:

Listados y Etiquetas personalizados de PrefGest WhitePaper Julio 2008

Lo básico de Javascript. ISIS2603 Departamento de Sistemas y Computación Universidad de los Andes

JavaScript como Orientación a Objetos

MAESTRO DE PHP PHP NIVEL 1

Q-flow 3.0: Web services

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle:

OBCOM MetaServer Instalació n y Cónfiguració n

TUTORIAL DE PHP. M. en C. Erika Vilches. Parte 2.

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Son objetos cuya función es el tratamiento de varios registros exclusivamente durante la ejecución de un programa.

JavaScript. Contenidos. Introducción El lenguaje Validación de formularios. Programación en Internet DLSI - Universidad de Alicante 1

APLICACIONES MÓVILES NATIVAS. Sesión 8: Arquitectura de las aplicaciones Android

RUEDA TORRES DULCE CAROLINA 3CM2 HIBERNATE EN UNA APLICACIÓN WEB

Java RMI. las RPC de Java. Parte I. Luis Fernando Llana Díaz. Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid

Los bloques DLL (Figura A.1) externos permiten al usuario escribir su propio código y

APRENDE A CREAR UNA PÁGINA WEB CON HTML

Capítulo VI. Conclusiones. En este capítulo abordaremos la comparación de las características principales y

Artículos técnicos Grupo Danysoft: Soporte de Servidores de Aplicaciones con JBuilder

Q-flow 3.0: Web services

CapÍtulo 3: Manejo de Forms.

EUROPIO ENGINE LAB: FORMULARIOS WEB Y TABLAS HTML EN SOLO

Conociendo el ambiente de programación de Java. M. en C. Erika Vilches

Manual de uso del Taglib de Template Saga

CONCEPTOS BASICOS DEL LENGUAJE JAVA

Laboratorio de Aplicaciones Telemáticas

Kaldeera Advanced Forms 2009 Guía del usuario

Práctica 2: Instalación de un gestor de bases de datos relacionales y desarrollo de una aplicación Web con persistencia de datos

Introducción a Java LSUB. 15 de enero de 2015 GSYC

GUIA DE AYUDA A LA INTEGRACION DE WEBPAY

ACTIONSCRIPT (AS) Proyectos II. Audiovisuales. Dpto. Escultura. UPV. [sintaxis elemental]

15. ANEXO # 5 GAMEPLAYOBJECT

Configuración servidor Tomcat

Introducción a la Programación en MATLAB

UNIVERSIDAD OBERTA DE CATALUNYA. Herramienta Visual para Diseñar formularios Web WformDesigner

Curso PHP & MYSQL PARA JOOMLA

Centro de Capacitación en Tecnologías de la Información

Introducción a JAX-WS Web Services

Aplicaciones seguras con ClaseSeguridad

SHELL SCRIPTING: ANÁLISIS DE ARGUMENTOS

MICROSITIOS. Perfiles

Consultas con combinaciones

Herramientas computacionales para la matemática MATLAB: Funciones definidas por el usuario (parte II)

Objetivo de aprendizaje del tema

AGRUPA P R OBJET E OS 1

WEB SERVICES. Manual técnico para desarrollador

ATLAS MANUAL DE USUARIO ARBOL ACCESIBLE

PASO 1: Creamos un nuevo proyecto en NetBeans. Nos vamos a File y pulsamos sobre New Project

BANNERS CÍCLICOS CON JAVASCRIPT

Integración de Toolchain PTXdist sobre IDE gráfico basado en Eclipse

Temario. Introducción Hello Word y Literales Expresiones Bloques Programación orientada a objetos (OOP) Introspección Rake Gemas

Instrucciones para el despliegue de EJBs

GENERACIÓN Y CONSTRUCCIÓN DE DOCUMENTOS XML

Práctica 1: Instalación de un servidor de aplicaciones web y diseño de la vista de una aplicación

MySQL y Sesiones en PHP. Área de Ingeniería Telemática

Escrito por Beatriz Hernández Jueves, 13 de Octubre de :47 - Actualizado Jueves, 13 de Octubre de :04

PÁGINAS DINÁMICAS WEB CON PHP. Unidad 2 ELEMENTOS DEL LENGUAJE DE PHP

INDICE Programación Introducción Capitulo 21 BASIC Capitulo 22. COBOL Capitulo 23 DELPHI Capitulo 24. FORTRAN Capitulo 25.

Generador de Proxy remoto JavaScript.

%& %)& '$!%*+ $, %%%&$ %%

Creación de controles de usuario

PHP Básico. PHP para principiantes

Sesión 23. Luisa Fernanda Rincón Pérez

Práctica sobre compartición de instancias remotas.

Capitulo 5. Implementación del sistema MDM

TIPOS DE VARIABLES EN PHP. DECLARACIÓN Y ASIGNACIÓN. LA INSTRUCCIÓN ECHO PARA INSERTAR TEXTO O CÓDIGO. (CU00816B)

Introducción al desarrollo de RIA's con Adobe Flex 3.0 Dia 4

Curso de JavaServer Faces

Universidad Tecnológica del Valle del Mezquital. Desarrollo de Aplicaciones Web. Manual JSP

MODIFICAR Y CREAR ARCHIVOS DE UNA APLICACIÓN WEB

PROGRAMACIÓN PÁGINAS WEB CON PHP

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Capas de la arquitectura de referencia

Unidad II. - Las técnicas en las que se basó, las categorías de análisis o ejes centrales que permiten guiar el proceso de investigación.

PHP. Introducción (1) Introducción (3) Introducción (2) PHP 1

Inventario OPP. Documentación Técnica. División de Tecnologías de la Información

Arquitectura J2EE para aplicaciones web. Aplicaciones web con JSP. Arquitectura J2EE: Capa de Acceso Web. Arquitectura J2EE: Capa Cliente

TEMA 9 CREACIÓN DE PÁGINAS WEB

PREPARATORIA DIURNA DE CUAUTLA

XML y XQuery. Qué es XML? Qué es XML? (II) Ejemplo de fichero XML. Cuerpo de un documento XML. Estructura de un documento XML

FRAMEWORK SPRING EN UNA APLICACIÓN WEB

PHP. Desarrollo Web Administrables PHP, MySQL, HTML5, CSS3, jquery

Tip en detalle Nro. 06

Transcripción:

Plantillas Velocity María Consuelo Franky lfranky@javeriana.edu.co Universidad Javeriana - 2010 1

Facilidade ofrecidas por Velocity 2

Facilidades ofrecidas por Velocity Permite hacer plantillas que sirven para generar : archivos fuentes en cualquier lenguaje (Java, C#, PHP, ) páginas web con contenido dinámico en cualquier tecnología (JSP, ASP, JSF, ) descriptores XML scripts SQL etc. Permite hacer macros para extender los archivos generados por ejemplo, extender el descriptor web.xml con con referencias a nuevos EJBs 3

Elementos del lenguaje de plantillas Velocity 4

Un primer ejemplo Plantilla Velocity.vm para generar página web dinámica <html> <body> ## This is a comment line. #set( $foo = "Velocity" ) Hello $foo World! </body> </html> contiene un comentario Velocity en la línea con ## una referencia a una variable Velocity llamada $foo (o también la notación ${foo} ) una directiva #set que le da valor a la variable uso de la variable $foo dentro del texto en donde será reemplazada por su valor 5

Tipos de referencias Variables (velocity): $Identifier o en notación larga: ${Identifier} Propiedades: $Ident1.Ident2 o ${Ident1.Ident2} Métodos: $Ident1.Ident2(..) o ${Ident1.Ident2(..)} ej: $sun.getplanet(["earth", "Mars] ) 6

Directiva set: da valor a una referencia Puede darle valor a referencia variable simple: #set( $primate = "monkey" ) o variable lista: #set( $greatlakes = ["Superior","Michigan","Huron","Erie","Ontario"]) Puede darle valor a referencia propiedad: #set( $customer.behavior = $primate ) Alternativas para el valor asignado: Variable reference String literal Property reference Method reference Number literal ArrayList 7

Directiva if: generar texto según condiciones Generar un texto solo si una variable Velocity es verdadera o diferente de null: #if( $foo ) mi texto 1! continuacion texto 1 #end Varias alternativas de generación de texto según condiciones: #if( $foo1 ) mi texto 1! continuacion texto 1 #elseif( $foo2 ) mi texto 2! #else mi texto 3! #end 8

Directiva for: generar texto para cada elemento de una lista Ciclo que recorre una lista Velocity y generar texto para cada elemento: #foreach( $product in $allproducts ) texto para $product #end $allproducts es una variable Velocity de tipo Vector, Hashtable o Array, $product es variable auxiliar para referirse a un elemento en cada ciclo se incremente el contador $velocitycount (desde 1) Ejemplo de página JSP incluyendo el contador de Velocity en los textos generados: <table> #foreach( $customer in $customerlist ) <tr><td>$velocitycount</td><td>$customer.name</td></tr> #end </table> 9

macros Velocity: permiten factorizar textos a generar La definición de una macro le da nombre y opcionalmente parámetros: #macro( tablerows $color $somelist ) #foreach( $element in $somelist ) <tr><td bgcolor=$color>$element</td></tr> #end #end Al usar una macro desde una plantilla se debe indicar el valor de los parámetros: #set( $greatlakes = ["Superior","Michigan","Huron","Erie","Ontario"] ) #set( $color = "blue" ) <table> #tablerows( $color $greatlakes ) </table> 10

Los argumentos de las macros pueden ser de los siguientes tipos: Reference : anything that starts with '$' String literal : something like "$foo" or 'hello' Number literal : 1, 2 etc IntegerRange : [ 1..2] or [$foo.. $bar] ObjectArray : [ "a", "b", "c"] boolean value true boolean value false Los parámetros son pasados por nombre: significa que el texto valor de la macro es generado de nuevo cada vez que se invoca 11

Otras directivas #include : permite incluir un archivo de texto #parse : importa otra plantilla Velocity puede haber recursión #stop : detiene el procesador Veloctiy #break: detiene la actual directiva #evaluate: evalúa dinámicamente una referencia #define: asignar un bloque a una referencia 12

Uso básico de Velocity desde Java 13

Pasos para usar Velocity desde Java 1. Inicializar Velocity 2. Crear el contexto de Velocity 3. Añadir objetos datos al contexto 4. Seleccionar un template Velocity 5. Mezclar el template con los objetos datos para obtener el texto resultante. 14

Código básico Java para usar Velocity // 1- Inicializar Velocity Velocity.init(); // 2- crear contexto Velocity VelocityContext context = new VelocityContext(); // 3- poner objetos datos en el contexto context.put( "name", new String("Velocity") ); Template template = null; try{ // 4- seleccionar un template Velocity template = Velocity.getTemplate("mytemplate.vm"); } catch( ResourceNotFoundException rnfe ){ // couldn't find the template } catch( ParseErrorException pee ){ // syntax error : problem parsing the template } catch( Exception e ){... } StringWriter sw = new StringWriter(); // 5- mezclar el template con los objetos datos template.merge( context, sw ); 15

Cómo se usa Velocity en el framework CincoSOFT 16

Elementos que constituyen el framework de generación Generadores contemplados en el framework CincoSOFT generador del esqueleto del sistema generador del EJB de seguridad generador del módulo de seguridad generador de un EJB generador de un módulo generador de un caso de uso Cada generador: utiliza un conjunto de plantillas y macros utiliza un archivo de propiedades para darle valor a un conjunto de variables Velocity que aparecen en sus plantillas genera archivos fuentes de diversos tipos bajo el directorio del proyecto destino: fuentes Java, páginas, descriptores XML, ant, css, etc. 17

Plantillas Velocity correspondientes a una aplicación Java EE Organización genérica de plantillas Plantillas organizadas en subdirectorios correspondientes a los de una aplicación general (fuentes, páginas, etc.) paquete genérico com.project y nombres genéricos (por ejemplo Xxx para referirse a un EJB Toda plantilla da valor a la variable $path ruta en donde debe quedar el archivo generado ejemplo: ruta para la clase de un EJB:} #set( $path = "${javasrc}/com/${project}/component/${ejb}/ejb") C/ generador tiene un conjunto de variables Velocity que usa el conjunto de plantillas asociadas ejemplo: el generador de un EJB utiliza las plantillas Xxx.vm, XxxHome.vm, XxxEJB.vm, XxxDAO.vm dentro de las cuales utiliza las variables ${Ejb}, ${project}, ${module},etc. 18

Archivo de propiedades para un generador Ejemplo: EJBsession.properties propiedades para el generador de un EJB # name of velocity log file in current directory runtime.log = logs/velocity_ejbsession.log # paths of directories where the templates are located: file.resource.loader.path =../../macros,../../javasrc/com/project/component/xxx/ejb # name of the project in lower case: project = acmesimple # absolute root path of files to be generated: root = C:/ws-eclipsejee-3.4.2/acmesimple # path of java files, relative to root: javasrc = src # path of pages, relative to root: defaultroot = defaultroot # name of the ejb, in lower case : ejb = acmesimple # server type: weblogic, jboss: servertype =jboss 19

Procesador Velocity para un generador Inicializar Velocity (ejemplo: generador de un EJB) indicando archivo de propiedades extrayendo las propiedades y construyendo nuevas String path =../properties String propertiesfile = "EJBsession.properties"; Velocity.init(path + "/" + propertiesfile); String project = (String)Velocity.getProperty("project"); String Project = project.substring(0,1).touppercase() + project.substring(1); String root = (String)Velocity.getProperty("root"); String ejb = (String)Velocity.getProperty("ejb"); String Ejb = ejb.substring(0,1).touppercase() + ejb.substring(1); String servertype = (String)Velocity.getProperty("serverType");... 20

Crear el contexto Velocity colocando en el contexto las variables correspondientes a las propiedades context = new VelocityContext(); context.put("project", project); context.put("project", Project); context.put("root", root); context.put("ejb", ejb); context.put("ejb", Ejb); context.put("servertype", servertype);... 21

Procesar las plantillas del generador produciendo archivos en el proyecto destino se generan los archivos fuentes en el proyecto destino ubicado en la ruta indicada por la propiedad root y con el path relativo indicado por la variable $path que establece cada plantilla util = new UtilsVelocity(context, root, Project); util.processtemplate("xxx", Ejb + ".java"); util.processtemplate("xxxhome", Ejb + "Home.java"); util.processtemplate("xxxejb", Ejb + "EJB.java"); util.processtemplate("xxxdao", Ejb + "DAO.java");... 22

procesar una plantilla (clase UtilsVelocity) public String processtemplate (String fileprefix, String outputfilename) {... // obtener la plantilla: Template template = Velocity.getTemplate(filePrefix + ".vm"); // reemplazar en la plantilla variables // por valores del contexto: StringWriter sw = new StringWriter(); template.merge(context, sw); } // grabar el texto obtenido en el archivo destino File outdir = new File(root, path); outdir.mkdirs(); FileWriter writer = new FileWriter (root + "/" + path + "/" + outputfilename); writer.write(sw.tostring());... 23

Extender archivos existentes en el proyecto destino mediante macros un archivo a extender contiene en comentario invocación a una macro <application> <display-name>acme</display-name> <description>acme Application: full system </description> <!-- #section_application_ejb() -->... la macro reemplaza la linea central del comentario por un texto más un nuevo comentario que invoca la macro: #set( $path = "${defaultroot}/meta-inf") #macro (section_application_ejb) section for ${Ejb} ejb --> <module> <ejb>${ejb}_ejb.jar</ejb> </module> <!-- \#section_application_ejb() #end 24

procesador Velocity: procesar una macro // obtiene la macro y resuelve sus variables Velocity // con el valor de propiedades puestas en el contexto util.getmacro("macro-section-application_ejb"); // coloca en un subdirectorio de plantillas el archivo // a extender (a manera de plantilla) outputtext = util.textoffile("application.xml"); util.copytogenerated("applicationglobal_gen", outputtext); // procesa la plantilla del archivo a extender que // tiene la invocacion a la macro util.processtemplate("applicationglobal_gen", "application.xml");... 25

tratamiento de las propiedades que son listas Ejemplo: en el archivo de propiedades # list of ejbs used by the module: listejb = Contratos,Security Plantilla que usa la lista... #foreach ($nameejb in $listejb) import com.${project}.component.${nameejb}.ejb.${nameejb}; #end Captura en el procesador Velocity private Vector listejb = (Vector)Velocity.getProperty("listEJB");... context.put("listejb", listejb); 26

Otros lenguajes de plantillas: Jelly: http://apt-jelly.sourceforge.net/ FTL - FreeMarker Template Language: lo usa el generador JBoss Seam: http://fmpp.sourceforge.net 27