Desarrollo de DSL visuales con Sirius

SIRIUS

Presentación

Sirius es un proyecto Eclipse que nos permite crear fácilmente DSLs, definiendo nuestro propio entorno de trabajo, para resolver problemas específicos, mediante el uso de las tecnologías proporcionadas por las tecnologías de Eclipse Modeling y los conocimientos que sostienen la implementación de los lenguajes gráficos específicos de dominio.

Pretende ser una solución simple, madura y completa de capacidades. Partiendo de un modelo nos permite crear una representación del mismo a partir de la creación de una representación en Sirius a modo de diagrama, tabla o árbol. Cada particularización de estas representaciones se llaman viewpoints y están apoyadas en el estándar ISO/IEC-42010 donde se especifica que la misma información puede ser representada de manera sincronizada en diagramas, tablas y editores en modo árbol. Siris está construido sobre EMF y GMF. Se apoya en Eclipse Acceleo, y otros proyectos, para facilitar el establecimiento de las relaciones entre los datos del modelo y su representación gráfica.

En defintiva, el usuario puede crear, editar y visualizar los modelos y metamodelos de manera gráfica desde los viewpoints seleccionados previamente. Nos permite definir rápidamente espacios de trabajo con múltiples vistas según sean nuestras necesidades.

La evolución de Sirius se orienta a que el requisito para usar la herramienta sea tener unos conocimientos técnicos los más mínimos posibles.

Sirius proporciona diferentes características según la naturaleza del usuario de la herramienta. Se basa en una clara separación entre el entorno de creación que proporciona como framework de las preocupaciones particulares del negocio al que pretende aportar una solución.

Para especificadores / desarrolladores / arquitectos:

  • La capacidad de crear herramientas como editores gráficos que representan los datos como diagramas, tablas y árboles.
  • La posibilidad de integrar y liberar el editor creado dentro de Eclipse o como una aplicación RCP.
  • El poder mejorar entornos existentes mediante especialización y extensión.
  • Proporciona feedback inmediato y es altamente personalizable.

Para los usuarios finales de los editores gráficos creados Sirius proporciona:

  • Un editor de modelos, especializado y con múltiples opciones preparadas por el especificador, para que puedan crear sus propios modelos, sin tener que escribir código, adaptado a las necesidades del usuario.
  • Sincronización entre los diferentes editores proporcionados.

Actualmente se encuentra en su versión 2.0 estando incluido en Eclipse de manera oficial.

Las mejoras incluidas en esta versión 2.0 se centran en mejorar la experiencia del uso del editor de diagramas, arreglando los problemas conocidos del comportamiento por defecto de GMF en tiempo de ejecución, incorporando capacidades últiles para los usuarios que hacen un uso intensivo de los diagramas:

  • Poder distribuir las figuras de manera automática.
  • Poder forzar que las relaciones se hagan hacia un punto de la figura, como el centro.
  • Se muestran líneas-guía para poder situar los elementos.
  • Inserción de elementos ajustados a un grid.
  • Rubberband para poder seleccionar varios elementos.
  • Vista previa del diagrama completo (outline).

En cuanto al rendimiento y escalabilidad trabajan en eliminar los cuellos de botella del sistema. En el proyecto se está trabajando en las bases de EcoreTools con un proyecto de pruebas suficientemente grande para dectectar cuellos de botella, uso de la CPU y memoria. El proyecto de pruebas está abierto a todo el que quiera usarlo para reproducir problemas y tomar medidas por sí mismo.

Se ha incluido la capacidad de poder reusar componentes sin interfaz gráfica, pudiendo cargar la representación de un recurso, crear un diagrama, modificar el modelo.. Está pensado para ser usado, por ejemplo, en la parte del servidor o en procesos de integración continua.

Características y Capacidades

Podemos clasificar las capacidades de la herramienta en dos grupos principales: aquellas características propias de la creación de la herramienta de modelado (especificadores) y las propias del usuario de la herramienta de modelado (usuarios).

Sirius para Especificadores

Sirius nos permite crear un editor gráfico sin escribir código fuente:

  • El editor gráfico es descrito en un fichero de configuración que es serializado en formato XML. Es un formato abierto y consultable.
  • El editor gráfico es editado con un editor gráfico dedicado. No tenemos que tratar con complicados XMLs para crear nuestros editores.
  • La especificación del editor gráfico y sus herramientas asociadas son especificadas e interpretadas en tiempo de ejecución. El editor puede ser probado directamente durante su creación, en un entorno de especificador.

Como hemos comentado en los apartados anteriores Sirius se basa en el concepto de Viewpoint. Un editor gráfico creado con Sirius proporciona viewpoints/vistas adaptadas a la actividad de un usuario o a su función. Así proporciona al especificador poder ofrecer la usuario una manera sencilla de seleccionar representaciones útiles, limitadas a un conjunto de problemas particulares.

Por ejemplo, podemos ver en la siguiente imagen como UMLDesigner nos ofrece varias viewpoints a la hora de acometer los trabajos de diseño UML.

Viewpoint selection

Cada viewpoint corresponde a un conjunto de representaciones que son personalizables. Sirius soporta como representaciones: diagramas, tablas, árboles y diagramas de secuencia. Los elementos de cada viewpoint se pueden compartir entre representaciones. Esto permite reducir trabajo, pudiendo reusar componentes de una vista a otra.

Las representaciones gráficas de nuestros modelos se sincronizan con el modelo EMF. Esto provoca que, cualquier cambio en el modelo, se refleja automáticamente en los elementos afectados de la representación gráfica.

Para poder manejar modelos complejos Sirius proporciona mecanismos para que podamos centrar la atención en los elementos que son de nuestro interés:

  • Estilos condicionales. Podemos cambiar la representación gráfica de los objetos dependiendo de su tipo o propiedad. Por ejemplo, en la imagen siguiente las órdenes de tipo Attack se representan en rojo y con un círculo y las órdenes de tipo Support se presentan en verde y con un cuadrado.
  • Capas y filtros. Que nos permiten mostrar o ocultar elementos del diagrama según ciertas condiciones específicas.
  • Validación y propuestas de solución. Los problemas son listados en la vista de problemas de Eclipse y nos permite acomenter la solución sugerida o la que consideremos más oportuna.

Como Sirius está basado en EMF y GMF podemos usar Java para implementar servicios complejos o reusar elementos externos.

Personalización de representaciones gráficas

Podemos especificar diagramas para representar gráficamente los elementos del modelo de la manera que consideremos más acertada. En cada diagrama podemos elegir los elementos a mostrar y cómo mostrarlos según su tipo o alguna de sus propiedades.

Estas características también son aplicables a la representación gráfica de las relaciones entre elementos visibles. Podemos representar las relaciones como una línea entre dos figuras o como elementos contenidos sobre otra figura.

Por ejemplo, como podemos ver en la siguiente figura, podemos cargar imágenes para representar los nodos o dibujar figuras geométricas, podemos aplicar estilos condicionales, etc...

Diagrama personalizado

Podemos definir las utilidades que estarán disponibles para nuestro diagrama en la paleta de herramientas. Pueden ser filtros, reglas de validación, opciones de edición de los elementos (copiar, pegar, editar la etiqueta), herramientas de creación de elementos, de navegación...

Se pueden especificar tablas para representar los elementos del modelo como filas, donde cada celda define una propiedad del elemento. Las celdas son editables y su representación gráfica es editable. Lo mismo podemos hacer con las matrices, árboles y los diagramas de secuencia.

Tabla personalizada

Sirius para Usuarios Finales

Un editor gráfico creado con Sirius ofrece DSL para manejar los modelos y sus representaciones. No hace falta ser un experto en las tecnologías de Eclipse Modeling para manejar Sirius como usuario.

Como usuario hacemos uso de muchas de las bondades que Sirius ofrece a los especificadores:

  • Podemos seleccionar los viewpoints definidos por los especificadores.
  • Podemos crear y navegar por las representaciones de los modelos ya creados.
  • Podemos exportar e importar modelos XMI debido a que Sirius está basado en EMF.

En cuanto a la edición de diagramas Sirius ofrece todo aquello que podemos esperar de un editor gráfico para manipular la visualización de los elementos del modelo: zoom, manejo de capas, filtros, estilos condicionales, una visión general del diagrama (outline), hacer/deshacer, copiar/pegar, regla, cuadrícula, alineación de elementos, redimensionamiento... También nos permite la posibilidad de exportar los diagramas como imágenes y la opción de incluir notas en el diagrama.

Sirius ofrece la posibilidad de validar el diagrama para detectar incoherencias con el modelo. Cada incoherencia lanza visible en la sección de problemas de Eclipse y los elementos son decorados para llamar la atención sobre ellos.

Arquitectura y Componentes

Sirius está basado en la pila de Eclipse Modeling basada en EMF. La arquitectura general de Sirius se refleja en la siguiente figura de la documentación de Sirius:

Arquitectura

Sobre la plataforma Eclipse y EMF Sirius está compuesto de dos partes principales:

  • Sirius Tooling. Son las herramientas de Sirius para especificadores. Proporciona un entorno en el cual pueden especificar los editores que quieran ofrecer a los usuarios finales. La especificación se hace de manera declarativa, describiendo el modelo. Para cada editor el especificador definirá:

  • Qué será representado en el editor, es decir, que elementos del modelo deberán ser visibles.

  • Cómo se verán dichos elementos definiendo estilos visuales asociados a los elementos visibles.
  • Cómo los elementos deberán comportarse. Por ejemplo que elementos podrán relacionarse entre sí, mediante líneas o contenedores.

En resumen, Sirius proporciona un entorno completo y fácil de usar para crear las especificaciones aquí comentadas. El resultado puede ser liberado como un plugin de Eclipse o una aplicación RCP independiente.

  • Sirius Runtime. Es la parte que necesitan los usuarios finales para poder utilizar los editores creados por los especificadores. El runtime de Sirius es el responsable de interpretar la decripción del editor gráfico presentando al usuario el modelo de acuerdo con el aspecto y comportamiento especificado en su descripción. Para conseguirlo, Sirius usa un modelo de representación (y su correspondiente metamodelo), que describe la respresentación gráfica del modelo creado por el usuario final de acuerdo con lo especificado en la creación de dicha representación. En otras palabras, se proyecta el modelo en la representación gráfica del mismo cumpliendo ciertas reglas. Las modificaciones que el usuario realice sobre el modelo en la representación gráfica pueden afectar al modelo. El usuario puede mover elementos, lo que habitualmente no afectará al modelo, pero también puede, por ejemplo, borrar un nodo. Este cambio será reflejado automáticamente en el modelo. Si el usuario decide modificar el modelo los cambios realizados también serán reflejados en el editor gráfico de manera automática. En definitiva, Sirius soporta el desarrollo dinámico e incremental en la definición de modelos (o en la modificación de modelos existentes) gracias a un algoritmo de refresco ajustado a esta necesidad.

La separación entre Sirius runtime y tooling permite que la arquitectura sea limpia. El núcleo de Sirius queda sperada de cualquier tipo de representación concreta. Cada una de las partes ofrece la capacidad de extenderse en su ámbito. Por ejemplo cada uno de los elementos deben de proporcionar una representación al usuario final para interactuar con la herramienta, basados en otros frameworks y tecnologías, como GMF para renderizar los diagramas.

Recopilando, como hemos descrito en este apartado, la arquitectura de Sirius tiene las siguientes propiedades importantes:

  • Saparación de Sirius tooling y de Sirius runtime. Un componente pequeño para el tiempo de ejecución, sin intereferencias de interfaz gráfico de las herramientas de los especificadores. En tiempo de ejecución Sirius no tiene en cuenta donde ha sido creado el editor, el único requisito es que la definición esté acorde con el metamodelo.
  • El core es independiente de los aspectos concretos de cada una de las partes. esta característica facilita el desarrollo y extensión de la herramienta al mantener un API limpia basada sólo en elementos estándar.

Sirius está ampliamente relacionado con varios proyectos Eclipse:

  • EMF Core.
  • GMF es la base de la edición gráfica de Sirius.
  • Acceleo and MDT-OCL como lenguajes de consulta usado para el mapeo entre los modelos y sus representaciones.
  • Xtext es soportado.
  • EEF (Extended Editing Framework) es integrado en Sirius para proporcionar mejores editores de propiedades.
  • Sphinx

Casos de Éxito

Las estadísticas Sirius en el MarketPlace de Eclipse denotan que es ampliamente usado en el mundo de los lenguajes específicos de dominio. El que nazca de la empresa privada, de la producción diaria, nos lleva a pensar que realmente es un producto competitivo que facilita las tareas repetitivas y de diseño al usuario.

Como experiencia personal he usado dos proyectos basados en Sirius:

  • Obeo Designer: Una suite de herramientas que integra editores gráficos basados en Sirius donde podemos diseñar nuestro DSL haciendo uso de las Ecore Tools.
  • UML Designer: Otro producto Obeo, de nuevo basado en Sirius, que es uno de los mejores editores UML sobre Eclipse del mercado.

En el Marketplace de Obeo podemos encontrar numerosas herramientas basadas en Sirius. Es muy interesante interactuar con ellas porque se van descubriendo características del framwork que no están bien documentadas.

En la documentación de Sirius se destacan numerosos casos de uso de la herramienta como la herramienta de P&C Insurance para calcular y validar sus productos. Seguramente los casos de uso más interesantes no sean públicos por ser implementaciones internas de Thales o alguna otra empresa que lo haya adoptado aunque podemos encontrar en la web algunas presentaciones que Thales y Obeo han hecho en las EclipseConf dodne nos presentan soluciones particulares a problemas reales.