Este paquete expone un mecanismo para registro de clases.
Permite registrar clases o factorias de clases que luego pueden ser recuperadas para construir instancias.
La finalidad de este registro es el manejo de puntos de extension a una aplicacion. Una aplicacion declara o registra con un nombre los puntos de extension que va a tener. Cada punto de extension puede tener registradas una o mas extensiones. Cuando se quiere aņadir una extension a la aplicacion, se registra la clase o factoria que gestiona esa extension para el punto de extension que se desee.
Veamos esto con un ejemplo.
Supongamos que queremos aņadir un punto de extension a la aplicacion gvSIG, que permita asignar un mecanismo de presentacion de la informacion asociada a la herramienta de "informacion" especializada segun el tipo de tema sobre el que se esta trabajando.
Lo primero que tendriamos que hacer es darle un nombre al punto de extension. Lo llamaremos "InfoByPoint". Para esto, la aplicacion que valla a utilizar las extensiones que se registren en este punto deberia hacer lo siguiente:
ExtensionPoint infoByPoint = new ExtensionPoint("InfoByPoint","Registra las distintas extensiones que se pueden aņadir al 'InfoByPoint'"); ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance(); extensionPoints.put(infoByPoint);
Con esto creamos un punto de extension de nombre "InfoByPoint", recogemos la
instancia del registro de extensiones e insertamos el nuevo punto de extenstion
en el.
Normalmente esta operacion, en el contexto de gvSIG, se realizaria en la
inicializacion de la extension de andami en la que vallamos a aņadir
la herramienta de informacion.
Las extensiones a registrar en el "InfoByPoint" podrian consistir un un JPanel que gestione la presentacion a usar para el tema.
Luego, desde la parte de la aplicacion que necesite aņadir nueva funcionalidad en este punto de extension, se deberia aņadir la extension. Por ejemplo en la extension de andami de WMS, se podria aņadir a "InfoByPoint" la posibilidad de usar una forma especial de presentacion. Podria hacerse:
ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance(); extensionPoints.add("InfoByPoint","WMS",PanelQueGestionaLaExtension);
Donde "PanelQueGestionaLaExtension" sera el JPanel que gestiona la extension para "InfoByPoint" de WMS.
Si quieran acceder a la extension de nombre "WMS" se haria:
ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance(); ExtensionPoint infoByPoint = (ExtensionPoint)extensionPoints.get("InfoByPoint"); Object ext = infoByPoint.create("WMS");
Y esto nos devolberia un objeto JPanel que gestiona la extension "WMS" para el "InfoByPoint".
Si quisiesemos recorrer las distintas extensiones de ese punto podriamos hacerlo asi:
ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance(); ExtensionPoint infoByPoint = (ExtensionPoint)extensionPoints.get("InfoByPoint"); Iterator infoByPoint =infoByPoint.keySet().iterator(); while( i.hasNext() ) { String nombre = (String)i.next(); ... // Y para crear los JPanel asociados a la extension... Object panel = infoByPoint.create(nombre); ... }
Ademas de registrar clases en un punto de extension, se pueden registrar instancias que implementen el interface de IExtensionBuilder. En este caso, cuando se invoque al metodo "create" del punto de extension, en lugar de crear una instancia, como no tiene la clase, este invocara al metodo create del objeto que ha sido registrado.
Podemos encontrar un ejemplo de esto en la extension de JDBC para el catalogo. Como no existe una capa especifica para las capas JDBC, en lugar de registrar en el punto de extension una clase "capa JDBC", se registra una clase que implementa el interface IExtensionBuilder, que en su metodo create construye una capa vectorial y la inicializa de la forma apropiada para funcionar con la fuente de datos de JDBC.
Hay que tener en cuenta que para un punto de extension dado, deberia ser trasparente que se registren en el clases o instancias que contruyen las clases. E incluso que es posible mezclar en un punto de extension los dos mecanismos, como es el caso del catalogo.