2.0.0
- Introducción
- Acceso al API de transformaciones
- El wizard de las transformaciones
- Las transformaciones
- Registro de una nueva transformación
- Creación de una transformación
- Los paneles asociados a la transformación
- Project Site (documentación generada con maven)
Introducción
La nueva librería de acceso a datos soporta el concepto de Transformación, que no es más que un algoritmo que a partir de un fenómeno de un tipo produce otro fenómeno de otro tipo distino, sin modificar el original.
La idea es que una transformación es una función que sirve para cambiar la forma en la que se muestra un origen de datos. En la figura se puede observar una tabla en la izquierda con 3 columnas que tras aplicarle una transformación, se ha convertido en otra tabla con 4 columnas.
Se puede decir que el concepto de transformación es algo similar al de crear una vista en una base de datos. Realmente se ha cambiado la forma en la que se ven los datos de la tabla inicial, pero los datos originales no se modifican de modo que siempre se puede volver a cargar la tabla incial.
Un ejemplo concreto de transformación es el tema de eventos, que no es más que una transformación que consiste en crear una columna que contenga geometrías de tipo punto a partir de dos columnas que contengan los valores de la X y de la Y. La siguiente figura muestra cómo se ha creado esta nueva columna a partir de la tabla original.
Existen dos tipos de transformaciones:
- Transformaciones a nivel de DAL: se aplican a cualquier origen de datos que gvSIG sea capaz de leer. Toda la documentación se encuentra disponible en le documentación de DAL en el apartado Transformaciones. En él se explica cómo crear una transformación y cómo aplicarla sobre un almacen de datos.
- Transformaciones a nivel de Aplicación: se tienen que registrar en gvSIG y están formadas por una aplicación a nivel de DAL y un conjunto de formularios que sirven para poder configurarla.
En este documento no se van a tratar las transformaciones a nivel de DAL, sino que se van a tratar las transformaciones a nivel de aplicación. De ahora en adelante cuando se mencione el término transformación, significará transformación a nivel de aplicación.
Todas las transformaciones se deben registrar en gvSIG para que puedan ser aplicadas a un origen de datos. Para poder hacer esto de forma amigable gvSIG proporciona un wizard que permitirá seleccionar la transformación a aplicar y mostrará los paneles correspondientes para que un usuario cualquiera pueda configurar la transformación y aplicarla.
Acceso al API de transformaciones
Existen una seria de clases e interfaces independientes que deben ser utilizadas para gestionar las transformaciones en gvSIG. Estas clases son:
- DataTransformLocator: Se trata del locator de la librería. Nos proporciona los servicios de localización del DataTransformManager a usar por la librería.
- DataTransformManager: Se trata del punto que nos da acceso al API de transformaciones en gvSIG. A partir de él podemos realizar realizar básicamente dos operaciones:
- Gestionar el wizard de transformaciones: que no es más que el wizard que se utiliza para aplicar las transformaciones.
- Gestionar las transformaciones: registro y recuperación de las transformaciones.
- DataTransformLibrary: Librería base que se deberá extender para registrar el DataTransformManager por defecto que utilizará la aplicación.
La idea es poder tener acceso al DataTransformManager desde cualquier parte de la aplicación. Para ello habría que ejecutar el siguiente código:
DataTransformManager dataTransformManager = DataTransformLocator.getDataTransformManager();
En los siguientes apartados de hará una explicación más detallada de los métodos que tiene el DataTransformManager.
gvSIG proporcionará una implementación para la DataTransformLibrary que será inicailizada en el arranque de la aplicación para registrar una implementación por defecto de un DataTransformManager. En la mayoría de los casos las implementaciones por defecto serán suficientes y lo único para lo que se tendría que utilizar el manager es para incluir nuevas transformaciones.
El wizard de las transformaciones
Apertura del wizard
El wizard para aplicar transformaciones se podrá instanciar desde cualquier punto de la aplicación invocando el método createWizard del DataTransformManager del siguiente modo:
DataTransformWizard dataTransformWizard = DataTransformLocator.getDataTransformManager().createWizard();
Este código devolverá el wizard por defecto que ha sido creado y registrado en gvSIG para poder aplicar transformaciones. Más adelante se explica cómo crear un nuevo wizard y reemplazar al que ya existe en gvSIG.
El wizard por defecto está basado en el wizard que ya existe en Andami. Todas las capturas de pantalla que se hacen a continuación se han hecho sobre ese wizard por lo que si se modificase, el aspecto que presentaría sería distinto.
La interfaz DataTransformWizard tiene un método getWindow que devolverá una IWindow que se puede visualizar en gvSIG. Por lo tanto desde cualquier punto de la aplicación se podrá abrir el wizard de las transformaciones con tan sólo ejecutar el código:
DataTransformWizard dataTransformWizard = DataTransformLocator.getDataTransformManager().createWizard();
PluginServices.getMDIManager().addWindow(dataTransformWizard.getWindow());
Ejemplo de wizard
Este es un manual para el desarrollador, pero para poder entender algunos de los métodos que presentan las interfaces de las transformaciones es necesario tener una visión clara del problema al que pretenden dar solución y por ello, se han incluído unas cuantas capturas de pantalla del wizard por defecto que existe en gvSIG.
En la primera ventana el wizard mostrará todas las transformaciones que hayan sido registradas. Al hablar de "transformaciones" nos estamos refiriendo a todas las transformaciones que se han registrado en gvSIG junto con su interfaz de usuario o lo que es lo mismo, todas las clases que implementen el interfaz DataTransformGui y que se han resgistrado mediante el DataTransformManager. Más adelante se comenta cómo crear y registrar una transformación y su interfaz de usuario.
El usuario deberá elegir la transformación que desee aplicar y el resto del wizard se comportará en función de la transformación elegida en esta primera ventana.
Al pulsar en el botón siguiente se abrirá una nueva ventana en la que se tendrá que seleccionar el DataStore sobre el que se va a aplicar la transformación. Esta ventana también será común a todas las transformaciones ya que una transformación se tiene que aplicar sobre al menos un origen de datos.
Tras pulsar en siguiente se abrirán los paneles asociados a una transformación concreta (más adelante se comenta cómo se asocia un panel a una transformación). En función de la transformación que se elija en la primera ventana del wizard estos panales serán de una forma u otra ya que los parámetros asociados a una transformación no son los mismos que los parámetros de otra transformación.
Una vez que hayan pasado todas las ventanas particulares de la transformación elegida, aparecerá una ventana en la que se podrá seleccionar lo que se desea hacer con la transformación (cancelar el proceso, aplicar sobre una capa, cargar en una vista si se trata de una tabla...). La siguiente figura muestra un ejemplo de la última ventana.
En el ejemplo hemos aplicado una transformación sobre una tabla, por lo que podremos elegir la vista sobre la que queremos que se cargue como una capa. Para que esto sea así, la transformación resultante tiene que tener un atributo de tipo geometría.
Registro de un nuevo wizard
Si se quiere modificar el wizard por defecto, se tiene que crear una nueva clase que implemente el interfaz DataTransformWizard y se tiene que registrar en el DataTransformManager mediante el método registerDataTransformWizard que tendrá un único parámetro con una clase que implemente el nuevo wizard. En el ejemplo se asume que existe una clase MyDataTransformWizard que implementa el interfaz:
DataTransformLocator.getDataTransformManager().registerDataTransformWizard(MyDataTransformWizard.class);
Un wizard puede verse como un conjunto de formularios que se utilizan para realizar una acción. El wizard de transformaciones debe proporcionar un interfaz de usuario para poder aplicar una transformación. Este interfaz se proporciona mediante el método DataTransformWizard.getWindow()_, que devuelve un objeto de tipo IWindow que gvSIG es capaz de visualizar.
Pero además de un interfaz de usuario, el wizard es un objeto que puede ser utilizado por todos los panales lo forman para poder recuperar la información que se va seleccionando. Por ejemplo, si en la primera ventana del wizard se elige un DataStore, éste debería poder ser utilizado en las siguientes ventanas para por ejemplo, añadir un combo con los nombres de los campos del origen de datos. Es por ello que tiene los siguientes métodos:
- DataTransformGui getDataTransformGui(): devolverá la tranformación que se tiene que aplicar sobre un origen de datos. Los detalles de la interfaz DataTransformGui se comentarán más adelante. El nuevo wizard está obligado a proporcionar una transformación puediendo cambiar la forma en la que se seleccionaba en le wizard por defecto.
- FeatureStore getFeatureStore(): devolverá el FeatureStore sobre el que se aplica la transformación. El nuevo wizard está obligado a proporcionar un origen de datos puediendo cambiar la forma en la que se seleccionaba en le wizard por defecto.
- boolean isFeatureStoreLayer(): además de proporcionar un FeatureStore, el wizard deberá indicar dónde si es una capa o una tabla ya que en función de ese valor la ultima acción del wizard será una u otra.
- setApplicable(boolean isApplicable): este método servirá para bloquear el botón "Siguiente" del wizard, de modo que evitará que se pueda continuar. Serán los distintos formularios que forman el wizard los que activen el botón cuando en usuario haya seleccionado los valores mínimos que requiere la transformacioón.
Las transformaciones
Registro de una nueva transformación
El registro de una nueva transformación se tiene que hacer utilizando los métodos del DataTransformManager. En concreto, hay que utilizar el método registerDataTransform cuyos parámetros son el nombre con el que queremos registrar la transformación y la una clase que deberá implementar el interface DataTransformGui (en caso contrario se lanzará una excepción). El siguiente código muestra un ejemplo de cómo registrar una transformación.
DataTransformManager dataTransformManager = DataTransformLocator.getDataTransformManager();
dataTransformManager.registerDataTransform("My transform", MyTransform.class);
Creación de una transformación
El interface DataTransformGui es realmente el que contiene los métodos que gvSIG utilizará para poder crear el interface de usuario y poder aplicar la transformación sobre un origen de datos. Estos métodos son:
- String getName(): devuelve el nombre que será mostrado en la lista de transformaciones a aplicar. Deberá ser un nombre corto que indique el nombre de la transformación.
- String getDescription(): devuelve una descripción de lo que hace la transformación.
La siguiente figura muestra un ejemplo de la ventana para seleccionar las transformaciones del wizard. En ella se muestra la correspondencia entre los métodos getName y getDescription y la interfaz de usuario.
- List< DataTransformWizardPanel > createPanels(): devuelve un ArrayList con los paneles que sirven para configurar la transformación. Cada uno de estos paneles aparecerá en una nueva ventana del wizard de transformaciones.
- FeatureStoreTransform createFeatureStoreTransform( FeatureStore featureStore): dado un FeatureStore que se le pasa como parámetro deberá ser capaz de crear y devolver la transformación. De momento se han utilizado transformaciones sobre orígenes de datos vectoriales, pero en un futuro este método podría ser modificado para soportar transformaciones sobre orígenes de datos ráster.
- Dimension getMinDimension()*: devuelve la dimensión mínima que tiene que tener el wizard para que los paneles de la transformación se puedan visualizar correctamente. El wizard modificará su tamaño en función de este valor.
Los paneles asociados a la transformación
Cada transformación registrada aporta el conjunto de paneles que se utilizan para pode configurar la transformación. Estos paneles implementan el interfaz DataTransformWizardPanel, que tiene los siguientes métodos:
- String getPanelTitle(): devuelve el título del panel que se muestra en el interfaz de usuario cada vez que el wizard muestra el panel.
- JPanel getJPanel(): devuelve el JPanel que mostrará en el interfaz de usuario cuando el wizard llegue al punto indicado.
- void lastPanel(): evento que se lanza en un panel del wizard cuando se pulsa el botón Anterior.
- void nextPanel(): evento que se lanza en un panel del wizard cuando se pulsa el botón Siguiente del wizard.
- void setDataTransformWizard( DataTransformWizard dataTransformWizard): se añade a cada uno de los paneles que forman el wizard una referencia al wizard que los contiene que tiene métodos que pueden ser útiles.
Project Site (documentación generada con maven)
Documentación generada con maven: incluye JavaDoc, informes de test unitarios, validaciones de código, etc...