La librería tools es una pieza importante dentro de gvSIG. Provee de una serie de utilidades y servicios en los que se apoyan el resto de módulos de gvSIG. La principal funcionalidad que aporta está relacionada con:
Aunque estos son los servicios más importantes que provee la librería además aporta otras utilidades que se pueden considerar estructurales a la aplicación. Como pueden ser:
Truco
Puede encontrar información mas detallada sobre como funciona el mecanismo de librerias de gvSIG en org.gvsig.tools.library , sobre los el uso de locators podemos consultar en org.gvsig.tools.locator , y sobre managers podemos encontrar documentación en org.gvsig.tools.service .
Vamos a quedarnos ahora únicamente con tres conceptos básicos que se van a repetir a lo largo del código que vayamos viendo, y están ligados a las utilidades que nos van a permitir separar de forma estricta el API de la implementación:
Estas tres piezas deberemos tenerlas muy presentes siempre que queramos usar o crear nuevos componentes ya que son los artefactos que nos van a permitir el acceso a las distintas piezas de gvSIG.
Andami es el framework que utiliza gvSIG para componer la aplicación. Principalmente provee dos tipos de servicios, por un lado de gestión y carga de plugins y por otro, la gestión de ventanas que componen el interfaz de usuario.
En este punto vamos a centrarnos un poquito en la gestión de plugins. Andami proporciona un lanzador para la aplicación que inicializa el sistema de plugins, y se encarga de cargar los plugins que están instalados en la aplicación. Un plugin es una unidad funcional que puede proveer:
Normalmente, en una instalación de gvSIG, encontraremos una carpeta gvSIG/extensiones. Esta carpeta contiene dentro los distintos plugins que están instalados en la aplicación. Cada plugin está contenido en una carpeta, y dentro de esta, nos encontraremos, siempre, los ficheros:
config.xml. Es obligatorio que exista. Identifica la carpeta como un plugin. En el encontraremos información sobre:
Dónde encontrar las clases de ese plugin
Truco
Puede encontrar más información sobre la estructura y distintas etiquetas que están permitidas en este fichero en el documento el fichero config.xml
Que clases deben ser cargadas como extensiones (IExtension).
Si ese plugin depende de algún otro plugin
Qué opciones de menú añade el plugin a la aplicación
Qué barras de herramientas y botones añade el plugin.
package.info, que informa sobre la versión, nombre, identificador o descripción del plugin. Sería algo así como el contenedor de los metadatos del plugin, y nos permite identificarlo para poder actualizarlo o reinstalarlo.
Adicionalmente podemos encontrarnos una carpeta theme, en la que está la configuración del splash de la aplicación, iconos de las ventanas o colores de fondo.
Aunque el mecanismo para añadir nueva funcionalidad a gvSIG es aportando nuevos plugins, estos a su vez contendrán una o más extensiones, siendo estas extensiones las que implementarán la funcionalidad a aportar. Así pues, tendremos que un plugin contendrá extensiones.
Relacionado con el manejo de plugins las principales piezas que nos vamos a encontrar son:
De estas entidades nos vamos a detener un poco más en la interface IExtension- Esta es la interface que deberemos implementar para poder añadir un nuevo botón u opción de menú. En esta interface nos encontraremos los métodos:
Truco
Aunque actualmente no existe documentación relacionada con esto para la versión 2 de gvSIG, en general, la documentación existente para gvSIG 1, será válida. Puede encontrarla en Las ventanas de Andami
Andami, además de proveer un mecanismo para la carga y gestión de plugins dispone de un API para la gestión de las ventanas de la aplicación. Actualmente el paradigma usado para la gestión de ventanas es MDI. Sin embargo el propio gestor de ventanas de gvSIG puede ser sustituido para proporcionar otras formas de visualización (SDI, tabs,...).
Las principales entidades que vamos a encontrar en andami relacionadas con el manejo de ventanas serán:
En general siempre que no precisemos de un control fino sobre nuestras ventanas podemos usar el método showWindow del MDIManager para presentar una ventana a partir de un JPanel estándar de swing.
En gvSIG, podemos encontrar una serie de plugins que aportan la funcionalidad base de la aplicación que tienen cierta relevancia respecto al resto de plugins. Estos serían:
org.gvsig.app.mainplugin. Este plugin provee a gvSIG del grueso de la funcionalidad genérica de la aplicación, así como del acceso básico a datos vectoriales. Aporta:
Este plugin además de la implementación de estas funcionalidades aporta un manager y un locator importantes de cara a desarrollar otros plugins:
org.gvsig.vectorediting.app.mainplugin, provee las funcionalidades de la edición de datos tabulares y vectoriales.
org.gvsig.geodb.app.mainplugin, añade a la aplicación soporte para acceso a BBDD, como PostgreSQL.
org.gvsig.i18n.app.mainplugin, añade el soporte para internacionalización a la aplicación.
org.gvsig.projection.app.jcrs, añade soporte para gestión de CRSs.
org.gvsig.raster.tools.app.basic, añade soporte raster a gvSIG.
Estos pueden ser algunos de los plugins más importantes en gvSIG en el sentido de que ofrecen una funcionalidad base importante o que son necesarios para que otros plugins puedan funcionar.
Además de estos plugins hay bastantes más plugins en la distribución de gvSIG que pueden ser necesarios o no en función de lo que vayamos a hacer con gvSIG.
A la hora de desarrollar con gvSIG, puede sernos útil conocer los plugins existentes, sobre todo las funcionalidades que nos ofrece el ApplicationManager, pero lo realmente importante es controlar qué librerías son las que vamos a necesitar para implementar la funcionalidad que necesitemos.
A partir de la versión 2.0.0 de gvSIG se introdujeron cambios importantes tanto en la forma de construir gvSIG como en la nomenclatura utilizada para identificar los proyectos y librerías que se generan. Sin embargo esto no ha sido un proceso que se dio de repente. Ha ido sucediendo en el transcurso de varios años. Esto ha dado como resultado una falta de homogeneidad en la nomenclatura de los componentes existentes en este momento. A la hora de referirnos a una librería podemos hacerlo por el nombre del proyecto de Eclipse, por el nombre del jar generado o por el nombre de artefacto de Maven. En los proyectos generados recientemente se optó como norma que estos tres nombres debían coincidir, siendo el nombre que se adoptaba para los tres el nombre del artefacto de Maven. Sin embargo proyectos anteriores a esta decisión presentan nombres distintos para cada una de estas cosas. De cara a un desarrollador que vaya a usar gvSIG, lo importante será conocer los nombres de artefacto Maven, ya que normalmente deberá saber con qué artefactos debe fijar las dependencias, siendo menos relevante el nombre del proyecto asociado a ese artefacto.
Las librerías que más pueden cubrir nuestras necesidades en gvSIG serían:
Truco
Aunque redactadas para gvSIG 2.0.0, existe documentación sobre las librería s de acceso a datos y de geometrias que puede ser interesante de leer ya que casi en su totalidad puede aplicarse a gvSIG 2.2.0. Puede encontrarlas aqui la de DAL y aqui la de geometrias.