pegasus.javeriana.edu.copegasus.javeriana.edu.co/~cis1610ap01/docs/sdd.docx · web viewilustración...

24
Descripción del Diseño del Software

Upload: dangxuyen

Post on 01-Oct-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

Descripción del Diseño del Software

1. Tabla de Contenidos

1. Tabla de Contenidos.............................................................................................................2

2. Lista de Figuras.....................................................................................................................3

3. Lista de Tablas......................................................................................................................4

4. Introducción.........................................................................................................................5

5. Arquitectura.........................................................................................................................6

5.1. Vista de Procesos del Sistema......................................................................................6

5.2. Vista Física del Sistema.................................................................................................7

5.3. Vista Lógica del Sistema...............................................................................................9

6. Diseño Detallado................................................................................................................11

6.1. Estructura del Sistema................................................................................................11

6.1.1. Clase AnchurusLaravelGenerator..........................................................11

6.1.2. Paquete co.edu.javeriana.isml.generator.common....................12

6.1.3. Paquete co.edu.javeriana.anchurus.generator.laravel.generators............13

6.1.3. Paquete co.edu.javeriana.anchurus.generator.laravel.templates..............14

6.1.4. Paquete co.edu.javeriana.anchurus.generator.laravel.utils...............................18

7. Referencias.........................................................................................................................20

2. Lista de FigurasIlustración 1 Vista de los procesos de Anchurus..........................................................................6Ilustración 2 Diagrama de despliegue del sistema Anchurus-GEN...............................................7Ilustración 3 Diagrama de componentes de Anchurus-GEN.........................................................9Ilustración 4 Diagrama de paquetes de Anchurus-GEN..............................................................11Ilustración 8 Diagrama de clases del paquete co.edu.javeriana.isml.generator.common.........................................................12Ilustración 5 Diagrama de clases del paquete de generadores..................................................13Ilustración 6 Diagrama de clases del paquete de plantillas........................................................14Ilustración 7 Clase Utils..........................................................................................................18

3. Lista de TablasTabla 1 Proceso común a todo el sistema....................................................................................6Tabla 6 Descripción de los componentes de despliegue de Anchurus-GEN.................................8Tabla 7 Clase SimpleGenerator..........................................................................................12Tabla 8 Clase SimpleTemplate............................................................................................12Tabla 7 Clase ControllersGenerator..............................................................................13Tabla 8 Clase ModelsGenerator..........................................................................................13Tabla 9 Clase RoutesGenerator..........................................................................................14Tabla 10 Clase PagesGenerator..........................................................................................14Tabla 11 Clase MigrationsGenerator...............................................................................14Tabla 12 Clase ModelsTemplate..........................................................................................15Tabla 13 Clase ControllersTemplate...........................................................................................16Tabla 14 Clase PagesTemplate.............................................................................................17Tabla 15 Clase RoutesTemplate..........................................................................................17Tabla 16 Clase MigrationsTemplate.................................................................................17Tabla 17 Métodos de la clase Utils........................................................................................19

4. IntroducciónEste documento de diseño de software contiene la especificación general del diseño de software de Anchurus-GEN, así mismo contiene los diseños de cada uno de sus componentes y relaciones entre ellos. Anchurus-GEN está diseñado en el entorno de desarrollo integrado conocido como Eclipse, utilizando el lenguaje de programación Xtend [1], el cual es un dialecto de Java que permite trabajar con cadenas de caracteres más complejas. Este sistema se trata de un trabajo en progreso, así que puede ser susceptible a mejoras que posiblemente no impacten en el resultado final, desde que se siga el diseño provisto en estas páginas.

En primera instancia, en la sección 5 se tiene la vista arquitectural del sistema, con la vista de procesos en la sección 5.1 (da una idea de lo que puede hacer el usuario con el sistema) y la vista física en la 5.2 (como han de quedar los componentes de la máquina donde se ha de instalar el sistema). En la 5.3 se encuentra la vista lógica, que dice cómo se relaciona el sistema central con los componentes requeridos de software.

En segundo lugar, en toda la sección 6 se encuentra todo el desglose del sistema Anchurus-GEN, desde los paquetes que compone, hasta los métodos de todas las clases y qué es lo que hacen, pasando por la especificación de cada clase individual.

5. Arquitectura

5.1. Vista de Procesos del Sistema

Ilustración 1 Vista de los procesos de Anchurus

La anterior es la vista de procesos del sistema actual como está construido. Posee un proceso común a todo el sistema (que es lo que se hace antes de abrir la otra instancia de Eclipse), que es el siguiente:

Proceso DescripciónAbrir aplicación

El usuario accede a Eclipse con Anchurus-GEN instalado

Tabla 1 Proceso común a todo el sistema

Para conocer el resto del detalle de los procesos, remitirse al documento SRS en su sección 2.2 [2].

5.2. Vista Física del Sistema

Ilustración 2 Diagrama de despliegue del sistema Anchurus-GEN

La anterior ilustración muestra la manera de organización del sistema Anchurus-GEN apenas esté en producción. Se maneja en una única máquina (PC), que contiene instalada la máquina virtual de Java, la máquina virtual Vagrant y un navegador. Eclipse (ejecutándose en el entorno Java) genera código que se puede ejecutar desde PHP (dentro de Vagrant). La tabla a continuación explica cada elemento en detalle:

Nodo DescripciónPC Es la máquina donde se habrá de ejecutar el

generador de códigoEntorno de ejecución de JVM Se trata del conjunto de programas de software

que permiten ejecutar instrucciones y están escritos en bytecode de Java. [3]

Eclipse Se trata de una plataforma que ha sido diseñada desde las bases para desarrollar web y aplicaciones. El valor de la plataforma es lo que propone: rápido desarrollo de características integradas basado en un modelo de plug-ins. [4]

co.edu.javeriana.anchurus.generator.laravel Es el sistema propiamente dicho, cuya mayor especificación se encuentra en el diagrama de clases del diseño detallado.

Plugin Xtext Marco de trabajo para el desarrollo de

lenguajes de programación y lenguajes de dominio específico. [5]

ISML-MDE Plugin Conjunto de todos los plugins que permiten manipular modelos en ISML y hacer generación de código a partir de ellos.

org.antlr.runtime Es un componente que brinda análisis léxico y sintáctico que sirve de entrada para la generación de código mediante la herramienta ANTLR. [6]

EMF Se trata del framework para el tratamiento de metamodelos en Eclipse. [7]

org.eclipse.runtime Son los cimientos de Eclipse. Como proyecto por aparte dentro de Eclipse, abre otra instancia del IDE en tiempo de ejecución. [8]

Navegador Cualquier cliente ligero con capacidad de poder mostrar sitios Web (específicamente los escritos en PHP).

Vagrant/Homestead Vagrant es una máquina virtual que permite crear y configurar entornos de desarrollo portables, de bajo peso y reproducibles, tales como Homestead, que es la máquina virtual de Laravel [9].

Apache Se trata de un esfuerzo colectivo de desarrollo de software dirigido a crear una implementación de un servidor HTTP robusto y de código abierto [10].

PHP Lenguaje de scripting que puede ser insertado en páginas HTML, con sintaxis basada en C, Java y Perl. Permite al desarrollador escribir páginas generadas dinámicamente con rapidez [11].

MySQL Se trata del gestor de bases de datos de código abierto SQL más popular, desarrollado por Oracle. [12]

Tabla 2 Descripción de los componentes de despliegue de Anchurus-GEN

5.3. Vista Lógica del Sistema

Ilustración 3 Diagrama de componentes de Anchurus-GEN

El sistema Anchurus-GEN tiene un total de seis componentes, cinco de los cuales proveen interfaz a Anchurus.

1. co.edu.javeriana.anchurus.generator.laravel: Es donde se encuentra el sistema propiamente dicho, cuya mayor especificación se encuentra en el diagrama de clases del diseño detallado.

2. org.eclipse.core.runtime: Son los cimientos de Eclipse. Como proyecto por aparte dentro de Eclipse, abre otra instancia del IDE en tiempo de ejecución. [8]

3. org.eclipse.antlr.runtime: Es un componente que brinda análisis léxico y sintáctico para efectos de la generación de código mediante la herramienta ANTLR. [6]

4. Plugin Xtext: Marco de trabajo para el desarrollo de lenguajes de programación y lenguajes de dominio específico. [5]4.1. org.eclipse.xtext: Se trata del componente raíz de Xtext, que colabora con el

procesamiento del lenguaje textual. [5]4.2. org.eclipse.xtext.util: Trabaja en el procesamiento del texto y en la construcción del

árbol de sintaxis del lenguaje textual. [13]4.3. org.eclipse.xtext.common.types: Este componente trabaja directamente en la

máquina virtual de Java y trabaja sobre el tipado de Xtext. [14]5. EMF: Se trata del framework para el tratamiento de modelos y metamodelos en Eclipse.

[5]

5.1. org.eclipse.emf.common: Funciones comunes para el manejo de modelos y metamodelos en Eclipse. [7]

5.2. org.eclipse.emf.ecore: Es una API para el metamodelo conocido como Ecore, del EMF. [15]

6. ISML-MDE Plugin: Conjunto de todos los plugins que permiten manipular modelos en ISML y hacer generación de código a partir de ellos.6.1. co.edu.javeriana.isml: Se trata del paquete raíz de ISML, donde se encuentran todos

los constructos del lenguaje.6.2. co.edu.javeriana.isml.generator: Es la API de ISML para generación de código hacia

otros lenguajes, como Java EE o PHP.

6. Diseño DetalladoEn esta sección se explicará la estructura detallada del sistema Anchurus-Gen y cómo crea los objetos de Laravel generados: las migraciones que crearán tablas en la base de datos, los modelos que representarán los objetos de la BD, las páginas (aquellas que le dan cuerpo al sitio web hecho en Laravel), las rutas que conectarán entre sí las páginas y los controladores que tendrán por debajo la actividad que hace la página en segundo plano.

6.1. Estructura del Sistema

Ilustración 4 Diagrama de paquetes de Anchurus-GEN

Este diagrama de paquetes muestra la estructura general del sistema: una clase que hace las veces de “main” que es AnchurusLaravelGenerator, que depende de las clases del paquete co.edu.javeriana.anchurus.generator.laravel.generators y este a su vez, depende de los paquetes co.edu.javeriana.anchurus.generator.laravel.templates y co.edu.javeriana.anchurus.generator.laravel.utils (el primero depende del segundo también). El paquete externo, co.edu.javeriana.isml.generator.common, es separado pero adquiere protagonismo cuando se profundice en la labor de cada uno de los paquetes.

6.1.1. Clase AnchurusLaravelGenerator

Como se mencionó, es la clase maestra del proyecto y es donde parte toda la tarea de generación de código del sistema. Tiene 7 atributos estáticos y finales y un método. La función de cada uno de los valores de los atributos es servir de conexión entre el sistema y el archivo de configuración JSON en el proyecto donde se generará el código, con el fin de crear los directorios donde se emplazarán los archivos de código generado. Dicho así, el atributo

CONTROLLERS es la conexión con los archivos de controladores, MIGRATIONS con los archivos de migraciones, MODELS con los archivos de modelos, PAGES con los archivos de las páginas, ROUTES con el archivo de rutas, SERVICE_IMPL debe hacerlo con la implementación de los servicios y SERVICE_INTERFACE con la declaración de los servicios. La función del método getGenerators() es crear la instancia de cada generador de código del paquete laravel.generators.

6.1.2. Paquete co.edu.javeriana.isml.generator.common

Ilustración 5 Diagrama de clases del paquete co.edu.javeriana.isml.generator.common

Estas son dos de las clases del paquete co.edu.javeriana.isml.generator.common, que como su nombre indica, tiene herramientas comunes para trabajar con ISML. Su desglose se puede ver en las siguientes tablas:

Clase SimpleGeneratorDescripción Es la clase madre de los generadores del

paquete generators.Método DescripciónString getFileName(T) Da nombre al archivo que se generará.String getOutputConfigurationName()

Recupera un nombre identificador único para el generador. Dicho identificado permite localizar la configuración de dicho generador en el archivo generation.conf.json.

SimpleTemplate<T> getTemplate()

Obtiene la plantilla de la cual se generará el archivo.

Tabla 3 Clase SimpleGenerator

Clase SimpleTemplateDescripción Es la superclase de las plantillas del paquete

templates.Método Descripciónvoid preprocess(T) Provee todo lo necesario antes de procesar la

plantilla que va a derivar en el archivo que se va a generar.

CharSequence template(T) La plantilla que dará lugar al archivo a

generar.Tabla 4 Clase SimpleTemplate

6.1.3. Paquete co.edu.javeriana.anchurus.generator.laravel.generators

Ilustración 6 Diagrama de clases del paquete de generadores

Este paquete contiene cinco clases que heredan de la clase abstracta SimpleGenerator del paquete co.edu.javeriana.isml.common, que se explicó arriba. Las clases de este paquete son las generadoras de los objetos en PHP, que se apoyan en los templates a los que llaman en sus métodos getTemplate(). Todas las clases tienen tres métodos que hacen exactamente lo mismo: obtener el nombre de configuración de salida (hacia el archivo json) de la clase específica (métodos getOutputConfigurationName()), getTemplate() que crea una instancia de cada template del paquete co.edu.javeriana.anchurus.generator.laravel.templates y getFileName(T) (reemplazando T por cada clase de entrada), obtiene el nombre del archivo, pero de una manera distinta según el caso. Las siguientes tablas muestran un desglose del funcionamiento de cada método según cada clase:

Método / Clase ControllersGeneratorgetTemplate() Crea un nuevo ControllersTemplategetOutputConfigurationName()

Recupera el atributo CONTROLLERS de la clase AnchurusLaravelGenerator

getFileName(T)T es un controlador.Da nombre al archivo del controlador generado, con el nombre del controlador de ISML.

Tabla 5 Clase ControllersGenerator

Método / Clase ModelsGeneratorgetTemplate() Crea un nuevo ModelsTemplategetOutputConfigurationName()

Recupera el atributo MODELS de la clase AnchurusLaravelGenerator

getFileName(T) T es una entidad.

Da nombre al archivo del modelo generado, con el nombre de la entidad de ISML.

Tabla 6 Clase ModelsGenerator

Método / Clase RoutesGeneratorgetTemplate() Crea un nuevo ModelsTemplategetOutputConfigurationName()

Recupera el atributo ROUTES de la clase AnchurusLaravelGenerator

getFileName(T)T es una lista de controladores.Da nombre al archivo del modelo generado bajo el estándar de PHP.

Tabla 7 Clase RoutesGenerator

Método / Clase PagesGeneratorgetTemplate() Crea un nuevo PagesTemplategetOutputConfigurationName()

Recupera el atributo PAGES de la clase AnchurusLaravelGenerator

getFileName(T)T es una página.Da nombre al archivo de la página generada, con el nombre de la página de ISML.

Tabla 8 Clase PagesGenerator

Método / Clase MigrationsGeneratorgetTemplate() Crea un nuevo MigrationsTemplategetOutputConfigurationName()

Recupera el atributo MIGRATIONS de la clase AnchurusLaravelGenerator

getFileName(T)T es una entidad.Da nombre al archivo de migraciones, con una fecha y una hora, y el nombre de la entidad de ISML.

Tabla 9 Clase MigrationsGenerator

6.1.3. Paquete co.edu.javeriana.anchurus.generator.laravel.templates

Ilustración 7 Diagrama de clases del paquete de plantillas

Este paquete tiene cinco clases que heredan de la clase abstracta SimpleTemplate del paquete co.edu.javeriana.isml.common, explicado arriba. Cada una de estas clases retorna en su método template() una secuencia de caracteres (CharSequence) que es el cuerpo del objeto en PHP que está generando.

El desglose de cada clase está en las siguientes tablas:

Clase ModelsTemplateDescripción La clase que tiene la capacidad de traducir las

entidades ISML a modelos en PHP.Método Descripciónvoid preprocess(Entity) No tiene ninguna utilidad este método. Se

declara porque hereda de la clase abstracta.CharSequence template(Entity) Este método genera el archivo de modelo

PHP para la entidad que se le pasa por parámetro.

Tabla 10 Clase ModelsTemplate

Clase ControllersTemplateDescripción Esta clase tiene la capacidad de

traducir los controladores en ISML a sus contrapartes en PHP.

Método Descripciónvoid preprocess(Controller) Este método llena dos listas al mismo

tiempo que permiten, a posteriori, ser utilizadas en el método template() para llenar las sentencias use de la cabecera del

controlador.CharSequence template(Controller) Este método genera el archivo de

controlador PHP para el controlador que se le pasa por parámetro.

CharSequence generateAttributes(Attribute)

Este método convierte la declaración de atributo de ISML pasado por parámetro a su equivalente en formato PHP.

CharSequence generateFunction(Action)

Este método genera el código PHP de una función, desde la acción de ISML pasada por parámetro.

CharSequence generateBody(List<MethodStatement>)

Este método genera el cuerpo de la función de PHP, desde una lista de sentencias de método de ISML.

CharSequence generateMethodStatement(MethodStatement)

En realidad no es un solo método sino doce métodos distintos con la marca dispatch, que generan las distintas partes de una función en PHP, a saber: sentencias if, asignaciones, retornos, ciclos (for (en PHP serían foreach) y while), llamado a otros métodos, tipos, referencia a variables y retorno a páginas (vistas).

CharSequence generateParams(Parameter)

Este método genera formato para el parámetro dado, distinguiendo entre parámetros que sean Entidades de ISML y otro tipo de parámetros.

CharSequence getParameters(Action) Este método genera una cadena separada por comas, que son los parámetros formales del método en PHP, desde una acción de ISML pasada por parámetro.

Tabla 11 Clase ControllersTemplate

Clase PagesTemplateDescripción Esta clase tiene la capacidad de traducir una

página de ISML a su equivalente en PHP.Método Descripciónvoid preprocess(Page) No tiene ninguna utilidad este método. Se

declara porque hereda de la clase abstracta.CharSequence template(Page) Este método genera el archivo de la página

PHP desde la página ISML pasada por parámetro.

CharSequence pageParts(EList<ViewStatement>)

Este método delega a otro la generación de cada elemento pasado en la lista de partes pasada por parámetro.

CharSequence plantillaParte(ViewInstance)

Este método despacha a 12 métodos diferentes que son los que generan cada widget de la página, el que recibe una IfView retorna una sentencia if con formato de Blade, el que recibe una

ForView hace lo propio con los for con formato de Blade e igualmente con las Reference.

CharSequence label(ViewInstance)

Este método convierte la ViewInstance (label) pasada como parámetro en un Label con formato de Blade.

CharSequence getId(ViewInstance)

Este método genera un identificador único para la ViewInstance pasada como parámetro.

CharSequence inputText(ViewInstance)

Este método convierte la ViewInstance (Text) pasada como parámetro en un InputText con formato de Blade.

CharSequence button(ViewInstance)

Este método convierte la ViewInstance (Button) pasada como parámetro en un Button con formato de Blade.

CharSequence form(ViewInstance)

Este método convierte la ViewInstance (form) pasada como parámetro en un Form con formato de Blade.

CharSequence panel(ViewInstance)

Este método convierte la ViewInstance (Panel) pasada como parámetro en un div con formato HTML.

CharSequence dataTable(ViewInstance)

Este método convierte la ViewInstance (DataTable) pasada como parámetro en una tabla con formato HTML.

CharSequence generateHead(NamedViewBlock)

Este método genera la primera fila de la tabla.

CharSequence generateBody(NamedViewBlock)

Este método delega a otro método la generación del cuerpo de la tabla.

CharSequence templateForLoopTables(ForView)

Este método genera las celdas que no son de primera fila de la tabla (el cuerpo de la tabla).

CharSequence password(ViewInstance)

Este método convierte la ViewInstance (Password) pasada como parámetro en un Password con formato de Blade.

CharSequence checkBox(ViewInstance)

Este método convierte la ViewInstance (CheckBox) pasada como parámetro en una CheckBox con formato de Blade.

CharSequence image(ViewInstance)

Este método convierte la ViewInstance (Image) pasada como parámetro en una Image con formato de Blade.

Tabla 12 Clase PagesTemplate

Clase RoutesTemplateDescripción Esta clase tiene la capacidad de traducir una

lista de controladores al archivo de rutas de PHP.

Método Descripciónvoid preprocess(List<Controller>)

Este método llena dos listas al mismo tiempo que permiten, a posteriori, ser utilizadas en el método template().

CharSequence template(List<Controller>)

Este método genera el archivo de rutas PHP para la lista de controladores que se le pasa

por parámetro.CharSequence generateParameters(Action)

Este método formatea la lista de parámetros de una acción de tal manera que puedan ponerse en la URL relativa para esa acción.

Tabla 13 Clase RoutesTemplate

Clase MigrationsTemplateDescripción Esta clase tiene la capacidad de traducir una

entidad a una migración de PHP.Método Descripciónvoid preprocess(Entity) No tiene ninguna utilidad este método. Se

declara porque hereda de la clase abstracta.CharSequence template(Entity) Este método genera el archivo de la

migración de PHP desde la entidad ISML pasada por parámetro.

CharSequence generateType(Attribute)

Este método genera cada atributo para la tabla que será hecha en la migración.

Tabla 14 Clase MigrationsTemplate

6.1.4. Paquete co.edu.javeriana.anchurus.generator.laravel.utils

Ilustración 8 Clase Utils

Esta clase se compone únicamente de métodos, 13 en total, que sirven a cualquiera de las 10 clases de los 2 paquetes anteriores.

Método DescripciónCalendar date() Devuelve la instancia actual del

calendario (en otras palabras, obtiene la fecha y la hora actual).

CharSequence generateArray(ViewInstance)

Este método recibe una instancia de vista de ISML y devuelve un arreglo construido con el formato de PHP, con el fin de ser utilizado en el método valueTemplate en el caso donde la expresión ISML sea una ViewInstance.

CharSequence generateParametersActionCall(ActionCall)

Este método genera los parámetros reales del llamado a acción pasado por parámetro.

CharSequence generateReferencedElement(Reference)

Este método genera los elementos referenciados de la referencia pasada por parámetro.

CharSequence generateTailedElement(VariableReference)

Este método genera la referencia pasada por parámetro con su cola (de manera recursiva, si la cola también tiene cola, se va a generar también).

CharSequence getParameters(ParameterizedReference<?>)

Este método genera también parámetros reales, pero esta vez es de referencias parametrizadas que pueden ser de cualquier clase.

boolean hasTail(Reference) Pregunta si una referencia dada tiene cola o no (devuelve verdadero o falso en uno u otro caso).

String namedUrlForActionCall(ActionCall)

Este método genera la URL relativa de un llamado a acción pasado por parámetro.

String namedUrlForController(Controller)

Este método genera un nombre para el controlador con tal de que sea compatible con URLs del sistema de rutas de la aplicación (convirtiendo el nombre del controlador a Kebab Case desde Camel Case mayúscula).

String toKebabCase(String) Convierte la cadena en formato Camel Case minúscula a Kebab Case minúscula, ayudándose de un método estático de Google Case Format.

String toSnakeCase(String) Convierte la cadena en formato Camel Case minúscula a Snake Case minúscula, ayudándose de un método estático de Google Case Format.

CharSequence valueTemplate(Expression)

Convierte la expresión ISML pasada por parámetro a una u otra cadena, según su tipo.

CharSequence valueTemplateForEntities(Expression)

Versión mejorada del método valueTemplate con un formato diferente de retorno si la expresión es un elemento referenciado y encima este elemento es una entidad.

Tabla 15 Métodos de la clase Utils

7. Referencias

[1] The Eclipse Foundation, «Xtend,» [En línea]. Available: http://www.eclipse.org/xtend/. [Último acceso: 6 Mayo 2016].

[2] F. S. Franco Hernández, Documento de requerimientos de software, Bogotá: Pontificia Universidad Javeriana, 2016.

[3] Oracle, «Conceptos útiles y glosario de definiciones,» [En línea]. Available: https://www.java.com/es/download/faq/helpful_concepts.xml. [Último acceso: 5 Mayo 2016].

[4] The Eclipse Foundation, «Eclipse Documentation - Current Release,» 2015. [En línea]. Available: http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Fguide%2Fint_eclipse.htm. [Último acceso: 5 Mayo 2016].

[5] The Eclipse Foundation, «Xtext,» [En línea]. Available: https://eclipse.org/Xtext/. [Último acceso: 29 Abril 2016].

[6] ArchLinux User Repository, «Package Details: eclipse-user-runtime 3.0.0-3,» 2 Abril 2016. [En línea]. Available: https://aur.archlinux.org/packages/eclipse-antlr-runtime/. [Último acceso: 29 Abril 2016].

[7] The Eclipse Framework, «Eclipse Modeling Framework,» [En línea]. Available: https://eclipse.org/modeling/emf/. [Último acceso: 29 Abril 2016].

[8] The Eclipse Foundation, «Core,» [En línea]. Available: https://www.eclipse.org/eclipse/platform-core/. [Último acceso: 29 Abril 2016].

[9] HashiCorp, «Vagrant,» [En línea]. Available: https://www.vagrantup.com/. [Último acceso: 5 Mayo 2016].

[10]

The Apache Software Foundation, «About Apache,» [En línea]. Available: https://httpd.apache.org/ABOUT_APACHE.html. [Último acceso: 5 Mayo 2016].

[11]

PHP Group, «Información general,» [En línea]. Available: https://secure.php.net/manual/es/faq.general.php. [Último acceso: 5 Mayo 2016].

[12]

Oracle, «What is MySQL?,» [En línea]. Available: https://dev.mysql.com/doc/refman/5.7/en/what-is-mysql.html. [Último acceso: 5 Mayo 2016].

[13]

The Eclipse Foundation, «Package org.eclipse.xtext.util,» [En línea]. Available: http://download.eclipse.org/modeling/tmf/xtext/javadoc/2.3/org/eclipse/xtext/util/package-summary.html. [Último acceso: 29 Abril 2016].

[14]

The Eclipse Foundation, «Package org.eclipse.xtext.common.types,» [En línea]. Available: http://download.eclipse.org/modeling/tmf/xtext/javadoc/2.3/org/eclipse/xtext/common/types/package-summary.html. [Último acceso: 29 Abril 2016].

[15]

The Eclipse Foundation, «Package org.eclipse.emf.ecore,» [En línea]. Available: http://download.eclipse.org/modeling/emf/emf/javadoc/2.9.0/org/eclipse/emf/ecore/package-summary.html#details. [Último acceso: 29 Abril 2016].

[16]

JSON, «Introducción a JSON,» [En línea]. Available: http://www.json.org/json-es.html. [Último acceso: 6 Mayo 2016].