Statistics
| Revision:

root / tags / v1_0_2_Build_916 / libraries / libIverUtiles / src / com / iver / utiles / extensionPoints / package.html @ 12327

History | View | Annotate | Download (4.36 KB)

1 4643 jjdelcerro
<html>
2
<body>
3 4933 jjdelcerro
<p>
4 4676 jorpiell
Este paquete expone un mecanismo para registro de clases.
5 4933 jjdelcerro
</p>
6
<p>
7 4643 jjdelcerro
Permite registrar clases o factorias de clases que luego pueden ser
8
recuperadas para construir instancias.
9 4933 jjdelcerro
</p>
10
<p>
11 4643 jjdelcerro
La finalidad de este registro es el manejo de puntos de extension a una
12
aplicacion. Una aplicacion declara o registra con un nombre los puntos de
13
extension que va a tener. Cada punto de extension puede tener registradas una
14
o mas extensiones. Cuando se quiere a?adir una extension a la aplicacion, se
15
registra la clase o factoria que gestiona esa extension para el punto de extension
16
que se desee.
17 4933 jjdelcerro
</p>
18
<p>
19 4643 jjdelcerro
Veamos esto con un ejemplo.
20 4933 jjdelcerro
</p>
21
<p>
22 4643 jjdelcerro
Supongamos que queremos a?adir un punto de extension a la aplicacion gvSIG, que
23
permita asignar un mecanismo de presentacion de la informacion asociada a la
24
herramienta de "informacion" especializada segun el tipo de tema sobre el que se
25
esta trabajando.
26 4933 jjdelcerro
</p>
27
<p>
28 4643 jjdelcerro
Lo primero que tendriamos que hacer es darle un nombre al punto de extension.
29 4933 jjdelcerro
Lo llamaremos "InfoByPoint". Para esto, la aplicacion que valla a utilizar
30 4643 jjdelcerro
las extensiones que se registren en este punto deberia hacer lo siguiente:
31 4933 jjdelcerro
</p>
32 4929 vacevedo
<pre>
33 4643 jjdelcerro
  ExtensionPoint infoByPoint = new ExtensionPoint("InfoByPoint","Registra las distintas extensiones que se pueden a?adir al 'InfoByPoint'");
34
  ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
35
36
  extensionPoints.put(infoByPoint);
37 4929 vacevedo
</pre>
38 4933 jjdelcerro
<p>
39 4643 jjdelcerro
Con esto creamos un punto de extension de nombre "InfoByPoint", recogemos la
40
instancia del registro de extensiones e insertamos el nuevo punto de extenstion
41 4933 jjdelcerro
en el.<br>
42
Normalmente esta operacion, en el contexto de gvSIG, se realizaria en la
43
inicializacion de la extension de andami en la que vallamos a a?adir
44
la herramienta de informacion.
45
</p>
46
<p>
47
Las extensiones a registrar en el "InfoByPoint" podrian consistir un un
48
JPanel que gestione la presentacion a usar para el tema.
49
</p>
50
<p>
51
Luego, desde la parte de la aplicacion que necesite a?adir nueva funcionalidad
52
en este punto de extension, se deberia a?adir la extension. Por ejemplo
53
en la extension de andami de WMS, se podria a?adir a "InfoByPoint" la posibilidad
54
de usar una forma especial de presentacion. Podria hacerse:
55
</p>
56
<pre>
57
    ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
58
    extensionPoints.add("InfoByPoint","WMS",PanelQueGestionaLaExtension);
59
</pre>
60
<p>
61
Donde "PanelQueGestionaLaExtension" sera el JPanel que gestiona la extension para
62
"InfoByPoint" de WMS.
63
</p>
64
<p>
65
Si quieran acceder a la extension de nombre "WMS"
66 4643 jjdelcerro
se haria:
67 4933 jjdelcerro
</p>
68 4929 vacevedo
<pre>
69 4933 jjdelcerro
    ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
70 4643 jjdelcerro
    ExtensionPoint infoByPoint = (ExtensionPoint)extensionPoints.get("InfoByPoint");
71 4933 jjdelcerro
    Object ext = infoByPoint.create("WMS");
72 4929 vacevedo
</pre>
73 4933 jjdelcerro
<p>
74
Y esto nos devolberia un objeto JPanel que gestiona la extension "WMS"
75
para el "InfoByPoint".
76
</p>
77
<p>
78
Si quisiesemos recorrer las distintas extensiones de ese punto podriamos
79
hacerlo asi:
80
</p>
81 4929 vacevedo
<pre>
82 4933 jjdelcerro
    ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
83 4643 jjdelcerro
    ExtensionPoint infoByPoint = (ExtensionPoint)extensionPoints.get("InfoByPoint");
84 4933 jjdelcerro
    Iterator infoByPoint =infoByPoint.keySet().iterator();
85
    while( i.hasNext() ) {
86
      String nombre = (String)i.next();
87
      ...
88
      // Y para crear los JPanel asociados a la extension...
89
      Object panel = infoByPoint.create(nombre);
90
      ...
91
    }
92 4929 vacevedo
</pre>
93 4933 jjdelcerro
<p>
94
Ademas de registrar clases en un punto de extension, se pueden registrar
95
instancias que implementen el interface de IExtensionBuilder. En este caso,
96
cuando se invoque al metodo "create" del punto de extension, en lugar
97
de crear una instancia, como no tiene la clase, este invocara al metodo
98
create del objeto que ha sido registrado.
99
</p>
100 4643 jjdelcerro
101 4933 jjdelcerro
<p>
102
Podemos encontrar un ejemplo de esto en la extension de JDBC para el
103
catalogo. Como no existe una capa especifica para las capas JDBC, en lugar
104
de registrar en el punto de extension una clase "capa JDBC", se registra
105
una clase que implementa el interface IExtensionBuilder, que en su
106
metodo create construye una capa vectorial y la inicializa de la forma
107
apropiada para funcionar con la fuente de datos de JDBC.
108
</p>
109
<p>
110
Hay que tener en cuenta que para un punto de extension dado, deberia ser
111
trasparente que se registren en el clases o instancias que contruyen las clases.
112
E incluso que es posible mezclar en un punto de extension los dos
113
mecanismos, como es el caso del catalogo.
114
</p>
115 4643 jjdelcerro
</body>
116
</html>