Apuntes del taller de GvSIG 2.0

Estos son los apuntes que tomé sobre gvSIG 2.0 en las últimas Jornadas GvSIG.

Pre-requisitos:

  • Java
  • Eclipse
  • Ant (opcional)
  • Maven (opcional)
  • gvSIG (esto es recursivo :))

La principal ventaja de gvSIG 2.0 es que puedes crear un plugin sin saber cómo funciona gvSIG ni tener que compilarlo. Tenemos una instalación de gvSIG que despliega unos binarios que genera el workspace.. Pero no tenemos que tocar los fuentes de gvSIG, salvo que algo no funcione (bugs) o haya que añadir alguna funcionalidad al núcleo. Preferentemente no lo toques, mejor consulta con los desarrolladores del núcleo de gvSIG y ellos intentarán encargarse.

Con el binario de gvSIG viene un asistente para ejecutarlo y que cree un workspace de eclipse con una plantilla prefijada que deja todo configurado para compilar nuestra extensión. También incorpora un asistente para generar instalables fácilmente. Estos asistentes son accesibles mediante la aplicación gvSIG, en el menú de la aplicación.

Org.gvsig.tools is the basic infrastructure library to develop plugins.The main functionality is focused on the registration of extension points, utilities to separate API, implementations, SPI (service provider), and monitoring tasks (which in version 1.0 used to freeze the application).This library also supports events, persistence, etc …

Una librería es un jar. Cuando nuestra aplicación levante el jar, org.gvsig.tools prepara dicha librería y la inicializa dentro del core de gvSIG. Las clases dentro de la librería implementan la interfaz Library (AbstractLibrary).

Los managers (PluginsManager) son el punto de entrada a las funcionalidades. Son como factorías (singletons) (al menos uno por librería) que levanta instancias de las funcionalidades incluídas dentro de la librería. También guarda la configuración del módulo.

Los locators (PluginsLocator) permiten registrar implementaciones de managers. Nos permiten recuperar la implementación de manager de un API en concreto. "Dame el manager de esta librería."

Un plugin es una pieza que aporta una funcionalidad: botones y barras de herramientas, opciones de menús, proveedores de datos y tipos de documentos. Andami no ha evolucionado demasiado desde la versión gvSIG 1.x. Andami es el framework de los plugins.

El plugin siempre tendrá al menos dos ficheros:

  • config.xml que indica las clases que implementan el plugin, las dependencias y los menús
  • package.info que indica la versión, el nombre, el build,... del plugin.

Una extensión (IExtension) es un conjunto de herramientas asociadas a un plugin metidas en una barra de herramientas o menú y funcionan de forma conjunta. Un grupo de plugins, vaya. La extensión que implemente ExclusiveUIExtension especifica qué herramientas están o no visibles en cada momento, sin tener que tocar código en el core de gvSIG.

Para crear un nuevo plugin, hacemos uso de la herramienta del menú de generación de plugins disponible en la versión de desarrollo de gvSIG. Esto genera el workspace automáticamente e instala dicho plugin en el gvSIG desde el que hemos generado el plugin. Si no tienes versión de desarrollo, tendrás que compilar gvSIG de los fuentes..

Conviene ir haciéndolo mientras se leen estos apuntes o puedes perderte.

El plugin constará de dos proyectos maven: org.gvsig.plugin y org.gvsig.plugin.app. org.gvsig.plugin aportará la funcionalidad de la librería de forma independiente de gvSIG (la lógica de negocio). Puede tener dependencias de librerías de gvSIG, pero debería poder funcionar sin tener que abrir la aplicación. Es decir, no requiere nada de Andami, por ejemplo. En org.gvsig.plugin.app.mainplugin (dentro de org.gvsig.plugin.app) tendrá la implementación de dicha funcionalidad dentro de gvSIG.

The “api” packages should contain interfaces and the “impl” packages should contain implementations.

En principio el workspace está preparado para trabajar con eclipse e importar los proyectos con el plugin de maven. Si hemos cogido una plantilla adecuada al generar los fuentes del plugin, tendremos prácticamente todo el trabajo hecho (salvo la lógica de negocio exacta de nuestro plugin).

Es importante hacerse un proyecto java para probar nuestro plugin, con su propio main, sin tener que arrancar gvSIG. Así mismo se recomienda que en la parte de librería haya tests unitarios. Es decir, podemos hacer una aplicación con toda la potencia de gvSIG, pero sin utilizar gvSIG en sí, es decir, como si gvSIG fuera una potente librería gis. Conclusión: si lo hacemos bien, podríamos incluso utilizar nuestro plugin de gvSIG en otra aplicación... como GoFleet.

Cada plugin tiene su propio instalador, que también se genera con un asistente dentro de la aplicación gvSIG.