Velocity
Motivación PDF Imprimir Correo electrónico

Velocity es una máquina de generación de código basada en plantillas descritas en VTL (Velocity Templating Language) para referenciar objetos en Java. Su utilidad es diversa desde aplicaciones web, generación de scripts, reportes, código fuente hasta utilidad para integración de diferentes sistemas. En este tutorial daremos una introducción al lenguaje VTL utilizando una plantilla para la generación de código fuente a través del motor de velocity.

 
Prerrequisitos PDF Imprimir Correo electrónico

Para la ejecución de este tutorial es necesario que se encuentre familiarizado con el desarrollo de aplicaciones Java, es necesario conocer el ambiente de desarrollo Eclipse. El proceso de desarrollo que se seguirá es una extensión a una aplicación sencilla stand-alone.

 
Enunciado PDF Imprimir Correo electrónico

Se desea construir un editor de dibujo (llamado Paint ) que permita crear dibujos que contengan líneas, rectángulos y figuras ovaladas. Las líneas deben tener asociados un color, un punto inicial, un punto final, un texto, un tipo de letra ( font ), al igual que un ancho y un tipo de línea (punteada, continua, etc.) Los rectángulos deben estar definidos por dos puntos, por un texto con su tipo, por un color de fondo, y por el tipo de línea que debe dibujarse sobre el perímetro. Las figuras ovaladas están definidas por dos puntos, los cuales describen el rectángulo en el cual está incluida la figura, por un texto con su tipo, por un color de fondo y por el tipo de línea del borde del óvalo.

Las opciones que debe ofrecer el programa son: (1) agregar una nueva figura al dibujo sin ningún texto asociado, dando la información necesaria para crearla (los puntos, los colores, etc.), (2) seleccionar una de las figuras que hacen parte del dibujo, (3) eliminar la figura seleccionada del dibujo, (4) cambiar el texto asociado con la figura seleccionada, (5) salvar el dibujo en un archivo y (6) cargar de un archivo un dibujo.

Es importante que cada vez que el usuario vaya a salir del programa sin haber salvado su trabajo o cuando vaya a cargar un nuevo dibujo sin haber hecho persistir las modificaciones del actual, el editor le pregunte al usuario si desea salvar antes de continuar.

La persistencia se debe hacer en archivos secuenciales de texto, utilizando para esto cualquier formato decidido por el programador, pero permitiendo que los archivos se puedan visualizar y modificar desde un editor de texto. Esto puede facilitar en algunos casos la creación de dibujos desde un programa.

La principal restricción del editor es que debe estar construido de manera que sea fácilmente extensible, con nuevas figuras y nuevos requerimientos funcionales.

Restricciones

Se describe a continuación el formato del archivo con el que la aplicación Paint guarda los dibujos realizados en ella.

<número de figuras>
<tipo de figura>
<x1>;<y1>;<x2>;<y2>
<componente rojo línea>;<componente verde línea>;<componente azul línea>;
<fuente texto>;<estilo texto>;<tamaño texto>
<texto>
<ancho>;<tipo de extremo>;<tipo de unión>;<límite ángulo>;<patrón punteo>;<inicio punteo>
[<componente rojo fondo>;<componente verde fondo>;<componente azul fondo>;]

A continuación se detalla la información del formato:

  • La primera línea indica el número de figuras contenidas en el archivo. De ahí en adelante hay 7 líneas por cada figura rellena y 6 por cada figura no rellena.
  • La primera línea de una figura indica su tipo. Puede ser RECTANGULO, OVALO o LINEA.
  • La segunda línea de una figura tiene los valores y e x de los dos puntos que definen la figura. Las coordenadas están separados por “;”
  • La tercera línea indica los valores de los componentes Rojo, Verde y Azul del color en el sistema RGB de la línea de la figura.
  • La cuarta línea indica los atributos de la fuente usada para mostrar el texto. La primera parte indica el nombre de la fuente, la segunda indica el estilo (usando las constantes definidas en la clase java.awt.Font) y la tercera indica el tamaño de la fuente.
  • La quinta línea contiene el texto que se muestra en la figura.
  • La sexta línea contiene los parámetros para construir el tipo de línea. Los parámetros son:
    • Ancho de línea.
    • Tipo de extremo o terminación de la línea.
    • Tipo de unión cuando dos líneas se encuentran (recta, angular o redonda).
    • Si el tipo de unión es angular, el valor que limita la formación del ángulo que se crea entre las líneas.
    • Patrón de punteo de la línea. Todos los valores del patrón se separan por espacio en blanco.
    • Desfase sobre el patrón de punteo para comenzar a dibujar la línea

    Estos parámetros deben tener como valores, los valores esperados por la clase BasicStroke de Java que se encarga de decorar las líneas de las diferentes figuras. Los parámetros se encuentran en el mismo orden que en el constructor de la clase (float width, int cap, int join, float miterlimit, float[] dash, float dash_phase). Los valores del arreglo “dash” se encuentran separados por espacios.

  • La séptima línea (contenida sólo en las figuras rellenas) indica los valores de los componentes Rojo, Verde y Azul del color en el sistema RGB del fondo de la figura.

A continuación se presenta un ejemplo del archivo que el editor Paint guarda y lee:

1
RECTANGULO
70;40;312;238
0;0;0
Arial;0;12
Rectángulo 1
1.0;1;1;1.0;10.0 0.0;0.0
153;153;255

Generador de Código

Para cubrir la restricción de extensibilidad, desarrollaremos un nuevo requerimiento funcional que permite seleccionar superclases y crear el esqueleto básico de nuevas subclases.

La extensibilidad es un requerimiento no funcional que debe estar soportado en el diseño de la aplicación pero facilitaremos la implementación a través de este generador.

El generador permite seleccionar la clase de la cual se hereda y crea el código con los atributos y métodos que hacen parte de la herencia (abstractos y protegidos).Permite crear nuevas clases que modelen figuras que pertenezcan a la jerarquía. Se debe hacer reutilización de código de manera que sea una estrategia para la evolución sencilla y a bajo costo.

Interfaz

 

 
Requerimientos Funcionales PDF Imprimir Correo electrónico

Nombre

R1- Agregar una figura.

Resumen

El usuario selecciona un tipo de figura y sus características y después de marcar dos puntos sobre la superficie del editor se agrega una figura con las características indicadas, la cual se ubica entre los dos puntos.

Los tipos de figura pueden ser:

  • Línea: la línea se crea entre los dos puntos.
  • Rectángulo: el rectángulo se crea tomando los dos puntos como esquinas opuestas.
  • Óvalo: el óvalo se crea inscrito dentro de un rectángulo que tiene como esquinas opuestas a los dos puntos indicados.

Entradas

Tipo de Figura

Punto 1

Punto 2

Tipo de Línea

Color de la Línea

Color de Fondo (Sólo en el caso de óvalos y rectángulos)

Resultados

Se agregó la figura a la composición

 

Nombre

R2- Modificar el texto de una figura.

Resumen

El usuario puede modificar el texto y la fuente usada de una figura

Entradas

Texto

Nombre de la Fuente

Estilo (normal, negrita, cursiva)

Tamaño

Tipo de Línea

Resultados

Se modificó el texto de una figura

 

Nombre

R3- Eliminar una figura.

Resumen

Retira de la composición la figura seleccionada.

Entradas

Figura a eliminar

Resultados

Se eliminó la figura seleccionada de la composición

 

Nombre

R4- Seleccionar una figura.

Resumen

Selecciona la figura.

Entradas

Figura a seleccionar

Resultados

Se seleccionó la figura especificada

 

Nombre

R5- Cargar un dibujo.

Resumen

Carga un dibujo a partir de un archivo.

Entradas

Nombre del archivo en el que se encuentra el dibujo

Resultados

Se cargó el dibujo a partir del archivo dado

 

Nombre

R6- Guardar un dibujo.

Resumen

Guarda el dibujo que se encuentra cargado actualmente.

Entradas

Nombre del archivo en el que se va a guardar el dibujo.

Resultados

Se guardo el dibujo cargado actualmente.

 

Nombre

R7- Crear nuevas clases para figuras.

Resumen

Permite crear nuevas clases que modelen figuras que pertenezcan a la jerarquía. Se debe hacer reutilización de código de manera que sea una estrategia para la evolución sencilla y a bajo costo.

Entradas

Nombre de la clase que se va a crear.

Nombre de la superclase de la que se hereda.

Resultados

Se crea una nueva clase con la estructura básica de la superclase.

 

 
Requerimientos No Funcionales PDF Imprimir Correo electrónico

Tipo

Persistencia

Descripción

  • La información del modelo del mundo debe poder ser persistente.
  • Se deben usar archivos secuenciales de texto para almacenar la información y estos archivos se deben poder visualizar y modificar con cualquier editor de texto.

 

Tipo

Extensibilidad

Descripción

  • El programa debe estar diseñado de tal manera que su evolución sea sencilla y a bajo costo, permitiendo así integrar nuevos tipos de figuras y nuevos requerimientos funcionales.

 

Tipo

Visualización e interacción

Descripción

  • Para la creación de las figuras, el usuario debe poder utilizar el ratón directamente sobre la zona de edición, para indicar sus coordenadas.
  • El usuario debe poder seleccionar una figura del dibujo haciendo clic sobre ella.
 
<< Inicio < Anterior 1 2 3 4 Siguiente > Fin >>

Página 1 de 4