Revision 4933

View differences:

trunk/libraries/libIverUtiles/src/com/iver/utiles/extensionPoints/package.html
1 1
<html>
2 2
<body>
3

  
3
<p>
4 4
Este paquete expone un mecanismo para registro de clases.
5
<br>
5
</p>
6
<p>
6 7
Permite registrar clases o factorias de clases que luego pueden ser
7 8
recuperadas para construir instancias.
8
<br>
9
</p>
10
<p>
9 11
La finalidad de este registro es el manejo de puntos de extension a una
10 12
aplicacion. Una aplicacion declara o registra con un nombre los puntos de 
11 13
extension que va a tener. Cada punto de extension puede tener registradas una
12 14
o mas extensiones. Cuando se quiere a?adir una extension a la aplicacion, se
13 15
registra la clase o factoria que gestiona esa extension para el punto de extension
14 16
que se desee. 
15
<br>
17
</p>
18
<p>
16 19
Veamos esto con un ejemplo.
17
<br>
20
</p>
21
<p>
18 22
Supongamos que queremos a?adir un punto de extension a la aplicacion gvSIG, que
19 23
permita asignar un mecanismo de presentacion de la informacion asociada a la
20 24
herramienta de "informacion" especializada segun el tipo de tema sobre el que se
21 25
esta trabajando.
22
<br>
26
</p>
27
<p>
23 28
Lo primero que tendriamos que hacer es darle un nombre al punto de extension.
24
Lo llamaremos "InfoByPoint". Para esto, parte de la aplicacion que valla a utilizar
29
Lo llamaremos "InfoByPoint". Para esto, la aplicacion que valla a utilizar
25 30
las extensiones que se registren en este punto deberia hacer lo siguiente:
26
<br>
31
</p>
27 32
<pre>
28 33
  ExtensionPoint infoByPoint = new ExtensionPoint("InfoByPoint","Registra las distintas extensiones que se pueden a?adir al 'InfoByPoint'");
29 34
  ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
30 35
  
31 36
  extensionPoints.put(infoByPoint);
32 37
</pre>
38
<p>
33 39
Con esto creamos un punto de extension de nombre "InfoByPoint", recogemos la 
34 40
instancia del registro de extensiones e insertamos el nuevo punto de extenstion
35
en el.
36
<br>
37
Si desde la parte de la aplicacion que se quieran acceder a la extension de nombre "MiLayer"
41
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"
38 66
se haria:
39
<br>
67
</p>
40 68
<pre>
69
    ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
41 70
    ExtensionPoint infoByPoint = (ExtensionPoint)extensionPoints.get("InfoByPoint");
42
    Object ext = infoByPoint.create("MiLayer");
71
    Object ext = infoByPoint.create("WMS");
43 72
</pre>
44
Y para poder recorrer las distintas extensiones de ese punto:
45
<br>
73
<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>
46 81
<pre>
82
    ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
47 83
    ExtensionPoint infoByPoint = (ExtensionPoint)extensionPoints.get("InfoByPoint");
48
	Iterator infoByPoint =infoByPoint.keySet().iterator();
49
	while( i.hasNext() ) {
50
		String nombre = (String)i.next();
51
		...
52
		
53
	}
84
    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
    }
54 92
</pre>  
93
<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>
55 100

  
101
<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>
56 115
</body>
57 116
</html>

Also available in: Unified diff