Arquitectura



El panel donde se efectúan las operaciones de edición es un MapControl del proyecto gvSIG. La imagen mostrada por el MapControl es generada por el motor de dibujado de gvSIG (FMap) a través de la capa de acceso a datos. El comportamiento del ratón en un MapControl se puede personalizar escribiendo una implementación de la interfaz Behaviour. Nuestro EditionContext es una implementación de Behaviour que escucha eventos “point” (cuando el usuario pincha con el ratón en el MapControl) y los transforma en una transición de herramienta. Las herramientas en orbisCAD son autómatas de estados finitos definidos en ficheros xml y transformados en código Java por una transformación XSL. La herramienta en sí es una subclase de la clase generada que implementa un método por cada estado del autómata. De esta manera, el EditionContext recibe eventos punto del MapControl y los transforma en transiciones para la herramienta actualmente seleccionada. Estas transiciones pueden realizarse también desde la consola. Tanto las herramientas como el EditionContext operan sobre la capa de acceso a datos de forma que la próxima vez que el MapControl intente redibujar el mapa, leerá los cambios realizados.

Interfaz gráfica

En el siguiente diagrama se puede ver la organización de las clases que forman la interfaz gráfica y como la instancia de EditionToolAdapter que implementa EditionContext captura los eventos del ratón para transformarlos en transiciones de la herramienta actual (diagrama anterior).

Capa de acceso a datos

La capa de acceso a datos está definida por la clase Theme. Esta clase contiene una referencia a una instancia de la clase FLyrVect (del proyecto gvSIG) para realizar el dibujado y una referencia a un DataSource (de GDBMS) para realizar las operaciones de edición. Como se puede ver en la figura, la instancia de FLyrVect accede a los datos a través del DataSource para dibujar los últimos cambios realizados a los datos. Hay una especialización de Theme por cada tipo de fuente de datos: fichero, memoria, bases de datos, ... La única diferencia entre éstas es la manera en la que las instancias de FLyrVect y DataSource son obtenidas.

Todas las operaciones de edición son realizadas por la instancia de DataSource y todas las operaciones de dibujado por la instancia de FLyrVect. Para más información sobre FLyrVect contacte con el equipo de gvSIG. Para más información sobre DataSource visite el sitio web del proyecto GDBMS en el que se pueden encontrar tutoriales.