Las
extensiones son la vía en la que los complementos extienden a
Andami.
Toda clase que implemente a la interfaz
com.iver.andami.plugins.IExtension
es
una extensión, aunque esta clase no debe ser implementada
directamente, para ello se provee la clase abstracta que la
implementa com.iver.andami.plugins.Extension
y de la cual deben heredar las extensiones que se deseen añadir.
Durante
la inicialización, Andami
instancia a cada una de las extensiones definidas. Las extensiones
son capaces de agregar controles (herramientas, barras de
herramientas y menús) a la interfaz de usuario; cuando se ejecuta un
click
en alguno de estos controles o alguno de ellos es modificado, se
invoca al método execute()
de la extensión asociada. Las extensiones pueden controlar también
si los controles definidos están habilitados o no, y cuando son
visibles o no.
Aun
cuando se implemente esta interfaz para añadir una nueva extensión,
es necesario definirla con un constructor vacío porque esta será
invocada para crear una instancia de la extensión durante la
inicialización.
Aquellos
complementos bien instalados se crearán una instancia por cada
extensión del complemento.
Cada
vez que se cambia el foco de la venta activa y cada vez que se
ejecuta el método execute(),
Andami
chequea los métodos isEnabled()
e isVisible()
de cada extensión, para decidir cuál de ellas deben estar
habilitadas y visibles.
El
método execute()
será
llamado desde el hilo de la interfaz de usuario (GUI), por tanto la
GUI será bloqueada durante la ejecución del código implementado en
el método; por tanto la ejecución debe ser rápida. En caso de que
se inicie un proceso extenso desde execute(),
un nuevo hilo debe ser inicializado.
Normalmente
las extensiones no deben implementar directamente a la interfaz
IExtension,
sino heredar de la clase abstracta Extension.
A
continuación se muestran los métodos que componen a la interfaz
IExtension
y su explicación:
- void initialize(): Método donde se implementa el código de la inicialización de la extensión
- void postInitialize(): Método donde se implementa la post inicialización de la extensión. Este código se ejecuta por Andami después de inicializar todas las extensiones.
- void Terminate(): Método que se ejecuta al terminar la ejecución de Andami.
- void Execute(String actionCommand): Este método se ejecuta al presionar el click del mouse sobre alguno de los controles definidos por la extensión (menús, herramientas, etc.). El parámetro actionCommand es útil para diferenciar los eventos generados por los controles añadidos por la misma extensión.
- boolean isEnabled(): Método que se invoca para chequear si es habilitada o no la extensión y sus controles asociados. Los controles deshabilitados se muestran en color gris claro.
- boolean isVisible(): Método que se invoca para chequear la visibilidad de la extensión y sus controles asociados.
- IExtensionStatus getStatus(),
- IExtensionStatus getStatus(IExtension extension): Devuelve el estado de la extensión, que será consultada para chequear si la extensión posee algún dato sin salvar a alguna tarea asociada ejecutándose de fondo.
Una
vez implementadas todas las clases extensiones que se desean añadir
en el complemento, es necesario definir en el archivo
“./config/config.xml” los parámetros de cada una de las
extensiones. En el tag
<extensions> del archivo xml de configuración del complemento
se definen las propiedades de cada una de las extensiones del
complemento teniendo en cuenta el siguiente prototipo:
<extensionclass-name=”Nombre de la clase que implementa una extension. Ejemplo: uclv.extsdf.NetCDFRasterAnimationExtension”description=”Descripción de la extensión”active=”true o false, que define si la extensión se activa o no”priority=”Valor numérico que define la prioridad de la extensión en la carga inicial”><menu <!--Define un menú en la GUI-->text=”Texto del menú, los niveles se definen mediante ‘/’. Las extensiones que poseen la misma ruta son agrupados en el mismo menú en la GUI.”key=””mnemonic=”Método nemotécnico”tooltip=”Texto breve que explica la funcionalidad del menú. Se muestra al pasar el puntero del mouse sobre el menú.”action-command=”cadena de texto que se pasa al método execute() de la clase que implementa una extensión.”icon=”Icono del menú”></menu><tool-bar <!--Define una barra de herramienta en la GUI-->name="Nombre de la barra de herramienta. Este mismo valor puede ser empleado en la declaración de otras extensiones para agrupar todos los controles del complemento en una misma barra de herramientas."position="valor numérico que define la posición de esta barra de herramienta en la barra de herramienta general de gvSIG"><action-tool <!--define una herramienta de la barra de herramienta-->icon="imagen del botón de la barra de herramienta"tooltip="Texto breve que explica la funcionalidad de la herramienta. Se muestra al pasar el puntero del mouse sobre el icono de la herramienta."action-command="Cadena de texto que se pasa al método execute() de la clase que implementa una extensión"position="Valor numérico que define la posición de la herramienta en la barra de herramienta."/></tool-bar></extension>
Todas
las funcionalidades que se deseen añadir en el complemento como
extensiones de gvSIG pueden seguir tres estrategias:
- Implementar cada funcionalidad como una extensión (cada funcionalidad implementa a la clase abstracta Extension) y luego se añade la especificación de cada una de las extensiones en el archivo de configuración del complemento,
- Implementar todas las funcionalidades en una única extensión y diferenciarlas mediante el parámetro action-command, o
- La combinación de las dos anteriores.
Resulta
válido aclarar que los controles que se implementan para una
extensión poseen el mismo action-command.
No hay comentarios.:
Publicar un comentario